为什么Map任务输出被写入本地磁盘而不是HDFS?

mch*_*gun 3 hadoop mapreduce

我准备参加考试,这是讲义中的一个问题:

Why Map tasks outputs are written to the local disk and not to HDFS?
Run Code Online (Sandbox Code Playgroud)

这是我的想法:

  • 减少网络流量使用,因为reducer可能与输出在同一台机器上运行,因此不需要复制.
  • 不需要HDFS的容错能力.如果作业中途死亡,我们总是可以重新运行地图任务.

还有什么其他可能的原因?我的答案合理吗?

Cha*_*ant 7

你的推理是正确的.
但是我想补充几点:如果将地图输出写入hdfs会怎样.
现在,写入hdfs与写入本地磁盘不同.这是一个更复杂的进程,namenode确保至少将dfs.replication.min副本写入hdfs.并且namenode还将运行后台线程以为下复制的块创建其他副本.
假设,用户在两者之间杀死作业或者作业失败.hdfs上会有很多中间文件无缘无故你必须手动删除.如果此过程发生的次数过多,则您的群集会执行并会降级.Hdfs针对追加而非频繁删除进行了优化.
此外,在映射阶段,如果作业失败,它会在退出之前执行清理.如果它是hdfs,则删除过程将要求namenode将块删除消息发送到适当的数据节点,这将导致该块的失效并将其从中移除blocksMap.如此多的操作只涉及清理失败而无法获得!