我知道在主节点中我们有名称节点,它在两个文件中维护元数据。一个是 FSImage,另一个是编辑日志。
所以这个FSImage是在hadoop系统启动时初始加载的,这个FSImage包含了集群的目录结构和存储的数据。然后,对于每个发生的事务,编辑日志文件都会更新。
我的问题如下:
- 这些只是包含所有信息(FSImage 和 EditLogs)的文件还是还有更多?
- 这是否意味着 FSImage 文件只会写入一次?
- 如果是,那么为什么它总是被复制到辅助名称节点?这不是增加了需要完成的任务吗?
- 假设我在hdfs中添加或删除了一个新文件;那么这个FSImage不就更新了吗?
最佳答案
要理解这一点,我们必须在 Hadoop 运行时详细、一步一步地过一遍
加载 FSImage 后的 Namenode 拥有数据在内存中存储位置的完整快照。
交易正在进行,信息存储在编辑日志中。
检查点节点/辅助名称节点会定期(默认每小时)检索日志,并将其与最新的 fsimage 合并,并将数据保留为检查点。 此时,nn 的内存中已经有了镜像,编辑日志被清空,最新的检查点作为镜像存储在 snn/cn 上。
回答你的问题。
是的,只有两个文件
SNN/CN 上的 fsimage 将定期更新。当导入检查点时,NN 上的 fsimage 将更新。至少重新启动后应该会发生这种情况。
将 editlog 合并到 fsimage 是一项成本高昂的操作。它需要名称节点进入安全模式才能合并数据。在这样的环境下这是不可能的
删除和写入一样都是日志,因此它会存储在编辑日志中
关于Hadoop - HDFS Namenode 元数据 - FSImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26121617/