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

Hadoop 如何将文件中的数据插入HBase表?,hadoop,hive,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)

我制作了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外壳上执行此插入。
如何执行此操作?

HBase shell
不是为这些目的而设计的,它只允许使用put命令逐行向HBase插入数据

相反,您可以使用
importtsv
工具将文本数据直接导入HBase

假设您已经创建了带有一个列系列的HBase表
so\u table
,并且您的
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
工具,它非常适合批量加载大量输入数据。您可以生成存储文件,然后使用
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

你可以阅读这个工具的官方文档:

你可能想考虑通过蜂巢插入HBASE表中的数据,检查这个链接并在我尝试你的第一个建议时尝试它,所有的行看起来都是坏的行。或者当我尝试你的第二个建议时,如果我尝试LoadIncrementalHFiles命令,结果是没有文件。。。对文件有规定吗?我的文件(example.nt)的每一行都由rowkey主谓宾语组成。每一列都用空格(“”)分隔,我尝试了importtsv,发现它不能使用空格(“”)分隔符,但可以使用任何其他分隔符(分号、逗号等)。您可以将数据分隔符从空格改为其他空格吗?我尝试更改分隔符(制表符),但出现了另一个问题。你能把这个通一下吗?