1. Fsimage中没有记录块所对应DataNode,为什么?
答。在集群启动后,要求DataNode上报数据块信息,并间隔一段时间后再次上报。
在fsimage中,并没有记录每一个block对应到哪几个datanodes的对应表信息,而只是存储了所有的关于namespace的相关信息。而真正每个block对应到datanodes列表的信息在hadoop中并没有进行持久化存储,而是在所有datanode启动时,每个datanode对本地磁盘进行扫描,将本datanode上保存的block信息汇报给namenode,namenode在接收到每个datanode的块信息汇报后,将接收到的块信息,以及其所在的datanode信息等保存在内存中。(HDFS就是通过这种块信息汇报的方式来完成 block -> datanodes list的对应表构建。Datanode向namenode汇报块信息的过程叫做blockReport,而namenode将block -> datanodes list的对应表信息保存在一个叫BlocksMap的数据结构中。
原文链接:https://blog.csdn.net/yuyang4600/article/details/106631610/
2. NameNode如何确定下次开机启动的时候合并哪些Edits?
答: NameNode启动的时候合并的是上次停机前正在写入的Edits,即edits_inprogress_xxx
根据seen_txid
里面记录最新的Fsimage(镜像文件)
的值去合并Edits(编辑日志)