我正在准备考试,这是讲义中的一个问题:
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/