目录
一、HBase BulkLoad介绍
1、前言
在前面的文章中我们介绍了HBASE的存储机制,HBASE存储数据其底层使用的是HDFS来作为存储介质,HBASE的每一张表对应的HDFS目录上的一个文件夹,文件夹名是以HBASE表的名字来命名(如果没有使用命名空间,那么默认是在default目录下)。在表文件夹下存放着若干个region命名的文件夹,而region文件夹中的每个列族也是用文件夹进行存储的,每个列族中存储的就是实际的数据,以HFile的形式存在。路径格式:/hbase/data/default/<tbl_name>/<region_id>/<cf>/<hfile_id>
2、为什么要用bulkload方式导入?
在进行数据传输中,批量加载数据到HBase集群有多种方式,比如通过HBase API进行批量写入数据、使用Sqoop工具批量导数到HBase集群、使用MapReduce批量导入等。这些方式,在导入数据的过程中,如果数据量过大,可能耗时会比较严重或者占用HBase集群资源较多(如磁盘IO、HBase Handler数等)。
3、bulkload的实现原理
按照HBase存储数据按照HFile格式存储在HDFS的原理,使用MapReduce直接生成HFile格式的数据文件,然后再通过RegionServer将HFile数据文件移动到相应的Region上去。
-
HBase数据正常写流程
- bulkload方式的处理示意图
-
bulkload的好处
-
导入过程不占用Region资源
-
能快速导入海量的数据
-
节省内存
-
二、HBase BulkLoad批量写入数据实战
需求
通过bulkload的方式,将我们放在HDFS上面的这个路径/hbase/input/user.txt的数据文件,转换成HFile格式,然后load到myuser2这张Hbase表里面去。
1、开发生成HFile文件的代码
自定义map类
package xsluo.hbase;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hb