HBase应用(二):把数据批量导入HBase

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的执行时间

你可能感兴趣的:(HBase应用(二):把数据批量导入HBase)