2015-10-06 49 views
0

我製作瞭如下圖所示的example.nt。如何將文件中的數據插入到HBase表中?

1 "aaaaa1" "bbbbb1" "ccccc1" 
    2 "aaaaa2" "bbbbb2" "ccccc2" 
    3 "aaaaa3" "bbbbb3" "ccccc3" 
    ....... 

欲插入此數據到HBase的表,該表包括

(key int,subject string,predicate string,object string) 
    (:key,cf1:val1,cf1:val2,cf1:val3) 

我要上HBase的殼進行該插入。 我該怎麼做?

+0

你可能要考慮通過蜂巢將在HBase的表中的數據,檢查該鏈接並嘗試一下https://cwiki.apache.org/confluence/display/Hive/HBaseIntegration – mbaxi

回答

2

HBase shell不是爲這些目的而設計的,它只允許用put命令逐行插入數據到HBase。

取而代之,您可以使用importtsv工具,該工具允許您將文本數據直接導入到HBase。

假設你已經創建HBase的表so_table有一列家庭cf1和你example.nt文件是在/tmp/example/ HDFS目錄。因此,這可以通過以下的方式來使用它:

hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.columns=HBASE_ROW_KEY,cf1:val1,cf1:val2,cf1:val3 so_table /tmp/example/ 

可能是你將需要添加選項來改變列分隔符:

-Dimporttsv.separator=';' 

而且你應該明白,直接通過這樣的數據插入到HBase的許多人把命令。還有另一種使用importtsv工具的方法,它非常適合批量加載大量輸入數據。您可以生成StoreFiles,然後用completebulkload工具完全加載到HBase的:

hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.bulk.output=/tmp/example_output -Dimporttsv.columns=HBASE_ROW_KEY,cf1:val1,cf1:val2,cf1:val3 so_table /tmp/example/ 
hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles /tmp/example_output so_table 

你可以閱讀該工具的官方文檔:https://hbase.apache.org/book.html#_importtsv

+0

當我嘗試你的第一個建議時,所有的行看起來像壞行。或者當我嘗試你的第二個建議時,如果我嘗試LoadIncrementalHFiles命令,結果是沒有文件...是否有規則與文件?我的文件(example.nt)的每一行都由rowkey主語謂詞對象組成。並且每列都以空格分隔(「」) –

+0

我試過importtsv並檢測到它不能與空格(「」)分隔符一起工作,但可與任何其他分隔符(分號,逗號等)一起使用。你能把你的數據分隔符從空間變成其他任何分隔符嗎? – maxteneff

+0

我嘗試更改分隔符(選項卡),但發生了另一個問題。像[鏈接](https://stackoverflow.com/questions/32977224/hbase-bulk-loading-error)你可以通過這個? –

相關問題