十、HDFS的namenode工作机制


[TOC]txid:
namenode对每个操作事件(增删改操作)都给了一个唯一的id标识,称为txid,一般是从0开始自增,每多一个操作,txid就自增1。fsimage:
是namenode在内存中的元数据在本地磁盘的一个镜像文件,但是通常情况fsimage并没有包含自新的操作事件,所以本质上和内存中元数据 香港云主机是有差距的。这里记录的不是操作日志,其中包含HDFS文件系统的所有目录和文件idnode的序列化信息。一般命名方式是fsimage_txid 的形式,后面的txid表示该fsimage记录的最新的操作事件的txid。edits:
是记录对namenode进行增删改操作的操作日志文件,如果有知道mysql的话,这和mysql 的二进制日志有点相似。总结来说,其实简化成以下结构:(1)VERSION文件的内容(2)seen_txid
这个文件中记录了目前最新的一个txid(3)SNN的目录结构和namenode是一样的,只是缺少了部分最新的edits文件。我们可以看到上面fsimage和edits文件的文件名都跟着很长一串数字,那是什么呢,其实是txid,从两者命名方式上,我们可以看出一些规律来。edits文件:
我们可以看到edits文件都是 edits_00000xxx-000000xxx的方式命名的,其实意思就是表示该edits文件中记录了txid操作事件的范围。而 edit_inprogess_00000xxx 则表示当前所记录到的最新的txid事件,以及该文件是目前正在使用的edits文件。fsimage文件:
以fsimage_000000xxx 的方式命名,表示的是该fsimage 文件记录到的最新的txid事件,请注意,因为fsimage是有条件触发之后,edits文件才会合并到fsimage的,否则不会合并。所以一般情况下,edits文件后面的txid会比fsimage 大的。前面已经说到,fsimage记录的主要是元数据信息,它描述了hdfs 中存储的目录结构以及目录下的文件,还有对应的目录和文件的元信息。我们截取部分信息来看看:由以上这部分fsimage信息可知,它记录当前文件系统的目录结构以及对应的元信息。和edits的差别是,edits记录的是对该文件系统的操作。同样截取部分信息查看:每个RECORD记录了一次操作,比如图中的
OP_ADD代表添加文件操作。一般来说里面还记录了
文件路径(PATH)
修改时间(MTIME)
添加时间(ATIME)
客户端名称(CLIENT_NAME)
客户端地址(CLIENT_MACHINE)
权限(PERMISSION_STATUS)等非常有用的信息在core-site.xml中配置了hadoop.tmp.dir的话,各自的数据目录如下:如果不设置hadoop.tmp.dir 这个值,那么NN,SNN,DN都需要手动设置各自的数据目录,否则数据文件都会生成到 /tmp/hadoop-root/dfs/ 下,各自的设置参数如下:在单独设置namenode的工作目录时,我们可以给dfs.namenode.name.dir 设置多个值,以逗号分隔开,那么hdfs namenode -format格式化的时候,也会格式化出两个namenode目录,并且两个目录在运行过程中内容也保持一致,可以使用这种方式作为给namenode备份数据的补充。如:(1)第一次启动namenode时(即第一次格式化namenode之后),会自动创建fsimage和edits文件。如果不是第一次启动,则namenode会加载最新的fsimage以及从fsimage开始到最新的操作事件(以seen_txid文件记录的txid为准)的所包含的edits文件到内存中,最终在内存中存储的是最新的元信息。并创建一个新的edits文件,用于记录的操作,名字是 edit_inprogress_xxxx。
(2)client 对namenode发起增删改请求
(3)namenode响应请求
(4)namenode记录增删改操作时,会先将操作写入到edits文件中,当成功写入之后,才会修改内存中存储的元数据。这种方式是为了保证最新的操作一定持续化存储在磁盘这种永久性存储中,避免意外导致操作记录丢失。(1)SNN根据设置的检查checkpoint的时间间隔,询问namenode是否需要执行checkpoint。namenode响应SNN结果。
(2)如果结果为是,则SNN请求namenode执行checkpoint操作
(3)namenode开始执行checkpoint操作,首先滚动目前正使用的edits文件,将滚动后的edits文件命名为 edits_txid1-txid2的形式,并创建新的edits文件,名字为 edits_inprogess_txid2+1。滚动edits目的主要是为了防止合并操作影响namenode对外提供服务,滚动之后,操作记录可以正常写入到新的edits文件中。
(4)将最新的fsimage(看文件后面的txid,最大的就是最新的),以及由此到最新的txid的edits文件拷贝到SNN。注意看fsimage文件名的txid以及edits文件名后面的txid,小于fsimage后面的txid的edits文件不需要拷贝。
(5)SNN读取拷贝过来的fsiamge和edits文件到内存中进行合并
(6)合并后生成新的fsimage文件,名字为 fsimage.chkpoint
(7)拷贝fsimage.chkpoint到namenode
(8)namenode收到fsimage.chkpoint之后,重名为 fsimage_txid 的形式,后面txid表示此fsimage文件记录的最新的操作的txid。hdfs-default.xml(1)edis文件的大小超过64M
(2)当前edits文件存在时间超过一定时间,默认3600秒
(3)edit文件中记录的操作次数达到指定的次数,默认1000000次。

相关推荐: 怎么在电脑上查看主板型号

这篇文章主要介绍了怎么在电脑上查看主板型号,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。查看电脑主板 香港云主机型号的方法:1.直接右键点击此电脑,随后打开管理界面。2.在打开的管理界面中依次点…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 07/25 15:41
Next 07/25 15:41

相关推荐