【史上最全】Hadoop 核心 - HDFS 分布式文件系统详解(上万字建议收藏)(四)

简介: Hadoop 核心 - HDFS 分布式文件系统详解

9.2 FSImage与edits详解


所有的元数据信息都保存在了FsImage与Eidts文件当中,这两个文件就记录了所有的数据的元数据信息,元数据信息的保存目录配置在了 hdfs-site.xml 当中


<!--fsimage文件存储的路径-->
    <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:///opt/hadoop-2.6.0-cdh5.14.0/hadoopDatas/namenodeDatas</value>
        </property>
        <!-- edits文件存储的路径 -->
    <property>
                <name>dfs.namenode.edits.dir</name>
                <value>file:///opt/hadoop-2.6.0-cdh5.14.0/hadoopDatas/dfs/nn/edits</value>
      </property>


客户端对hdfs进行写文件时会首先被记录在edits文件中。


edits修改时元数据也会更新。


每次hdfs更新时edits先更新后客户端才会看到最新信息。


fsimage:是namenode中关于元数据的镜像,一般称为检查点。


一般开始时对namenode的操作都放在edits中,为什么不放在fsimage中呢?


因为fsimage是namenode的完整的镜像,内容很大,如果每次都加载到内存的话生成树状拓扑结构,这是非常耗内存和CPU。


fsimage内容包含了namenode管理下的所有datanode中文件及文件block及block所在的datanode的元数据信息。随着edits内容增大,就需要在一定时间点和fsimage合并。


9.3 FSimage文件当中的文件信息查看


  • 使用命令 hdfs oiv


cd  /opt/hadoop-2.6.0-cdh5.14.0/hadoopDatas/namenodeDatas/current
hdfs oiv -i fsimage_0000000000000000112 -p XML -o hello.xml


9.4 edits当中的文件信息查看


  • 查看命令 hdfs oev


cd  /opt/hadoop-2.6.0-cdh5.14.0/hadoopDatas/dfs/nn/edits
hdfs oev -i  edits_0000000000000000112-0000000000000000113 -o myedit.xml -p XML


9.5 secondarynameNode如何辅助管理FSImage与Edits文件


  1. secnonaryNN通知NameNode切换editlog。


  1. secondaryNN从NameNode中获得FSImage和editlog(通过http方式)。


  1. secondaryNN将FSImage载入内存,然后开始合并editlog,合并之后成为新的fsimage。


  1. secondaryNN将新的fsimage发回给NameNode。


  1. NameNode用新的fsimage替换旧的fsimage。


image.png


完成合并的是 secondarynamenode,会请求namenode停止使用edits,暂时将新写操作放入一个新的文件中(edits.new)。


secondarynamenode从namenode中通过http get获得edits,因为要和fsimage合并,所以也是通过http get 的方式把fsimage加载到内存,然后逐一执行具体对文件系统的操作,与fsimage合并,生成新的fsimage,然后把fsimage发送给namenode,通过http post的方式。


namenode从secondarynamenode获得了fsimage后会把原有的fsimage替换为新的fsimage,把edits.new变成edits。同时会更新fsimage。


hadoop进入安全模式时需要管理员使用dfsadmin的save namespace来创建新的检查点。


secondarynamenode在合并edits和fsimage时需要消耗的内存和namenode差不多,所以一般把namenode和secondarynamenode放在不同的机器上。


fsimage与edits的合并时机取决于两个参数,第一个参数是默认1小时fsimage与edits合并一次。


  • 第一个参数:时间达到一个小时fsimage与edits就会进行合并


dfs.namenode.checkpoint.period     3600


  • 第二个参数:hdfs操作达到1000000次也会进行合并


dfs.namenode.checkpoint.txns       1000000


  • 第三个参数:每隔多长时间检查一次hdfs的操作次数


dfs.namenode.checkpoint.check.period   60


9.6 namenode元数据信息多目录配置


为了保证元数据的安全性,我们一般都是先确定好我们的磁盘挂载目录,将元数据的磁盘做RAID1


namenode的本地目录可以配置成多个,且每个目录存放内容相同,增加了可靠性。


  • 具体配置方案:


hdfs-site.xml


<property>
         <name>dfs.namenode.name.dir</name>
         <value>file:///export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/namenodeDatas</value>
    </property>


9.7 namenode故障恢复


在我们的secondaryNamenode对namenode当中的fsimage和edits进行合并的时候,每次都会先将namenode的fsimage与edits文件拷贝一份过来,所以fsimage与edits文件在secondarNamendoe当中也会保存有一份,如果namenode的fsimage与edits文件损坏,那么我们可以将secondaryNamenode当中的fsimage与edits拷贝过去给namenode继续使用,只不过有可能会丢失一部分数据。这里涉及到几个配置选项


  • namenode保存fsimage的配置路径


<!--  namenode元数据存储路径,实际工作当中一般使用SSD固态硬盘,并使用多个固态硬盘隔开,冗余元数据 -->
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:///export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/namenodeDatas</value>
  </property>


  • namenode保存edits文件的配置路径


<property>
    <name>dfs.namenode.edits.dir</name>
    <value>file:///export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/dfs/nn/edits</value>
</property>


  • secondaryNamenode保存fsimage文件的配置路径


<property>
    <name>dfs.namenode.checkpoint.dir</name>
    <value>file:///export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/dfs/snn/name</value>
</property>


  • secondaryNamenode保存edits文件的配置路径


<property>
    <name>dfs.namenode.checkpoint.edits.dir</name>
    <value>file:///export/servers/hadoop-2.6.0-cdh5.14.0/hadoopDatas/dfs/nn/snn/edits</value>
</property>


接下来我们来模拟namenode的故障恢复功能


  1. 杀死namenode进程: 使用jps查看namenode的进程号 , kill -9 直接杀死。


  1. 删除namenode的fsimage文件和edits文件。


根据上述配置, 找到namenode放置fsimage和edits路径. 直接全部rm -rf 删除。


  1. 拷贝secondaryNamenode的fsimage与edits文件到namenode的fsimage与edits文件夹下面去。


根据上述配置, 找到secondaryNamenode的fsimage和edits路径, 将内容 使用cp -r 全部复制到namenode对应的目录下即可。


  1. 重新启动namenode, 观察数据是否存在。


10 datanode工作机制以及数据存储


  • datanode工作机制


  1. 一个数据块在datanode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。


  1. DataNode启动后向namenode注册,通过后,周期性(1小时)的向namenode上报所有的块信息。(dfs.blockreport.intervalMsec)。


  1. 心跳是每3秒一次,心跳返回结果带有namenode给该datanode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个datanode的心跳,则认为该节点不可用。


  1. 集群运行中可以安全加入和退出一些机器。


  • 数据完整性


  1. 当DataNode读取block的时候,它会计算checksum。


  1. 如果计算后的checksum,与block创建时值不一样,说明block已经损坏。


  1. client读取其他DataNode上的block。


  1. datanode在其文件创建后周期验证checksum。


  • 掉线时限参数设置


datanode进程死亡或者网络故障造成datanode无法与namenode通信,namenode不会立即把该节点判定为死亡,要经过一段时间,这段时间暂称作超时时长。HDFS默认的超时时长为10分钟+30秒。如果定义超时时间为timeout,则超时时长的计算公式为:


timeout = 2 * dfs.namenode.heartbeat.recheck-interval + 10 * dfs.heartbeat.interval。


而默认的dfs.namenode.heartbeat.recheck-interval 大小为5分钟,dfs.heartbeat.interval默认为3秒。


需要注意的是hdfs-site.xml 配置文件中的heartbeat.recheck.interval的单位为毫秒,dfs.heartbeat.interval的单位为秒。


<property>
    <name>dfs.namenode.heartbeat.recheck-interval</name>
    <value>300000</value>
</property>
<property>
    <name>dfs.heartbeat.interval </name>
    <value>3</value>
</property>
相关文章
|
3月前
|
分布式计算 Ubuntu Hadoop
百度搜索:蓝易云【Ubuntu搭建全分布式Hadoop】
请注意,以上只是概述,并不包含详细的步骤和指令。搭建全分布式Hadoop是一个复杂的过程,需要对Hadoop的架构和配置有深入的理解,并熟悉Linux系统管理。建议在搭建全分布式Hadoop之前,先学习相关知识并查阅官方文档和教程,以确保正确搭建和配置Hadoop集群。
27 0
|
16天前
|
分布式计算 Hadoop 大数据
大数据技术与Python:结合Spark和Hadoop进行分布式计算
【4月更文挑战第12天】本文介绍了大数据技术及其4V特性,阐述了Hadoop和Spark在大数据处理中的作用。Hadoop提供分布式文件系统和MapReduce,Spark则为内存计算提供快速处理能力。通过Python结合Spark和Hadoop,可在分布式环境中进行数据处理和分析。文章详细讲解了如何配置Python环境、安装Spark和Hadoop,以及使用Python编写和提交代码到集群进行计算。掌握这些技能有助于应对大数据挑战。
|
4天前
|
存储 分布式计算 Hadoop
基于Hadoop分布式数据库HBase1.0部署及使用
基于Hadoop分布式数据库HBase1.0部署及使用
|
14天前
|
分布式计算 Hadoop 测试技术
Hadoop【基础知识 05】【HDFS的JavaAPI】(集成及测试)
【4月更文挑战第5天】Hadoop【基础知识 05】【HDFS的JavaAPI】(集成及测试)
41 8
|
14天前
|
分布式计算 资源调度 Hadoop
Hadoop【基础知识 03+04】【Hadoop集群资源管理器yarn】(图片来源于网络)(hadoop fs + hadoop dfs + hdfs dfs 使用举例)
【4月更文挑战第5天】Hadoop【基础知识 03】【Hadoop集群资源管理器yarn】(图片来源于网络)Hadoop【基础知识 04】【HDFS常用shell命令】(hadoop fs + hadoop dfs + hdfs dfs 使用举例)
42 9
|
15天前
|
分布式计算 Hadoop Shell
Hadoop【基础知识 04】【HDFS常用shell命令】(hadoop fs + hadoop dfs + hdfs dfs 使用举例)
【4月更文挑战第4天】Hadoop【基础知识 04】【HDFS常用shell命令】(hadoop fs + hadoop dfs + hdfs dfs 使用举例)
28 5
|
18天前
|
存储 分布式计算 Hadoop
【Hadoop】HDFS 读写流程
【4月更文挑战第9天】【Hadoop】HDFS 读写流程
|
1月前
|
分布式计算 资源调度 Hadoop
Hadoop分布式
基于Java的分布式计算平台,旨在处理海量数据。【2月更文挑战第19天】
25 2
|
1月前
|
存储 分布式计算 Hadoop
分布式文件系统(HDFS)
分布式文件系统(HDFS)【2月更文挑战第15天】
38 1
|
3月前
|
存储 分布式计算 Hadoop
Hadoop的Secondary NameNode在HDFS中的作用是什么?
Hadoop的Secondary NameNode在HDFS中的作用是什么?
38 0

热门文章

最新文章