目录
第二章:HDFS
2.1 hdfs主要组件及其功能
2.1.1 Hdfs的组成
hdfs包括namenode,secondarynamenode, datanode.其中,名称节点(NameNode)负责管理分布式文件系统的命名空间,保存了两个核心的数据结构,FsImage和EditLog.
FsImage: 用于维护文件系统树以及文件树中的所有的文件和文件夹的元数据.
EditLog:记录了所有针对文件的创建,删除,重命名等操作。
名称节点在启动时,会将FsImage的内容加载到内存中,然后执行EditLog文件中的各项操作,使得内存中的元数据保持最新。
2.1.2 SecondaryNameNode
为了有效解决EditLog逐渐变大带来的问题,HDFS在设计中采用了第二名称节点。第二名称节点具有两个方面的功能:
首先,它可以完成EditLog和FsImage的合并操作,减少EditLog文件大小,缩短名称节点重启时间;其次,他可以作为名称节点的“检查点”,保存名称节点中的元数据信息。
1)EditLog与FsImage的合并操作。
每隔一段时间,第二名称节点会和名称节点进行通信,请求其停止使用EditLog文件,暂时将新到达的写操作添加到新的EditLog.new文件中。然后把第二名称节点中的FsImage文件和EditLog拉回本地,再加载到内存中;对二者进行合并操作,即在内存中逐条执行EditLog中的操作,使FsImage保持最新。合并结束后,第二名称节点会把合并后得到的最新FsImage文件发送到名称节点。名称节点收到后,会用最新的FsImage文件去替换旧的FsImage文件,同时用EditLog.new文件去替换EditLog文件,从而减小了EditLog文件的大小。
2)作为名称节点的“检查点”。从上面的合并过程可以看出,第二名称节点会定期和名称节点通信,从名称节点获取FsImage文件和EditLog,执行合并后得到新的 FsImage文件。从这个角度来讲 ,第二名称节点相当于为名称节点设置一个检查点,周期性低备份名称节点中的元数据信息,当名称节点发送故障的时候,就可以用第二名称节点中记录的元数据信息进行系统恢复。但是,在第二名称节点上合并操作得到的新的FsImage文件是合并操作发生时(即t1时刻)HDFS记录的元数据信息,并没有包含t1,t2时刻期间发生的更新操作。如果名称节点在t1时刻和t2时刻期间发生故障,系统就会丢失部分元数据信息。 注意:在HDFS的设计中,也并不支持把系统切换到第二名称节点,因此从这个角度来说,第二名称节点只是起到了名称节点检查点的作用,并不能起到热备份的作用,即使有了第二名称节点,当名称节点发送故障的时候,系统还是可能会丢失部分元数据信息。
2.2 hdfs数据存储原理
2.2.1 冗余数据保存
HDFS作为一个分布式文件系统,为了保证系统的容错性和可用性,HDFS采用了多副本方式对数据进行冗余存储,通常一个数据块的多个副本会被分布到不同的数据节点上。这种多副本保存方式优点:
-
加快数据传输速度