hadoop - MapReduce 中间数据输出位置

标签 hadoop mapreduce

您刚刚执行了一个 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.mbmapreduce.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/

相关文章:

mysql - sqoop 将本地 csv 导出到 mapreduce 上的 MySQL 错误

c# - 乌鸦数据库 : What's wrong with this multimap/reduce index?

java - MapReduce到Spark

linux - Linux 上多节点 hadoop 设置的 MCR 权限问题

hadoop - 存储大量通常以千字节为单位的小文本文件并执行分析的好方法

apache-spark - Spark/Yarn-连接错误RetryingBlockFetcher尝试从随机端口获取 block

hadoop - 如何强制 hadoop 运行超过 1 个 Reduce 作业

map - 解释什么是 Hadoop 和 Map/Reduce 的最简单方法是什么?

hadoop - 在配置单元中添加UDF时出错

hadoop - MapReduce:给定数字文件,输出不重复/唯一数字的数量