【问题标题】:MapReduce intermediate data output locationMapReduce 中间数据输出位置
【发布时间】:2015-04-20 10:13:26
【问题描述】:

您刚刚执行了一个 MapReduce 作业。从 Mapper 的 map 方法发出后,中间数据写入到哪里?

  • A. 中间数据通过网络从 Mapper 流式传输到 Reduce,并且永远不会写入磁盘。
  • B. 进入运行 Mapper 的 TaskTracker 节点上的内存缓冲区,溢出并写入 HDFS。
  • C. 进入内存缓冲区,溢出到运行 Mapper 的 TaskTracker 节点的本地文件系统。
  • D. 进入内存缓冲区,溢出到运行 Reducer 的 TaskTracker 节点的本地文件系统(HDFS 之外)
  • E. 进入运行 Reducer 的 TaskTracker 节点上的内存缓冲区,溢出并写入 HDFS。

【问题讨论】:

  • 今天我评论this question 有你的疑问。简答:执行 Map 任务时,数据写入节点的硬盘。不在内存中,不在 HDFS 中。

标签: hadoop mapreduce


【解决方案1】:

TaskTracker 是一个负责生成 map 和 reduce 工作者的恶魔,它通常驻留在数据节点上。 Map 和 reduce 作业在缓冲区中运行,直到达到某个阈值;此时记录在后台写入磁盘(参见 Hadoop 的 MapReduce 教程中的Memory Management)。达到阈值容量后写入磁盘的过程也称为溢出到磁盘。阈值由参数给出(例如mapreduce.task.io.sort.mbmapreduce.map.sort.spill.percent,对于地图,可以配置)。

答案 A 已关闭,因为中间数据可能会写入磁盘。

可以排除答案 B 和 E,因为溢出的中间数据不会写入 HDFS,而是写入本地文件系统。

最后,D 是错误的,因为问题是要求 Mapper 的 map 方法的中间数据。此外,没有必要指定“外部 HDFS”,因为在 Hadoop 上下文中,本地文件系统总是被理解为非 HDFS。

所以,正确答案是C。

【讨论】:

    【解决方案2】:

    映射器输出(中间数据)存储在每个单独的映射器节点的本地文件系统(不是 HDFS)上。这通常是一个临时目录位置,可以由 hadoop 管理员在配置中设置。 Hadoop Job 完成后会清理中间数据

    我认为这是必须修改以更改中间数据位置的参数

    mapreduce.cluster.local.dir

    【讨论】:

      【解决方案3】:

      映射器输出存储在 tasktracker 节点的本地文件系统(不是 HDFS)上。所以你的答案是选项“C”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-23
        • 2015-05-08
        • 1970-01-01
        • 2016-05-03
        • 1970-01-01
        相关资源
        最近更新 更多