MapReduce是一种大规模数据处理的编程模型
使用场景
- PV UV
- 词频统计
- Top N
MapReduce优缺点
- 优点:
- 编程模型简单
- 高伸缩性
- 支持横向扩展 (增加节点)
- 高吞吐离线处理数据
- 并行处理
- 缺点:
- 不支持流式数据
- 不支持实时计算
- 不支持复杂计算
- 不支持迭代计算
shuffle Map端
- Map端会源源不断的把数据输入到一个环形内存缓冲区
- 达到默认80%时
- 新启一个线程
- 把内存缓冲区的数据溢写到磁盘
- 在溢写的过程中
- partition分组
- 对于每个分组,按照key排序
Map处理完成后 - 对溢出到磁盘的多个文件进行Merge操作
- 合并为一个大文件和一个索引文件
shuffle Reduce端
- Map端完成之后,暴露一个Http Server给Reduce端获取数据使用
- Reduce启动拷贝线程从各个Map端拷贝结果
- 一边拷贝一边进行Merge操作(归并排序)
Combiner
- 满足结合律:求最大值,求和
- 不适合:求平均数
MapReduce容错性
- Task运行失败
- Map Task失败
- MRAppMaster重启Map Task
- Reduce Task失败
- MRAppMaster重启Reduce Task ,Map Task的输出结果保存在磁盘上
- Map Task失败
Task运行缓慢
- 通常是由于硬件损坏,软件bug或者配置错误导致
- 单个Task运行缓慢会显著影响整体作业运行时间
- 解决方案 :推测执行
Map Task的数目
- 计算公式
- return Math.max(minSize , Math.min(maxSize , blockSize))
Reduce Task数目
- 默认值为1 可以通过mapreduce.job.reduce 控制,如果需要全局排序(计算词频) 个数应该为1
- 如果设置了partition RedeceTask的数量应该设置成一样
- 如果没有 partition的数量应该根据reduceTask的数量来确定