思考题
- 并行化思想
- 批量计算特点
- MapReduce算法的架构
- MapReduce算法设计思想
- 算法调优
- MapReduce运行过程中的各种参数及其作用
-
引言
求解问题的难度
- 问题本身的难度
- 问题规模的难度
- 处理问题规模的难度,这时,问题简单但是计算本身是很困难的,需要并行分布式计算
批量计算的特点
存储位置
- 源文件:GFS
- Map处理结果:本地存储
- Reduce处理结果:GFS
- 日志:GFS
- Word Count
- 自动对文本进行分割
- 在分割之后的每一个KV进行用户定义的Map操作,生成新的KV对
- 对输出的结果集归拢并排序(系统自动完成)
- Reduce对结构进行归纳
Shuffle:从Map输出到Reduce输入的整个过程可以广义地称为Shuffle。Shuffle横跨Map端和Reduce端,在Map端包括Spill过程,在Reduce端包括copy和sort过程。Shuffle
更加优化的KeyValue对设置
- Map算法
- Map函数开始产生输出时,不是直接写入磁盘,二是通过缓冲方式写入内存,进行预排序
- 缓冲区大小
- 缓冲区容量阈值,什么情况下算Spill一次
- 在写磁盘之前,线程根据最终要传送到的reducer对数据
进行partition,每个partition内数据按照key进行键内排
序,如果有combiner,则在排序后的输出上运行
- 一次最多合并的流数
- spill次数的最小值,满足最小值时,combiner才会执行
- Reducer上文件分区的线程数
- Map函数开始产生输出时,不是直接写入磁盘,二是通过缓冲方式写入内存,进行预排序
- Combiner算法
- Partition算法
- Reduce算法
- Map输出文件位于运行map任务的tasktracker的本地磁盘,
reduce任务需要集群上若干map任务的输出作为输入,每
个map任务完成时间可能不同,因此只要有一个map任务完成,reduce任务就开始复制其输出
- reduce任务复制线程:mapred.reduce.parallel.copies,默认5
- Reduce获取一个map输出最大时间: mapred.reduce.copy.backoff,默认300s,在声明失败之前,如 果超时,可以尝试重传
- 如果map输出很小,则复制到reduce的tasktracker的内 存中,否则则先写入内存缓冲区,当超过缓冲区溢出阈值, 或达到map输出阈值时,再合并后溢出写到磁盘中
- 合并因子,一次合并的文件数
- 合并策略
- Map输出文件位于运行map任务的tasktracker的本地磁盘,
reduce任务需要集群上若干map任务的输出作为输入,每
个map任务完成时间可能不同,因此只要有一个map任务完成,reduce任务就开始复制其输出
- 调优原则
- 给shuffle过程尽可能多的内存空间
- Map和reduce函数尽量少用内存
- 运行map和reduce任务的JVM的内存尽量大
- Map端尽量估算map输出的大小,减少溢出写磁盘的次数
- Reduce端的中间数据尽可能的多驻留在内存
- 增加Hadoop的文件缓冲区