HBase作为MapReduce作业的数据源和数据接收器

       对于MapReduce 作业,HBase可用作数据源——TableInputFormat,也可用作数据接收器——TableOutputFormat或 MultiTableOutputFormat,使用TableMapper、TableReducer子类,编写MapReduce作业读取或写入HBase。可以参考IdentityTableMapper和 IdentityTableReducer了解基本的应用。更详细的实例可以阅读RowCounter的源码或者单元测试用例org.apache.hadoop.hbase.mapreduce.TestTableMapReduce的源码。

       如果你运行的MapReduce 作业使用HBase作为源或者接收器,那么你需要配置源或接收器的table以及column names。

当你从HBase读取数据时,TableInputFormat从HBase请求1个regions的list,然后封装为1个map,这个map可以是map-per-region或mapreduce.job.maps其中之一,不管是哪1个map都很小。如果你的Job仅有2个maps,提高mapreduce.job.maps这个值,以超过regions的数量。如果你运行的集群是1个node运行1个TaskTracer/NodeManager、RegionServer的话,那么maps将运行在相邻的TaskTracer/NodeManager上。

       当你写数据到HBase时,可能会避免Reduce阶段,而从你的map中将数据回写到HBase。当你的Job不会要排序、整理时,这种方法合适,这种MapReduce一般都是用map来分发数据。在Insert方面,除非是你指定,要不然HBase不会使用sort。如果你不需要reduce,可以把reduces的数量设置为0,你的map可用分开记录处理用于报告,在Job最后使用TableOutputFormat将数据写入HBase。如果你真要使用reduce,大多数情况下都是使用多个reduce,这样HBase集群会负载会均衡一点。

       HRegionPartitioner是1个新的HBase分区器,它可以将大量存在的regions作为大量的reduces来运行。当你的table很大,你通过上传的方式无法大大的减少regions的数量,那么HRegionPartitioner很适合。除了这种情况之外,都使用默认的分区器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值