通过MapReduce对HBase数据进行统计 分析
目录
一 、 概述
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)