(转)Hadoop的nameNode

本文详细介绍了HDFS中NameNode的角色和文件管理,包括Fsimage和Edits文件的作用,以及NameNode的启动和运行流程。在运行过程中,NameNode接收写请求并更新内存元数据,当满足特定条件时将Edits文件合并到Fsimage。此外,还阐述了安全模式的逻辑,即在副本不足的情况下,NameNode进入只读模式,确保数据完整性。通过相关命令可以进入或离开安全模式。最后,讨论了NameNode的多地备份策略以提高数据可靠性。

以下大部分内容转自:

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>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值