知识库 : 通过MapReduce对HBase数据进行统计分析

 

Edit Document

通过MapReduce对HBase数据进行统计 分析

目录

一、概述

二、应用场景

三、 Map 程序

四、 Reduce 程序

五、 Combiner 程序

六、作业执行

 

概述

HB ase 作为 一种 kv数据库 ,能够很好的面对高吞吐率 在线数据 读写 服务 尤其是写操作, rowkey 多条件查询、数据分析 统计等 场景 下,HBase 表现 的就不是很好了,这些场景下 就比较 适合 M apReduce 出场

应用场景

这里就通过一个示例 程序 ,一步一步带着大家学习 MapReduce的 开发。

假设 我们有一张 业务 (biz_detail ,它 有一列是 业务 发生日期 (ts ), 行数据 就是 一条 业务 发生, 现在 我们要统计 业务 发生 日期 每天的业务量(数据行数),对于

这样一个简单统计需求, 我们 可以通过 M apReduce 程序 来实现。

M ap 程序

TableAnalyzeMap继承HBase的TableMapper基类 把ts看做 文本 ,行数 自然 整数,所以 key-value输出 类型自然是 < Text,IntWritable >,具体 代码如下:

 

R educe 程序

TableAnalyze Reduce 继承HBase的Table Reducer 基类 ,这里我们把最终聚合后的结果写到目标表中, r owkey对应 t s,行数对应目标表的 c f:count列,具体代码如下:

 

C ombiner 程序

分析 m ap程序,我们可以看到, m ap阶段处理后的数据是没有任何合并的, k ey为日期,

v alue都是 1 ,这样的话,如果直接进入 r educe阶段,要分发的数据量还是比较大的,会造成网络负担,针对这个问题,我们可以在 m ap阶段后,做一下本地 r educe,这样进入 r educe的阶段的数据量会大大减少。

 

、作业执行

程序接收四个参数,依次为:业务表名称、日期字段列族、日期字段列名、目标表名。

当然你也可以使用 A pache Commons CLI类解析命令行参数,这里就不做说明了。

其中scan.setCaching(500)设置每次读取行数,根据实际情况进行配置,scan.setCacheBlocks(false)告诉 H Base本次扫描的数据不要放入缓存中,其他就不再详述,通过代码就能够看明白。

这样,整个 m apreduce程序我们已经开发完成,生成相应 j ar包后,我们就可以执行了。

当然,如果要在hbase集群外执行的话,作业执行程序里就要配置 h base必要环境信息。

 

Attachments:

通过MapReduce对HBase数据进行统计分析.docx (application/vnd.openxmlformats-officedocument.wordprocessingml.document)
通过MapReduce对HBase数据进行统计分析.docx (application/vnd.openxmlformats-officedocument.wordprocessingml.document)