如何将文件中的数据插入HBase表?

时间:2015-10-06 04:43:53

标签: hadoop hive

我做了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上执行此插入。 我怎么能这样做?

1 个答案:

答案 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