hbase2.1.x BulkLoad批量写入数据(未完) 作者:马育民 • 2024-07-28 20:58 • 阅读:10010 # 提出问题 在实际生产中,一般先有了海量数据,需要将 **海量数据** **导入** 到表中。 如果通过 **hbase api的方式** 或者 **shell 客户端方式** 导入 **海量数据**,**可能耗时会比较严重或者占用HBase集群资源较多**(如磁盘IO、HBase Handler数等)。 ### 解决 使用HBase **BulkLoad** 的方式来进行海量数据批量写入到HBase # BulkLoad的使用场景 - 大量数据一次性加载到HBase。(首次将原始数据载入HBase) - 对数据加载到HBase可靠性要求不高,不需要生成WAL文件。 - 使用put加载大量数据到HBase速度变慢,且查询速度变慢时。 - 加载到HBase新生成的单个HFile文件大小接近HDFS block大小。 - 数据需要源于其他位置:需要将其他业务库的数据合并到HBase中,可以从源系统中将数据定期批量加载到HBase中。 - 要定期加载新数据,使用BulkLoad并按照自己的理想时间间隔分批次导入数据。注意如果频繁导入大量HFile可能会导致更频繁地发生大型压缩,从而对性能产生负面影响。 # BulkLoad 原理 ### HBase的存储机制 先复习 HBase的存储机制:HBase存储数据其底层使用的是HDFS来作为存储介质,HBase的每一张表对应的HDFS目录上的一个文件夹,文件夹名以HBase表进行命名(如果没有使用命名空间,则默认在default目录下),在表文件夹下存放在若干个Region命名的文件夹,Region文件夹中的每个列簇也是用文件夹进行存储的,每个列簇中存储就是实际的数据,以HFile的形式存在。 路径格式如下: ``` /hbase/data/default//// ``` ### 实现原理 按照HBase存储数据按照HFile格式存储在HDFS的原理,使用MapReduce直接生成HFile格式的数据文件,然后在通过RegionServer将HFile数据文件移动到相应的Region上去。 流程如下图所示: [![](/upload/0/0/1IX88gitPVB0.png)](/upload/0/0/1IX88gitPVB0.png) ### 三个过程: 1. Transform阶段:使用MapReduce将HDFS上的数据生成HBase的底层HFile数据。 2. Load阶段:根据生成的目标HFile,利用HBase提供的BulkLoad工具将HFile Load到HBase的region中。 3. 加载完数据后原来生成的HFile文件将会被移除(也就是load的过程其实就是文件剪切的过程,此过程类似于hive的load的过程) **注意:**在bulkLoading执行之前要提前把数据导入到hdfs上,因为mapreduce只能读取HDFS上的数据;如果原始数据在hdfs上占用100G大小的空间,那么hdfs上的预留的空间大小要大于200G,因为数据要首先生成hfile也是放在hdfs临时目录下。 # 案例 见下面链接 参考: https://blog.csdn.net/godlovedaniel/article/details/104904471 https://www.cnblogs.com/smartloli/p/9501887.html https://cloud.tencent.com/developer/article/1887283 原文出处:http://malaoshi.top/show_1IX88h63WT3J.html