以下大部分内容转自:
https://blog.csdn.net/weixin_45324890/article/details/108593297
和https://www.cnblogs.com/cicada-smile/p/13801180.html
和https://blog.csdn.net/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>