您刚刚执行了一个 MapReduce 作业。从 Mapper 的 map 方法发出后,中间数据写入到哪里?
- A. 中间数据通过网络从 Mapper 流式传输到 Reduce,并且永远不会写入磁盘。
- B. 进入运行 Mapper 的 TaskTracker 节点上的内存缓冲区,溢出并写入 HDFS。
- C. 进入内存缓冲区,溢出到运行 Mapper 的 TaskTracker 节点的本地文件系统。
- D. 进入内存缓冲区,溢出到运行 Reducer 的 TaskTracker 节点的本地文件系统(HDFS 之外)
- E. 进入运行 Reducer 的 TaskTracker 节点上的内存缓冲区,溢出并写入 HDFS。
最佳答案
TaskTracker 是负责生成 map 和 reduce worker 的恶魔,它通常驻留在数据节点上。 Map 和 Reduce 作业在缓冲区中运行,直到达到某个阈值;那时记录在后台写入磁盘(参见 Hadoop 的 MapReduce 教程中的 Memory Management)。达到阈值容量后写入磁盘的过程也称为溢出到磁盘。阈值由参数给出(例如 mapreduce.task.io.sort.mb
,mapreduce.map.sort.spill.percent
,对于 Map,可以配置) .
答案 A 关闭,因为中间数据可能会写入磁盘。
答案 B 和 E 可以排除,因为溢出的中间数据不是写入 HDFS,而是写入本地文件系统。
最后,D 错了,因为问题是请求 Mapper 的 map 方法的中间数据。此外,没有必要指定“HDFS 外部”,因为在 Hadoop 上下文中,本地文件系统 始终被理解为非 HDFS。
所以,正确答案是C。
关于hadoop - MapReduce 中间数据输出位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28600078/