我做了example.nt,如下所示。
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 shell上执行此插入。 我怎么能这样做?
答案 0 :(得分:3)
HBase shell
不是为这些目的而设计的,它允许只使用put命令逐行插入数据到HBase。
您可以使用importtsv
工具代替此工具,该工具可以直接将文本数据导入HBase。
假设您已经创建了具有一个列族so_table
的HBase表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=';'
此外,您应该了解这种方式数据通过许多put命令直接插入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