HADOOP::Fsimage和Edits解析

NameNode被格式化之后,将在/opt/module hadoop-3.1.3/data/tmp/dfs/name/curent目录
中产生如下文件
fsimage_ 0000000000000000000
fsimage_ 0000000000000000000.md5
seen_txid
VERSION
(1) Fsimage文件: HDFS文件系统元数据的一个永久性的检查点,其中包含HDFS文件系统的
所有目录和文件inode的序列化信息。
(2) Edits文件:存放HDFS文件系统的所有更新操作的路径,文件系统客户端执行的所有写操
作首先会被记录到Edits文件中。
(3) seen_txid文件 保存的是一个数字,就是最后一个edits_的数字
(4) 每次NameNode 启动的时候都会将Fsimage文件读入内存,加载Edits里面的更新操作,
保证内存中的元数据信息是最新的、同步的,可以看成NameNode启动的时候就将
Fsimage和Edits文件进行了合并。

(1) 查看fsimage文件
语法:
hdfs oiv –p 文件类型 -i 镜像文件 -o 转换后文件输出路径
举例:
[hadoop@hadoop101 current]$ pwd
/opt/module/hadoop-3.1.3/data/dfs/name/current
[hadoop@hadoop101 current]$ hdfs oiv -p XML -i fsimage_0000000000000000025 -o
/opt/module/hadoop-3.1.3/fsimage.xml
[hadoop@hadoop101 current]$ cat /opt/module/hadoop-3.1.3/fsimage.xml
看不懂
将显示的 xml 文件内容拷贝到 Idea 中创建的 xml 文件中,并格式化。部分显示结果如下。
可以看到Fsimage的信息  比如mtime修改时间   replication 副本数等等   还有我创建的目录文件都可以在fsimage中看到
思考:可以看出,Fsimage中没有记录块所对应DataNode,为什么?
在集群启动后,要求DataNode上报数据块信息,并间隔一段时间后再次上报。
集群启动时Namenode不知道Datanode的信息  是Datanode主动上报数据块信息的
(2)查看edits文件
语法:
hdfs oev -p 文件类型 -i编辑日志 -o 转换后文件输出路径
举例:
[hadoop@hadoop101 current]$ hdfs oev -p XML -i edits_0000000000000000012-
0000000000000000013 -o /opt/module/hadoop-3.1.3/edits.xml
[hadoop@hadoop101 current]$ cat /opt/module/hadoop-3.1.3/edits.xml
2.Checkpoint 时间设置
1)通常情况下,SecondaryNameNode每隔一小时执行一次。
[hdfs-default.xml]
<property>
<name>dfs.namenode.checkpoint.period</name>
<value>3600s</value>
</property>
2)一分钟检查一次操作次数,当操作次数达到1百万时,SecondaryNameNode执行一次。
<property>
<name>dfs.namenode.checkpoint.txns</name>
<value>1000000</value>
<description>操作动作次数</description>
</property>
<property>
<name>dfs.namenode.checkpoint.check.period</name>
<value>60s</value>
<description> 1分钟检查一次操作次数</description>
</property>
1.DataNode 工作机制
1.DataNode 工作机制
(1)一个数据块在DataNode 上以文件形式存储在磁盘上,包括两个文件,一个是数据
本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。
(2)DataNode 启动后向NameNode 注册,通过后, 周期性(6 小时) 的向NameNode 上
报所有的块信息。
DN 向NN 汇报当前解读信息的时间间隔,默认6 小时;
<property>
<name>dfs.blockreport.intervalMsec</name>
<value>21600000</value>
<description>Determines block reporting interval in
milliseconds.</description>
</property>
DN 扫描自己节点块信息列表的时间,默认6 小时
<property>
<name>dfs.datanode.directoryscan.interval</name>
<value>21600s</value>
<description>Interval in seconds for Datanode to scan data
directories and reconcile the difference between blocks in memory and on the disk.
Support multiple time unit suffix(case insensitive), as described
in dfs.heartbeat.interval.
</description>
</property>
DN 向NN 汇报当前解读信息的时间间隔,默认6 小时;
(3)心跳是每3 秒一次 心跳返回结果带有NameNode 给该DataNode 的命令 如复制块
数据到另一台机器,或删除某个数据块。如果超 过10 分钟+30秒 没有收到某个DataNode 的
心跳,则认为该节点不可用。
(4)集群运行中可以安全加入和退出一些机器。

NameNode工作源码查看

在做HDFS的时候已经将需要的依赖导入到pom.xml中了

下面就是上课讲的查看源码!!!!当时自己还有点没听懂

1)ctrl + n 全局查找namenode,进入NameNode.java

  • 20
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智能边缘探索记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值