DataNodes配置了两个NameNode的位置,并向两者发送块位置信息和心跳。
但为什么这些信息被发送到namenode及其后备兄弟?我认为这个信息已经包含在namenode的fs图像中。 namenode应该知道他放置块的位置。
答案 0 :(得分:6)
名称节点包含整个群集的元数据。它包含每个文件夹,文件,复制因子,块名称等的详细信息。名称节点还在内存中存储有关每个文件的块位置的信息(此信息由数据节点发送的块报告构成)
数据节点存储每个块的以下信息:
他们会定期将心跳和阻止报告发送到名称节点。
心跳:
dfs.heartbeat.interval
(在hdfs-site.xml中)确定。默认设置为3秒。BlockRecoveryCommand
(以恢复指定的块) ,BlockCommand
(用于将块传输到另一个数据节点,用于使某些块无效),Cache/Uncache
(用于缓存/解除块的命令)阻止报告:
dfs.blockreport.intervalMsec
确定(在hdfs-site.xml中)。默认情况下,此值设置为21600000毫秒。答案 1 :(得分:1)
无法从群集外部直接访问Datanode,它位于专用网络中。 Hadoop集群容易出现节点故障,NameNode会跟踪不同DataNode上的所有数据。因此,群集的任何查询都由NN解决,它在DN上提供块地址。