【发布时间】:2017-06-27 04:58:20
【问题描述】:
《hadoop权威指南-tom white》一书的总结是:
用户的map函数和用户的reduce函数之间的所有逻辑都称为shuffle。然后 Shuffle 跨越 map 和 reduce。在用户的 map() 函数之后,输出在内存循环缓冲区中。当缓冲区满 80% 时,后台线程开始运行。后台线程会将缓冲区的内容输出到溢出文件中。此溢出文件按键分区。并且在每个分区内,键值对是按key排序的。排序后,如果启用了combiner函数,则调用combiner函数。所有溢出文件将合并到一个 MapOutputFile。并且所有 Map 任务的 MapOutputFile 将通过网络收集到 Reduce 任务。减少任务将做另一种排序。然后调用用户的Reduce函数。
所以问题是:
1.) 根据上面的总结,流程是这样的:
Mapper--Partioner--Sort--Combiner--Shuffle--Sort--Reducer--输出
1a.) 这是流程还是其他?
1b.) 你能用一个例子解释一下上面的流程吗,比如字数例子,(我在网上找到的不是那么详细)?
2.) 所以映射器阶段输出是一个大文件(MapOutputFile)?正是这个大文件被分解,键值对被传递到各自的reducer上?
3.) 当数据在传递到各自的 reducer 时已经排序和组合时,为什么还要进行第二次排序?
4.) 如果 mapper1 在 Datanode1 上运行,那么 reducer1 是否需要在 datanode1 上运行?或者它可以在任何 Datanode 上运行?
【问题讨论】:
标签: hadoop mapreduce combiners bigdata