hadoop map reduce 阶段笔记

来源:互联网 发布:linux exec 编辑:程序博客网 时间:2024/06/02 05:43
shuffle and sort
MR 框架保证:每个 reducer 的输入都是按照 key 键排过序的。
shuffle:将map输出结果送到reducer和排序的功能。
1) map:每个map task将结果输出到环形内存缓冲区,当到达一定阈值,则启动一个后台进程将缓存中的数据 1: 按照 reduce 阶段 reducer 的个数将数据分区,然后在每个分区里面的数据按照key键值排序,下一步,如果设置了 combiner 函数,则将这个combiner函数作用于上一步的结果,然后就是把数据保存到磁盘。
注意:
当这个后台进程将内存中的数据写入磁盘的时候,如果缓存已经满了,那么task会阻塞,直到spill阶段完成。
内存缓存默认是 100M,每当到达阈值则生成一个spill文件,task完成了以后,将多个spill文件合并成一个文件。这个文件是分区的,而且每个分区中的数据都是按key值排好序的。
可以让数据压缩
map 的数据是通过 http 传输给 reducer 的。

2)reduce:reducer 要执行任务,则第一步就需要获得 map 阶段输出到磁盘的数据。这个阶段叫做 copy phase。每个 reducer 默认有5个用于从远程机器获取数据的线程,并行执行。
  map task 完成以后会利用心跳机制通知 application master 。application master 知道 map 和 host 的对应关系。 每个reducer 有一个线程会周期性的询问 master map 阶段的输出数据位置,直到它已经获得所有map 阶段的数据为止。
copy phase:
1 如果 map 输出结果数据量比较小,则直接放在内存中,否则放到磁盘中。
2 当内存中的数据到达一定阈值,则将数据合并然后spill 到磁盘。(如果配置了 combiner , 那么保存到磁盘之前进行 combine)
3 copy 阶段继续执行,会开启一个后台进程将多个小文件合并并排序生成一个大文件。
4 当 map task 有一个完成了则开始 copy phase 
sorted phase:
当map阶段文件都已经copy到reducer段然后执行 sorted phase(merge phase)。
1 将各个 map 输出的文件合并。
reduce phase:
将 sorted 阶段的结果作为 reduce 函数的输入,输出结果,如果是hdfs文件,那么第一个block将保存在本地节点的机器上