HBase工具之BulkLoad

本文详述了HBase的BulkLoad功能,用于高效导入海量数据,避免占用大量资源。介绍了BulkLoad的Transform和Load阶段,分析了MapReduce慢的原因、Load阶段的优化及常见问题,强调了在特定场景下BulkLoad的优势。
摘要由CSDN通过智能技术生成

使用BulkLoad是由于实际业务的需要,每个月底都需要向HBase插入大约200G的数据,接近10亿条记录。在插入过程中需要占用大量的IO资源,极大影响了现有的实时数据入库业务的效率。因此需要寻找一种替代的方案来在不影响现有业务的基础上,不占用大量集群资源,快速高效的插入大量的数据。本文主要介绍了BulkLoad的工作机制和应用,以及在使用过程中遇到的问题,最后简要分析了BulkLoad的源码步骤。

BulkLoad简介

HBase可以使用多种方式将数据加载到表中,最直接的方法是使用MapReduce作业中的TableOutputFormat类,或者使用普通的客户端API。但是这些并不总是最有效的方法,涉及到的flush,split,compaction等操作都容易造成节点不稳定,数据导入慢,耗费资源等问题,在海量数据的导入过程极大的消耗了系统性能。

BulkLoad功能使用MapReduce作业直接在 HDFS 中生成持久化的 HFile 数据格式文件,然后将生成的HFile直接加载到正在运行的集群中,从而完成巨量数据快速入库的操作。配合 MapReduce 完成这样的操作,不占用 Region 资源,不会产生巨量的写入 I/O,所以需要较少的 CPU 和网络资源。

但是BulkLoad也有局限,正常的写入是先写WAL,然后在写memstore,而BulkLoad没有写WAL这一步,因此在BulkLoad出现异常情况下,HBase可无法恢复还未持久化的数据。股市数据要求严格,不能丢任意一条记录。因此BulkLoad的局限对其有很大的影响。如果出现数据缺少就要采用其它办法了。

BulkLoad的原理和流程

使用BulkLoad需要两个过程:
1、Transform阶段:使用MapReduce将HDFS上的数据生成成HBase的底层Hfile数据。
2、Load阶段:根据生成的目标HFile,利用HBase提供的BulkLoad工具将HFile Load到HBase目录下面。
这里写图片描述

下面使用精简化码来说明整个过程。

Transform阶段

编写Mapper,对数据进行简单的处理生成rowkey,put输出

public static class BulkLoadMapper extends Mapper<LongWritable, Text, ImmutableBytesWritable, Put> {
   
        @Override
        protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
            String line = value.toString();
            String[] items =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值