在 Hadoop 集群上运行 MapReduce 作业时,我正在寻找有关事件链的一些特定信息。
假设我的 Reduce 任务即将完成。在我的最后一个 reducer 将其输出写入输出文件后,输出文件有多少个副本?最后一个 reducer 完成对输出文件的写入后究竟会发生什么。NameNode 何时请求各自的 Data Node 复制输出文件?以及如何通知名称节点输出文件已准备就绪?谁将这些信息传达给 NameNode?
谢谢!
Reduce 任务将输出写入 HDFS。他们通过首先与名称节点通信来请求一个块来做到这一点。然后 name 节点告诉 reducer 写入哪些数据节点,然后 reducer 实际将数据直接发送到第一个数据节点,然后将其发送到第二个数据节点,第二个数据节点将其发送到第三个节点。通常,名称节点会将内容保存在本地,因此第一个数据节点可能是运行 reduce 任务的同一台机器。
一旦 reducer 完成了输出的写入,并且数据节点已经确认了这一点,reducer 本身将通过周期性的心跳通信告诉作业跟踪器它已经完成。
要了解 HDFS 复制的基础知识,请阅读HDFS 架构文档中的副本放置。简而言之,NameNode 将尝试使用相同的机架以最小化延迟。