HDFS的元数据辅助管理

当Hadoop的集群当中,NameNode的所有元数据信息保存在FsImage与Eidt文件当中,这两个文件就记录了所有的数据的元数据信息,

元数据信息的保存目录配置在了hdfs-site.xml当中

 

<property>
    <name>dfs.namenode.name.dir</name>
    <value>
        file:///export/servers/hadoop2.7.5/hadoopDatas/namenodeDatas,
        file:///export/servers/hadoop-
        2.7.5/hadoopDatas/namenodeDatas2
    </value>
</property>
<property>
    <name>dfs.namenode.edits.dir</name>
    <value>file:///export/servers/hadoop-
    2.7.5/hadoopDatas/nn/edits
    </value
</property>>

FsImage和Edits详解:

edits :

  1. edits  存放了客户端最近一段时间的操作日志
  2. 客户端对HDFS进行写文件时会首先被记录在edits文件中
  3. edits修改时元数据也会更新

fsimage:

  1.   NameNode中关于元数据的镜像,一般称为检查点,fsimage存放了一份比较完整的元数据信息
  2. 因为fsimage是NameNode的完整的镜像,如果每次都加载到内存生成树状拓扑结构,这是非常耗内存和CPU,所以一般开始时对NameNode的操作都放在edits中
  3. fsimage 内容包含了NameNode管理写的所有DataNode文件及文件block及block所在的DataNode的元数据信息
  4. 随着edits内容的增大,就需要在一定时间点和fsimage合并

fsimage中的文件信息查看:

使用命令: hdfs  oiv

cd /export/servers/hadoop2.7.5/hadoopDatas/namenodeDatas
hdfs oiv -i fsimage_0000000000000000864 -p XML -o hello.xml
 

edits中文件信息查看:

使用命令: hdfs  oev

cd /export/servers/hadoop2.7.5/hadoopDatas/namenodeDatas
hdfs oev -i edits_0000000000000000865-0000000000000000866 -p XML -o  myedit.xml
 

SecondaryNameNode如何辅助管理fsimage与edits文件?

  1. SecondaryNameNode 定期合并fsimage和edits,把edits控制在一个范围内
  2. 配置SecondaryNameNode  

                      SecondaryNameNode 在conf/master中指定

                      在master指定的机器上,修改hdfs-site.xml

 

<property>
    <name>dfs.http.address</name>
    <value>host:50070</value>
</property>

       修改core-site.xml,这一步不做配置保持默认也可以

<!-- 多久记录一次 HDFS 镜像, 默认 1小时 -->
<property>
    <name>fs.checkpoint.period</name>
    <value>3600</value>
</property>
<!-- 一次记录多大, 默认 64M -->
<property>
    <name>fs.checkpoint.size</name>
    <value>67108864</value>
</property>

 

 

 

1. SecondaryNameNode 通知 NameNode 切换 editlog
2. SecondaryNameNode 从 NameNode 中获得 fsimage 和 editlog(通过http方式)
3. SecondaryNameNode 将 fsimage 载入内存, 然后开始合并 editlog, 合并之后成为新的
fsimage
4. SecondaryNameNode 将新的 fsimage 发回给 NameNode
5. NameNode 用新的 fsimage 替换旧的 fsimage


特点:


完成合并的是 SecondaryNameNode, 会请求 NameNode 停止使用 edits, 暂时将新写操作放
入一个新的文件中 edits.new
SecondaryNameNode 从 NameNode 中通过 Http GET 获得 edits, 因为要和 fsimage 合并, 所
以也是通过 Http Get 的方式把 fsimage 加载到内存, 然后逐一执行具体对文件系统的操作,
与 fsimage 合并, 生成新的 fsimage, 然后通过 Http POST 的方式把 fsimage 发送给
NameNode. NameNode 从 SecondaryNameNode 获得了 fsimage 后会把原有的 fsimage 替
换为新的 fsimage, 把 edits.new 变成 edits. 同时会更新 fstime
 

1.Hadoop 进入安全模式时需要管理员使用 dfsadmin 的 save namespace 来创建新的检查点
2.SecondaryNameNode 在合并 edits 和 fsimage 时需要消耗的内存和 NameNode 差不多, 所
以一般把 NameNode 和 SecondaryNameNode 放在不同的机器上
 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值