NameNode、SecondryNameNode和DataNode工作机制
这里先补充一下什么是元数据
1、第一类是文件和目录自身的属性信息,例如文件名、目录名、父目录信息、文件大小、创建时间、修改时间等。
2、第二类记录文件内容存储相关信息,例如文件块情况、副本个数、每个副本所在的Data Node 信息等。
3、第三类用来记录HDFS中所有Data Node信息,用于Data Node管理。
首先,我们要思考的是namenode里面的元数据存放在哪里?答案是毋庸置疑的,肯定在是内存中;如果元数据存放在磁盘中,当经常需要进行随机访问,还有响应客户请求,效率过低。但是如果只存在内存中,一旦断电,元数据丢失,整个集群就无法工作了。因此引入了Fsimage(镜像文件),也就是在磁盘中备份元数据的镜像文件。
但是这个时候又会出现一个问题,如果一直在更新FsImage,就会导致效率低;如果不更新,一旦namenode断电,内存中的元数据和fsimage中的不一致,导致一致性问题。因此,引入Edits(编辑日志)。
Edits文件只进行追加操作,所以效率很高。每当元数据有更新或者添加的时候,修改内存中的元数据并追加到Edits中(查询操作不写入)。这样,一旦NameNode节点断电,可以通过FsImage和Edits的合并,合成元数据。
因此,需要定期对FsImage和Edits进行合并,这个操作就是由SecondaryNameNode来完成(所谓的合并,就是将Edits和Fsimage加载到SecondaryNameNode内存中,不是NameNode,照着Edits中的操作一步步执行,最终形成新的Fsimage)。
上述图片为NameNode(下面简称NN)和SecondaryNameNode(下面简称2NN)工作机制。
NN的工作流程(对应上图的蓝色线):
1、每次NN一上电,就会加载磁盘中的edits和fsimage到内存中,保证每次的元数据都是最新的
2、当客户端发送对元数据的增、删、改操作(注意没有查)
3、NN就会记录相关操作,并更新edits
4、Edits更新之后,才对内存中的元数据进行相应的操作
注意:3、4步的顺序不能反。如果先更新内存中的数据,还没来得及对edits进行更新就断电,会造成数据丢失;先往edits中记录,如果此时NameNode挂掉,重启后就会从Edits中读取元数据的信息。
2NN的工作流程(对应上图的橘黄色线):
1、请求是否需要CheckPoint,即合并edits和fsimage
CheckPoint触发条件:
1)定时时间到(默认1小时)
2)edits数据满了(默认一百万条)
2、执行CheckPoint
3、滚动正在写的edits,即edits_inprogress_001滚动成edits_001,如果客户端现在有请求,那 么会更新到edits_inprogress_002中,这样就避免了冲突。
4、把fsimage和edits_001拷贝到2nn中
5、将fsimage和edits_001加载到内存并合并
备注:这个时候可能不止有一个edits,2nn会依次把edits和fsimage合并
6、生成新的fsimage,假定名字为fsimage.checkpoint
7、将fsimage.checkpoint拷贝到nn中
8、将fsimage.checkpoint重命名为fsimage;这个时候,fsimage和正在写的edits就组成了最新的元数据
附录: CheckPoint触发条件的设置
以下两个设置都是在hdfs-site.xml文件中
(1)通常情况下,SecondaryNameNode每隔一小时执行一次。
<property> <name>dfs.namenode.checkpoint.period</name> <value>3600</value> </property>
(2)一分钟检查一次操作次数,当操作次数达到1百万时,SecondaryNameNode执行一次CheckPoint。
<property> <name>dfs.namenode.checkpoint.txns</name> <value>1000000</value> <description>操作动作次数</description> </property>
<property> <name>dfs.namenode.checkpoint.check.period</name> <value>60</value> <description> 1分钟检查一次操作次数</description> </property >
Datanode 的工作机制
1、数据块在DataNode上以文件的形式存储在磁盘上,包括两个文件。一个文件是数据,另一个是元数据包含数据块的长度、时间戳、校验和 2、DataNode启动后向NameNode注册,通过后,周期性(1小时)的向NameNode上报所有的块信息 3、心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。默认如果超过10分钟30秒没有收到某个DataNode的心跳,则认为该节点不可用,图中10分钟超时写错了
补充:
将超时时间定义为
TimeOut,根据公式可以算出超时时间为10分钟30秒
两个参数的设置在hdfs-site.xml中,
dfs.namenode.heartbeat.recheck-interval单位是毫秒
dfs.heartbeat.interval单位是秒
<property> <name>dfs.namenode.heartbeat.recheck-interval</name> <value>300000</value> </property> <property> <name>dfs.heartbeat.interval</name> <value>3</value> </property>
- Hadoop的namenode的管理机制,工作机制和datanode的工作原理
- 手绘HDFS中NameNode和DataNode以及SecondaryNameNode工作机制(原理)
- Secondary Namenode的Check point机制以及Namenode、Datanode工作机制说明
- NameNode和DataNode工作机制
- NameNode工作机制和DataNode副本工作机制
- 大数据之路-Hadoop-5-HDFS原理解析及NameNode、DataNode工作机制
- HDFS的写(读)数据流程、namenode和datanode工作机制总结
- HDFS(十):DataNode工作机制
- Hadoop学习(三)— hdfs : NameNode与DataNode的实现机制
- Hadoop中DataNode与NameNode之间的心跳机制
- DataNode工作机制
- hadoop DataNode 工作机制
- NameNode & DataNode工作机制
- 什么是NameNode和DataNode?他们是如何协同工作的?
- DataNode工作机制
- NameNode机制和DataNode机制
- NameNode&Secondary NameNode工作机制
- DataNode与NameNode交互机制相关代码分析 推荐
- hadoop2.0的DataNode与NameNode交互机制相关代码分析
- DATANODE的工作机制