12

我已经安装了 hadoop 和 hbase cdh3u2。在 hadoop 中,我在路径中有一个文件/home/file.txt。它有类似的数据

one,1
two,2
three,3

我想将此文件导入 hbase。其中,第一个字段应解析为字符串,第二个字段应解析为整数,然后将其推入 hbase。帮我做这件事

提前谢谢....

4

1 回答 1

21

我喜欢使用 Apache Pig 摄取到 HBase,因为它简单、直接且灵活。

在您创建表和列族之后,这是一个可以为您完成工作的 Pig 脚本。要创建表和列族,您将执行以下操作:

$ hbase shell
> create 'mydata', 'mycf'

将文件移动到 HDFS:

$ hadoop fs -put /home/file.txt /user/surendhar/file.txt

然后,编写 pig 脚本以使用HBaseStorage存储(您可能需要查看如何设置和运行 Pig):

A = LOAD 'file.txt' USING PigStorage(',') as (strdata:chararray, intdata:long);
STORE A INTO 'hbase://mydata'
        USING org.apache.pig.backend.hadoop.hbase.HBaseStorage(
              'mycf:intdata');

请注意,在上面的脚本中,键将是strdata. 如果您想从某物创建自己的密钥,请使用FOREACH语句来生成密钥。HBaseStorage 假设前一个关系中的第一件事(A::strdata在这种情况下)是关键。


其他一些选择是:

  • 编写一个Java MapReduce作业来做与上面相同的事情。
  • 与客户端直接与 HTable 交互并逐行放入。这只应使用小得多的文件来完成。
  • 使用某种将 csv 行转换为 shellput命令的脚本(即 sed、perl、python)将数据推送到 hbase shell。同样,仅当记录数量很少时才应该这样做。

    $ cat /home/file.txt | transform.pl
    put 'mydata', 'one', 'mycf:intdata', '1'
    put 'mydata', 'two', 'mycf:intdata', '2'
    put 'mydata', 'three', 'mycf:intdata', '3'
    
    $ cat /home/file.txt | transform.pl | hbase shell
    
于 2011-12-27T14:42:48.877 回答