HBase使用最佳实践-HBase Bulkload原理介绍
一、介绍
HBase有多种方式把数据load进去,最直接的方式是通过HBase Client API逐条写入,或通过MapReduce调用TableOutputFormat方法写入,但它们都不是最有效的方式。HBase还提供了另一种比较有效的加载数据方式:ImportTsv工具将数据转换成HBase内部的组织格式输出成HFile文件;completebulkload工具将ImportTsv生成的文件直接加载到HBase集群内。使用BulkLoad 将会比使用简单HBase API方式占用更少的CPU和网络资源。
2.HBase BulkLoad原理
HBase BulkLoad包含两个主要步骤:
- 通过MapReduce任务来准备数据;
- 将数据加载到HBase中;
2.1 MR任务准备数据
MapReduce的执行过程分为Map端、Reduce端。Map函数输出的<key,value>经过partitioner已经确定了Reducer,所有这些信息在Map端将写入到本地磁盘上;Reducer端通过Fetcher不断从已完成的map上获取本Reducer相关的数据,所有获取的数据将合并在一起然后再交由Reducer函数处理,最终结果在Reducer端输出。
HBase BulkLoad也需要经过Map端和Reduce端。其中Map端主要完成数据转换,根据内部算法将输入文件进行拆分,每个拆分会对应一个Map任务来进行处理;每个Map任务按行读取文件的内容,将每行数据转换为HBase相关对象,最终保存在本地文件系统。
Reduce端主要是读取本地文件系统,然后按照HBase底层的HFile文件格式生产相应文件,并保存在HDFS目录。
2.2 加载数据
通过MapReduce程序生产了HFile文件,但是并没有导入HBase中。这时需要通过completebulkload工具,将生产的HFile文件导入已经运行的HBase中,从而客户可以通过HBase获取到相关数据。
大体上分为两个阶段:
- 扫描出HDFS上的待导入的HFile。
- 针对每个HFile,加载到制定的HBase Region对应的数据目录中。
三. bulkload实验样例如附件所示
- 点赞
- 收藏
- 关注作者
评论(0)