1、使用importtsv:将hdfs中的结构化数据导入HBase中
1、默认情况下,hdfs上的文件,是要以'\t'分隔的,例如
test.tsv
20170222_10001 column=info:name, timestamp=1497059738675, value=tom
20170222_10002 column=info:name, timestamp=1497059738956, value=jack
20170222_10003 column=info:name, timestamp=1497059739013, value=leo
20170222_10004 column=info:name, timestamp=1497059739121, value=peter
20170222_10005 column=info:name, timestamp=1497059739254, value=jim
20170222_10006 column=info:name, timestamp=1497059740585, value=zhangsan
$HADOOP_HOME/bin/yarn
jar $HBASE_HOME/lib/hbase-server-0.98.6-hadoop2.jar
importtsv
-Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:age,info:sex
stu_info /test.tsv
-》stu_info 为hbase上表名;test.tsv为hdfs上文件
2、如果不是默认的\t,就要在语句中指定输入的分隔符,比如“,”
$HADOOP_HOME/bin/yarn
jar $HBASE_HOME/lib/hbase-server-0.98.6-hadoop2.jar
importtsv
-Dimporttsv.separator=,
-Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:age,info:sex
stu_info /test2.csv
-》Dimporttsv.separator指定hdfs文件中的分隔符
2、completebulkload:大批量数据导入到HBase中
第一步:转换成Ffile(其实就是storeFile)
$HADOOP_HOME/bin/yarn
jar $HBASE_HOME/lib/hbase-server-0.98.6-hadoop2.jar
importtsv
-Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:age,info:sex
-Dimporttsv.bulk.output=/testHfile
stu_info /test3.tsv
-》Dimporttsv.bulk.output 输出到hdfs上,文件夹不需要手动创建
第二步:把Hfile导入hbase
$HADOOP_HOME/bin/yarn
jar $HBASE_HOME/lib/hbase-server-0.98.6-hadoop2.jar
completebulkload
/testHfile stu_info
Bulk Load:利用Hbase的数据信息按照特定格式存储在hdfs内,直接在HDFS中生产持久化的HFile数据格式文件,然后上传至合适位置,即完成巨量数据快速入库的办法。配合mapreduce完成,高效便捷,而且不占用region资源,增添负载,在大数据量写入时能极大的提高写入效率,并降低对HBase的写入压力;
通常MapReduce在写入HBase时使用的是TableOutputFormat方式,在ruduce中直接生成put对象写入HBase(见hbse应用一),该方式在大数据量写入时效率低下(HBase会block写入,频繁进行flush,split,compact等大量io操作),并对Hbase节点的稳定性造成一定的影响(GC时间过长,响应变慢,导致节点超时退出,并引起一系列连锁反应);HBase支持bulk load的入库方式,通过使用先生成HFile,然后再bulk load到hbase的方式来替代之前调用HTableOutputFormat的方法有如下的好处:
(1)、消除了对HBase集群的插入压力
(2)、提高了Job的运行速度,降低了Job的执行时间