“hadoop权威指南-汤姆怀特”一书的摘要是:
用户的 map 函数和用户的 reduce 函数之间的所有逻辑都称为 shuffle。然后 Shuffle 跨越 map 和 reduce。在用户的 map() 函数之后,输出在内存循环缓冲区中。当缓冲区满 80% 时,后台线程开始运行。后台线程会将缓冲区的内容输出到溢出文件中。此溢出文件按键分区。并且在每个partition内,key-value对是按key排序的。排序后,如果combiner函数开启,则调用combiner函数。所有溢出文件将合并到一个 MapOutputFile。并且所有 Map 任务的 MapOutputFile 将通过网络收集到 Reduce 任务。减少任务将做另一种排序。然后将调用用户的 Reduce 函数。
所以问题是:
1.)根据上面的总结,这是流程:
Mapper--Partioner--Sort--Combiner--Shuffle--Sort--Reducer--Output
1a.) 这是流程还是其他?
1b.) 你能用一个例子解释一下上面的流程吗?
2.)所以映射器阶段输出是一个大文件(MapOutputFile)?是这个大文件被分解并且键值对被传递到各自的reducer吗?
3.) 当数据在传递到各自的 reducer 时已经排序和组合时,为什么要再次进行排序?
4.) 如果mapper1 在Datanode1 上运行,那么reducer1 是否需要在datanode1 上运行?或者它可以在任何 Datanode 上运行?