以下大部分内容转自:
https://blog.youkuaiyun.com/weixin_45324890/article/details/108593297
和https://www.cnblogs.com/cicada-smile/p/13801180.html
和https://blog.youkuaiyun.com/andyguan01_2/article/details/89711714
NameNode有两种文件
1.Fsimage 记录元数据。fsimage中的元数据和内存中的元数据并不是同步的
2.Edits文件 记录写操作
启动流程:
加载edits和Fsimage文件到内存,将edits的文件合并到fsimage文件里去。
运行流程:
1.当NameNode接收到写请求之后,会先将该请求记录到edits_inprogess文件中,如果记录成功,则将该请求同步更新到内存中,修改内存中的元数据,内存修改完成之后会给客户端返回一个ack表示成功(在这一步,内存中的元数据就跟Fsimage文件的元数据内容不一致)
写请求,是DataNode在心跳时上报的
DataNode的写操作触发的,当我们往DataNode写文件时,DataNode会跟NameNode通信,告诉NameNode什么文件的第几个block放在它那里,NameNode这个时候会将这些元数据信息写到edit logs文件中。
2.当edits文件达到条件的时候会将操作更新到fsimage文件中,即修改fsimage文件中的元数据
2.1条件如下
- a. 空间:edits_inprogress文件达到指定大小时触发更新(默认64M)
- b. 时间:离上一次更新达到指定间隔时触发更新(默认1H)
- c. 重启更新:NameNode重启后,自动将edits_inprogress中的操作更新到fsimage
- d. 强制更新:hadoop dfsadmin -rollEdits
2.2 每次更新产生一个新的edits_inprogress文件,旧的edits_inprogress文件改名为edits_xx-xx
安全模式
- 背景:不满足最小副本条件
两个属性决定:
dfs.namenode.replication.min 成功执行写操作所需要创建的最小副本数(默认1)
dfs.namenode.safemode.threshold-pct 满足最小副本数的块的比例(默认0.999)
比如说最小副本数是1 比例是0.5 就是要求系统中所有的数据块,至少要50%的块都要有1个副本
- 逻辑:
1.某个DataNode没在指定时间内上报心跳,认为这个节点已经挂了,会将这个节点的数据在新的dataNode节点上进行备份,保持副本数量
2.假设没新的节点可备份,则副本数不够,会进入安全模式
1和2点是我个人猜测,未证真
- 进入安全模式后
nameNode处于只读模式,客户端无法上传文件
- 相关命令
hdfs dfsadmin -safemode get #获取安全模式状态
响应:Safe mode is OFF
hdfs dfsadmin -safemode enter #进入安全模式
响应:Safe mode is ON
hadoop fs -put test2.txt /wcb #试上传一个文件
响应:put: Cannot create file/wcb/test2.txt._COPYING_. Name node is in safe mode.
hdfs dfsadmin -safemode leave #退出安全模式
响应:Safe mode is OFF
hadoop fs -put test2.txt /wcb #试上传一个文件
上传成功
hadoop fs -cat /wcb/test2.txt #查看上传的文件
响应:2021-06-14 15:24:00 #输出了文件的内容
多地备份 hdfs-site.xml设置多个存放目录,Edits和Fsimage会备份多份存放在这些目录
<property>
<name>dfs.namenode.name.dir</name>
<value>
file:///export/servers/Hadoop-2.6.0-cdh5.14.0/HadoopDatas/namenodeDatas1,
/export/servers/Hadoop-2.6.0-cdh5.14.0/HadoopDatas/namenodeDatas2,
/export/servers/Hadoop-2.6.0-cdh5.14.0/HadoopDatas/namenodeDatas3,
/export/servers/Hadoop-2.6.0-cdh5.14.0/HadoopDatas/namenodeDatas4
</value>
</property>
本文详细介绍了HDFS中NameNode的角色和文件管理,包括Fsimage和Edits文件的作用,以及NameNode的启动和运行流程。在运行过程中,NameNode接收写请求并更新内存元数据,当满足特定条件时将Edits文件合并到Fsimage。此外,还阐述了安全模式的逻辑,即在副本不足的情况下,NameNode进入只读模式,确保数据完整性。通过相关命令可以进入或离开安全模式。最后,讨论了NameNode的多地备份策略以提高数据可靠性。
1703

被折叠的 条评论
为什么被折叠?



