HDFS的EditLog和FsImage作用详细解析,超详细!(含部分非原创图片,大部分原创总结)

 EditsLog和FsImage分别是什么?

Editslog:保存了以HDFS最新版本的FsImage为起点起对hdfs中文件的操作信息

FsImage:某一时刻内存元数据在本地磁盘的映射,用于维护管理文件系统树,即元数据。FsImage中存储的信息就相当于整个hdfs在某一时刻的一个快照。

EditLog和FsImage的保存位置:

①非HA集群

FsImage保存在配置文件中dfs.namenode.name.dir设置的路径下,保存FsImage文件和EditsLog文件

②HA集群

EditsLog文件保存在参数df.journalnode.edits.dir设置的路径下,即edits文件由qjournal集群管理.

关于editLog和FsImage的保存时间:

editLog和FsImage的保存数量默认为2个(每个保存最新的两个),可以通过配置dfs.namenode.num.checkpoints.retained参数来设计默认保存的数量.

如何使用editLog和FsImage恢复HDFS的数据:

只需要在启动HDFS读取最新版本的Fsimage和EditsLog合并就可以恢复HDFS的最新状态。

editLog和FsImage是如何合并的?

HDFS的EditLog和FsImage作用详细解析,超详细!(含部分非原创图片,大部分原创总结)_第1张图片

人话:当集群启动的时候,SNN首先告诉NN,你现在的EditLog别用了,创建一个新的,这个新的就叫做Edits.new,然后它用用HTTP GET获取到NameNode的最新的Edits和Fsimage,拿到它这里将Fsimage和Edits合并为一个新的Fsimage,发给NameNode,那么NameNode收到之后会把这个新的Fsimage替换掉旧的Fsimage,在此期间,接收到的新的操作请求都已经记录在了Edits.new里面,因此过程十分巧妙。

(注意:NameNode和SecondaryNameNode都保存的有FsImage和EditLogs,但是版本不一样。由此我们可以思考,如果NameNode的FsImage的EditLog损坏?那么我们将SNN的Fsi和EditLogs复制到NN的对应的位置,能否恢复出损坏时刻的数据?

答案是不能恢复最新时刻,而是上一个检查点checkpoint的数据。)

什么是SecondaryNameNode?

SecondaryNameNode就是NameNode的一个存档,并且会自动定期保存,这个定期的时间就叫做检查点checkpoint如下所示。

checkpoint机制:是否距离上次合并过了1小时或者事务条数是否达到100万条(可配置)

HDFS的EditLog和FsImage作用详细解析,超详细!(含部分非原创图片,大部分原创总结)_第2张图片

HDFS的EditLog和FsImage作用详细解析,超详细!(含部分非原创图片,大部分原创总结)_第3张图片

EditLog和FsImage的重要性:

fsimage包含Hadoop文件系统中的所有目录和文件idnode的序列化信息,所以如果fsimage丢失或者损坏了,那么即使DataNode上有块的数据,但是我们没有文件到块的映射关系,我们也无法用DataNode上的数据!所以定期及时的备份fsimage和edits文件非常重要!!!!!!!!!!!!!!!!!!!!!

你可能感兴趣的:(Hadoop学习历程,hdfs,hadoop,大数据)