将数据从HDFS导入HBase(cdh3u2)

Nag*_*ran 12 hadoop hbase hdfs cloudera sqoop

我已经安装了hadoop和hbase cdh3u2.在hadoop我有一个文件在路径上/home/file.txt.它有像这样的数据

one,1
two,2
three,3
Run Code Online (Sandbox Code Playgroud)

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

athanks in dvance ....

Don*_*ner 20

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

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

$ hbase shell
> create 'mydata', 'mycf'
Run Code Online (Sandbox Code Playgroud)

将文件移动到HDFS:

$ hadoop fs -put /home/file.txt /user/surendhar/file.txt
Run Code Online (Sandbox Code Playgroud)

然后,将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');
Run Code Online (Sandbox Code Playgroud)

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


其他一些选择是:

  • 编写Java MapReduce作业以执行与上面相同的操作.
  • 客户端直接交互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
    
    Run Code Online (Sandbox Code Playgroud)