赞
踩
还是以一个经典的图片来说明问题.
1. 首先, 我们能确定我们有一份输入, 而且他的数据量会很大
2. 通过split之后, 他变成了若干的分片, 每个分片交给一个Map处理
简单篇:
1. 需求: 统计某个站点每天的PV
2. 数据输入: 以天为分区存放着的日志数据, 一条日志代表一个PV
3. 数据输出: 日期 PV
4. Mapper编写
主要的工作很简单, split每一条日志, 取出日期, 并对该日期的PV搜集一条记录, 记录的value为ONE(1, 一条记录代表一个PV)
5. Reducer编写
reduce的任务是将每天(key相同的为同一天) 的日志进行汇总(sum), 最后以天为key输出汇总结果.
6. 设置环境, 指定job(Run)
6.1 设置输入路径.
6.2 设置输出路径
6.3 设置Mapper/Reducer 和 输入数据的数据格式和数据类型
6.4 执行命令:
hadoop jar site-pv-job.jar org.jiacheo.SitePVSumSampleJob
6.5 查看hadoop的web 工具, 显示当前job进度.
可以看出, 此次输入产生了14292个map,和29个reduce. reduce数这么少是因为我的reduce的slots数只有30, 所以设置为29, 以防一个挂了, 还能在一波reduce中算好.
6.6 计算结果.
上面部分是hadoop cli客户端显示的进度, 中间是web工具显示的输入输出的一些数据的统计.可以看出, 此次输入数据总共有1.6TB大小, 设计的总记录数为69.6亿. 也就是这份数据记录了该站点的69.6亿的PV. 左下角可以看出, 执行时间比较长, 用了18分钟+46秒.这里慢的原因不在于reduce, 而是我的map的slots太少, 只有300个, 总共一万多个map, 那要分好几百波才能算完map, 所以瓶颈在map这里.右下角是统计的结果数据, 可以看出, 该站点的整体的PV是呈现上升趋势的.
至此, 一个简单的map/reduce程序就写好并运行了.
下面介绍复杂一点的实践. 当然, 还是等有时间再来介绍吧. 碎觉先.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。