HBase Bulk Load的基本使用

1.需求

最近在项目中需要将大量存在于文本文件中的数据批量导入到hbase表中,并且涉及到将多个文本文件中的数据合并到同一张hbase表中,而这些文本文件中的字段并不是完全相同的

2.工具选型

因为项目当中查询数据采用的是Phoenix,因此,最初想利用Phoenix的Bulk CSV Data Loading来实现,但是简单调研之后,发现并不适合我们本次的需求,后面我会补充一篇文章来对hbase的bulkload和Phoenix的Bulk CSV Data Loading进行一个简单的对比

3.HBase Bulk Load概览

HBase Bulk Load分为两个步骤,第一个步骤采用MapReduce将文件中的数据转换成hbase内部的数据格式,第二个步骤直接将生成的StoreFiles导入到HBase当中,使用Bulk Load导数据比直接使用HBase API能够明显地降低CPU和网络资源的使用率

4.HBase Bulk Load使用说明

4.1.ImportTsv

ImportTsv是一个能够将Tsv格式的数据处理成可以直接导入到HBase中的数据格式(StoreFiles)的工具,基本使用方式如下:

HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase classpath` ${HADOOP_HOME}/bin/hadoop jar ${HBASE_HOME}/hbase-server-VERSION.jar importtsv -Dimporttsv.columns=HBASE_ROW_KEY,d:c1,d:c2 -Dimporttsv.bulk.output=hdfs://storefileoutput datatsv hdfs://inputfile

这一步执行完毕后会在hdfs的/storefile-outputdir中生成中间文件StoreFiles,接着调用completebulkload就可以将数据最终导入到hbase中
注:

  • 上面的Dimporttsv.columns=HBASE_ROW_KEY为固定写法,指定我们的数据的第一列为row key;
  • d:c1中d为需要导入hbase表的列族,c1为列族中的列;
  • -Dimporttsv.bulk.output=hdfs://storefileoutput为生成的中间文件StoreFiles的存放路径
  • datatsv为hbase的表名;
  • hdfs://inputfile为tsv文件的路径;

补充几个可选参数:

-Dimporttsv.skip.bad.lines=false -遇到错误行则任务自动失败
-Dimporttsv.separator=, -自定义行内分隔符为comma
-Dimporttsv.timestamp=currentTimeAsLong -导入数据时使用自定义的时间戳(基本不用)
-Dimporttsv.mapper.class=my.Mapper -使用自定义的Mapper类来替代默认的 org.apache.hadoop.hbase.mapreduce.TsvImporterMapper
4.2CompleteBulkLoad

completebulkload 会将上一步生成的StoreFiles导入到HBase中,导入成功后自动删除这些中间文件

HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase classpath` ${HADOOP_HOME}/bin/hadoop jar ${HBASE_HOME}/hbase-server-VERSION.jar completebulkload <hdfs://storefileoutput> <tablename>

5.温馨提示

如果需要BulkLoad的数据量过大,在hbase建表的时候请提前做好合适的pre-split

6.一个简单的小例子

6.1hbase建表语句
create 'user', '0', SPLITS => ['1', '2', '3', '4', '5','6', '7', '8', '9']
6.2ImportTsv

注:6.2和6.3中的命令和jar包路径均为hdp2.5的默认安装位置

HADOOP_CLASSPATH=`/usr/hdp/current/hbase-master/bin/hbase classpath` /usr/hdp/current/hadoop-client/bin/hadoop jar /usr/hdp/2.5.0.0-1245/hbase/lib/hbase-server-1.1.2.2.5.0.0-1245.jar importtsv -Dimporttsv.separator=, -Dimporttsv.columns=HBASE_ROW_KEY,0:id_name,0:id_no,0:id_type,0:user_status,0:if_receive,0:mobile_no -Dimporttsv.bulk.output=hdfs:///bulkdata/a user hdfs:///data/WB10_user1019_im.txt
6.3Complete Bulk Load
HADOOP_CLASSPATH=`/usr/hdp/current/hbase-master/bin/hbase classpath` /usr/hdp/current/hadoop-client/bin/hadoop jar /usr/hdp/2.5.0.0-1245/hbase/lib/hbase-server-1.1.2.2.5.0.0-1245.jar completebulkload hdfs:///bulkdata/a user

至此,HBase Bulk Load的基本使用方法已经介绍完了,如需了解更多内容,请参考HBase官方文档

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值