从HDFS导入数据到HBase(cdh3u2)
我已经安装了hadoop和hbase cdh3u2。在hadoop我有一个文件在路径/home/file.txt
。它有像这样的数据从HDFS导入数据到HBase(cdh3u2)
one,1
two,2
three,3
我想将这个文件导入hbase。在那里,第一个字段应该被解析为String,第二个字段被解析为整数,然后它应该被推入到hbase中。帮我在dvance做到这一点
aThanks ....
我喜欢使用Apache猪的摄取到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
嘿唐纳德。你能看看这个帖子吗? http://stackoverflow.com/questions/21126483/how-to-have-pig-store-rows-in-hbase-as-text-and-not-bytes – 2014-01-14 23:50:50
唐纳德你是写这个答案的英雄! – 2014-04-25 17:32:52
别忘了在PIG脚本中注册所需的HBase jar。像那样“REGISTER /usr/lib/hbase/lib/*.jar;” – PinoSan 2014-06-22 22:41:19
那你希望你的关键是什么?你是把他们推到一个单一的家庭,还是两个单独的家庭? – 2011-12-27 14:24:30