2011-12-27 113 views
12

我已經安裝了hadoop和hbase cdh3u2。在hadoop我有一個文件在路徑/home/file.txt。它有像這樣的數據從HDFS導入數據到HBase(cdh3u2)

one,1 
two,2 
three,3 

我想將這個文件導入hbase。在那裏,第一個字段應該被解析爲String,第二個字段被解析爲整數,然後它應該被推入到hbase中。幫我在dvance做到這一點

aThanks ....

+0

那你希望你的關鍵是什麼?你是把他們推到一個單一的家庭,還是兩個單獨的家庭? – 2011-12-27 14:24:30

回答

20

我喜歡使用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 
    
+0

嘿唐納德。你能看看這個帖子嗎? http://stackoverflow.com/questions/21126483/how-to-have-pig-store-rows-in-hbase-as-text-and-not-bytes – 2014-01-14 23:50:50

+0

唐納德你是寫這個答案的英雄! – 2014-04-25 17:32:52

+0

別忘了在PIG腳本中註冊所需的HBase jar。像那樣「REGISTER /usr/lib/hbase/lib/*.jar;」 – PinoSan 2014-06-22 22:41:19