将数据从HDFS导入HBase(cdh3u2)

时间:2011-12-27 11:44:59

标签: hadoop hbase hdfs cloudera sqoop

我已经安装了hadoop和hbase cdh3u2。在hadoop中,我在路径/home/file.txt处有一个文件。它有像

这样的数据
one,1
two,2
three,3

我想将此文件导入hbase。在那里,第一个字段应解析为String,第二个字段解析为整数,然后它应推入hbase。帮我做这个

athanks in dvance ....

1 个答案:

答案 0 :(得分:20)

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

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

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

将文件移至HDFS:

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

然后,将猪脚本写入HBaseStorage存储(您可能需要查找如何set up and run 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工作,做同样的事情。
  • 使用the client直接与HTable交互并逐行放入。这应该只用更小的文件来完成。
  • 使用某种脚本(即sed,perl,python)将数据推送到hbase shell,该脚本将csv行转换为shell put命令。同样,只有在记录数量很少的情况下才能这样做。

    $ 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