当前位置:  开发笔记 > 前端 > 正文

为什么datanode将块位置信息发送到namenode?

如何解决《为什么datanode将块位置信息发送到namenode?》经验,为你挑选了1个好方法。

在https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithNFS.html上有以下单词:

DataNodes配置了两个NameNode的位置,并向两者发送块位置信息和心跳.

但为什么这些信息被发送到namenode及其后备兄弟?我认为这个信息已经包含在namenode的fs图像中.namenode应该知道他放置块的位置.



1> Manjunath Ba..:

名称节点包含整个群集的元数据.它包含每个文件夹,文件,复制因子,块名称等的详细信息.名称节点还在内存中存储有关每个文件的块位置的信息(此信息由数据节点发送的块报告构成) .

数据节点存储每个块的以下信息:

存储在块中的实际数据

存储在块中的数据的元数据.主要包含块中存储的数据的校验和.

他们定期将心跳和阻止报告发送到名称节点.

心跳:

心跳报告的间隔由配置参数dfs.heartbeat.interval(在hdfs-site.xml中)确定.默认情况下,此值设置为3秒.

心跳中包含的一些信息是:

注册:数据节点注册信息

容量:数据节点上可用的总存储容量

dfsUsed:HDFS使用的存储

剩余:可用于HDFS的剩余存储空间

blockPoolUsed:块池使用的存储

xmitsInProgress:从此数据节点到其他节点的传输次数

xceiverCount:活动收发器线程数

xmitsInProgress:从此数据节点到其他节点的传输次数

cacheCapacity:数据节点上可用的总缓存容量

cacheUsed:使用的缓存量

名称节点以下列方式使用此信息:

数据节点的运行状况:此数据节点是否应标记为死或活?

注册新数据节点:如果这是新添加的数据节点,则注册其信息

更新数据节点的度量标准:心跳中发送的信息用于更新节点的度量标准

向数据节点发出命令:名称节点可以根据心跳中收到的信息向数据节点发出以下命令:( BlockRecoveryCommand用于恢复指定的块),BlockCommand(用于将块传输到另一个数据节点,用于使某些块无效) ,Cache/Uncache(用于缓存/解除块的命令)

阻止报告:

块报告的间隔由配置确定dfs.blockreport.intervalMsec(在hdfs-site.xml中).默认情况下,此值设置为21600000毫秒.

块报告中包含的一些信息是:

注册:数据节点注册信息

blocks:有关块的信息,包括:块ID,块长度,块生成时间戳,块副本的状态(例如,副本已完成或等待恢复等)

名称节点使用此信息:

处理第一个块报告:如果它是新注册的数据节点的第一次报告,它只添加所有有效的副本.它忽略所有无效块,直到下一个块报告.

要更新有关块的信息:(数据节点 - >块)映射在名称节点中更新.将新块报告与旧报告进行比较,并更新有关成功块,损坏块,无效块等的信息

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有