当运行时修改写入名称节点中的编辑日志文件时,编辑日志文件是在 RAM 还是本地磁盘上更新

Posted

技术标签:

【中文标题】当运行时修改写入名称节点中的编辑日志文件时,编辑日志文件是在 RAM 还是本地磁盘上更新【英文标题】:When runtime modifications are written to Edits log file in Name Node, is the Edits Log file getting updated on RAM or Local Disk 【发布时间】:2016-01-27 20:14:20 【问题描述】:

【问题讨论】:

【参考方案1】:

答案是两者兼而有之。首先在磁盘上,然后在 RAM 上。

首先,编辑日志是一个逻辑实体,而在实际情况下,它可以是分布在多个文件中的多个文件(称为段),其命名约定类似于“edits_xxxxxxxxxxx”,每个文件代表一个特定的操作(称为事务)在 HDFS 中完成,例如追加文件、删除文件等,

首先更新编辑文件/段(在磁盘上),然后更新 NN 的内存中(在 RAM 中)元数据。此后,这些内存中的数据将提供给有需要的客户。

礼貌:Hadoop - 权威指南。

【讨论】:

谢谢马可。那么这些 Edits 日志文件从磁盘更新到 RAM 的“时间间隔”是多少? 在这种情况下,术语“时间间隔”的使用似乎完全超出了范围,因为这必须是同步操作/活动。我们无法预测 hadoop 客户端的下一个请求何时是该特定文件(其事务刚刚记录并且元数据在内存中更新)。诸如一系列文件写入后立即读取文件(对于刚刚写入的相同文件)这样的场景非常常见。希望这能带来一些启发。 非常感谢马可。所以我相信 Edits 日志文件是从磁盘流式更新到 RAM 的。我说的对吗 是的,磁盘到 RAM 应该通过其中一种 (Java) 流机制。 感谢 Marco,非常感谢您的帮助。

以上是关于当运行时修改写入名称节点中的编辑日志文件时,编辑日志文件是在 RAM 还是本地磁盘上更新的主要内容,如果未能解决你的问题,请参考以下文章

C++ YAML:如何编辑/写入 .yaml 文件中的节点

阅读有关名称节点和检查点节点的信息。无法清楚地理解 FSImage 文件和编辑日志文件的内容是啥

在 hadoop namenode 中读取编辑日志时出错

如何在运行时编辑 Maven POM?

是否可以从-L标志中命名'screen'日志文件?

C# 运行时编辑 节点重命名