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

标签 hadoop mapreduce

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

Why Map tasks outputs are written to the local disk and not to HDFS?

这是我的想法:

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

还有哪些可能的原因?我的回答合理吗?

最佳答案

你的推理是正确的。
但是我想补充几点:如果 map 输出写入hdfs会怎么样。
现在,写入hdfs不像写入本地磁盘。这是一个更复杂的过程,namenode 确保至少将 dfs.replication.min 副本写入 hdfs。并且 namenode 还将运行一个后台线程来为未复制的 block 制作额外的副本。
假设,用户在中间杀死了作业或者作业刚刚失败。会有很多中间文件无缘无故地坐在 hdfs 上,您必须手动删除这些文件。如果这个过程发生太多次,你的集群的性能就会下降。 Hdfs 针对追加和不频繁删除进行了优化
此外,在映射阶段,如果作业失败,它会在退出前执行清理。如果是 hdfs,删除过程将需要 namenode 向适当的数据节点发送 block 删除消息,这将导致该 block 失效并从 blocksMap 中删除。如此多的操作只是为了清理失败而没有任何收获!!

关于hadoop - 为什么 Map 任务输出写入到本地磁盘而不是 HDFS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23578418/

相关文章:

hadoop - 在 OpenNLP 中合并多个文档分类器模型

hadoop - 将 Hive 表中的数据导出到本地计算机文件系统

hadoop - 如何在Hadoop主程序中访问reducer输出的值(或键)?

hadoop - Giraph无法设置稍大的超步值吗?

java - MapReduce 作业中的多个键

python - 如何减少 python 中的元组列表

hadoop - Hadoop在端口9000上的连接被拒绝。VirtualBox端口9000转发不适用于桥接适配器

r - dplyr 重命名 plyrmr 中的等价物

hadoop - 如何在Hadoop程序中使用外部Jar文件

hadoop - 为什么在一个 Hadoop 作业中只使用 1 个 map 和 1 个 reduce 任务以及 1 个节点?