我已经安装了hadoop和hbase cdh3u2。在hadoop中,我在路径/home/file.txt
处有一个文件。它有像
one,1
two,2
three,3
我想将此文件导入hbase。在那里,第一个字段应解析为String,第二个字段解析为整数,然后它应推入hbase。帮我做这个
athanks in dvance ....
答案 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
)是关键。
其他一些选择是:
使用某种脚本(即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