「已注销」 2023-08-24 11:27 采纳率: 0%
浏览 7

关于HDFS中的NameNode和Secondary NameNode一个细节问题

关于HDFS中的NameNode和Secondary NameNode有个问题:
假如当前计算机需要4条edit记录去描述一个完整的文件变动行为,这意味着edit.inprogress需要跨4个单位即edit0000012-edit0000015才是一条完整的edit,如果edit.inprogress当前正在已追加两条,检查点机制开启(达到特定时间),
NameNode会新创建一个edit.inprogress存放新的edit,那么在之前inprogress中已书写完毕的两条数据会和还未书写的两条数据一并被拷贝到新的inprogress中吗?还是与fsimage一起被拷贝到SNN中合并呢?亦或者是client对文件的更改本身是一个原子操作,系统会判定当前对文件的更改操作有没有结束再决定要不要开启检查点操作?

  • 写回答

1条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2023-08-25 16:40
    关注

    引用 皆我百晓生 小程序回复内容作答:

    当NameNode开启检查点机制时,它会将当前正在被编辑的edit.log文件(即edit.inprogress)以及当前的fsimage文件一起进行备份。这样做的目的是为了确保在发生故障时,可以使用这些备份文件来进行恢复。

    在你描述的场景中,假设edit.inprogress文件已经写入了两条记录,当NameNode触发检查点机制时,它会创建一个新的edit.inprogress文件来存放新的edit记录。已经写入的两条数据不会被复制到新的edit.inprogress文件中,而是会与当前的fsimage文件一起备份到Secondary NameNode(SNN)中。

    因此,NameNode会将新的edit记录和已经写入的两条记录分别存放在两个不同的edit.inprogress文件中,并将它们与当前的fsimage文件一起传输给SNN进行合并。这样做的目的是确保数据的一致性和完整性,并保留对故障进行恢复的能力。

    值得注意的是,这里的检查点操作并不是由客户端的文件更改触发的,而是由NameNode自主地定期触发或在达到特定条件(例如特定时间间隔)时触发。因此,客户端对文件的更改并不会直接影响检查点操作的进行。检查点操作的目的是为了确保元数据的一致性,并提供灾难恢复的能力。

    评论

报告相同问题?

问题事件

  • 创建了问题 8月24日