HDFS原理综述篇

概述

HDFS即Hadoop分布式文件系统,主要用于支持海量数据的分布式存储管理,适合一次写,多次读取数据的应用场景。在HDFS文件系统中有几个重要的守护进程协调的运行来提供服务:

  • 名称节点进程
  • 辅助名称节点进程
  • 数据节点进程

HDFS也是主从架构的。运行名称节点进程的服务器我们称之为主节点,运行数据节点进程的服务器称之为从节点。HDFS向外提供一个统一的文件系统命名空间,用户就像使用一个文件系统一样来存取集群节点上的数据。

存储方式及策略

存储方式

HDFS中文件的存储方式为块存储,即在HDFS文件系统中,每个文件被分割为多个数据块进行存储,一般典型的数据块的大小为64MB,也可以将其配置为32MB或者128MB。一个大文件会被分割为多个数据块进行存储,且如果文件的大小小于一个块的大小,是不会占据整个块空间的。

存储策略

文件按照数据块形式存储在数据节点上,为了防止节点故障,这些数据是有备份的,默认的备份数量为3.具体的备份策略如下图所示:
这里写图片描述

  1. 第一个block是放置在client所在的节点中,如果client不在集群范围内,那么第一个block存储的节点是随机选取的,一般会选择性的选取那些资源占用较少的node节点
  2. 第二个block会放置在与第一个节点不同的机架中,节点node是随机选取的
  3. 第三个block与第二个block在同一个机架但是不同的节点node上,节点node随机选取

这三个数据块的放置是有一定讲究的。

  • 为什么不将这三个数据块放置在同一个节点上或者同一个机架的不同节点上呢?显而易见这样做的话数据的可靠性不高,因为如果节点损坏或者机架故障的话,那么这部分数据就会丢失。
  • 为什么不讲这三个数据块放置在三个不同的机架上呢?这样做的话数据抵御机架故障的能力更强岂不是更好。其实机架故障的概率远远低于节点故障的概率,而把数据备份到不同的机架上会导致Hadoop系统写文件的性能大幅度下降。
  • 折中方案就是就是上述实际采用的备份策略,既保证数据存储备份的可靠性,也在一定程度上保证了Hadoop系统写性能的提升。

名称节点与辅助名称节点

名称节点

名称节点主要功能:

  • 管理文件系统的命名空间,维护着所有文件的元数据信息,这些信息以两个文件形式永久的 保存在本地磁盘上:命名空间镜像和编辑日志文件

  • namenode同时也记录着每个文件中各个数据块所在节点的信息,但并不永久保存这些信息,这些信息会在系统启动时由数据节点重新建立

  • 负责与客户端交互,管理所有的文件操作,包括文件/目录的打开,关闭,移动,重命名等

名称节点存储的元数据包括以下几个方面:

  • 文件/目录名称及相对于其父目录的位置
  • 文件和目录的所有权及权限
  • 各个数据块的文件名。所有的数据块以文件的形式存放在数据节点的本地文件系统的目录中

名称节点维护的元数据存储在名称节点的本地磁盘上,为了能够快速访问,一般把元数据加载到内存,很大程度上提高了Hadoop系统的操作性能,同时也是Hadoop系统的一个瓶颈(特别对于小文件存储)

数据节点 负责存储实际的文件数据

辅助名称节点

下面介绍一下文件系统镜像与编辑日志

名称节点上存储元数据的文件为fsimage,fsimage文件是文件系统元数据的一个永久性检查点,然而并非每一个写操作都会更新该文件,因为fsimage文件是一个大型文件(可能为几个GB),如果频繁的执行写操作的话会使得系统运行的极为缓慢,影响性能。而Hadoop系统运行期间任何涉及对元数据修改的操作都保存在内存中,并且被持久化到一个名为edits(编辑日志)的文件中。这样会造成一个问题,edits文件将会无限增长。当namenode需要重启的时候,由于需要恢复edits文件中的各项操作,会使得重启非常缓慢,为了解决这个问题从而引入了辅助名称节点。
辅助名称节点主要为主节点内存中的文件系统元数据创建检查点,具体步骤如下所示:

  1. 辅助名称节点请求名称节点namenode停止使用edits文件,暂时将新的写操作记录到一个新的文件,这个新的文件名称叫做edits.new
  2. 辅助namenode从namenode获取fsimage和edits文件
  3. 辅助namenode将fsimage文件载入内存,逐一执行edits文件中的操作,创建新的fsimage文件
  4. 辅助namenode将新的fsimage文件发送回namenode
  5. namenode接收新的fsimage,并使用新的fsimage文件替换旧的fsimage文件,用步骤1产生的edits.new文件中的内容替换原edits文件中的内容
  6. 更新fstime文件来记录检查点执行的时间

执行完成后,namenode就拥有最新的fsimage文件和一个较小的edits文件,可以避免之前说的问题。

上述步骤执行流程图如下所示:

这里写图片描述

namenode容错机制

从上述内容可以看出,在Hadoop1.x系统中很容易发生单点故障,因为如果fsimage文件和edits文件数据损坏了,存放在HDFS系统上的所有数据都会丢失,针对这一个问题,采用了两种机制来对namenode实现容错:

  1. 第一种方法就是备份那些组成文件系统元数据持久状态的文件。一般在将持久状态写入本地磁盘的同时,再写入到一个远程挂载的网络文件系统(NFS)中。
  2. 第二个方法是运行一个辅助namenode,过程如上所述,但是其状态总是滞后于namenode,难免会丢失数据,一般结合NFS上的元数据进行恢复,作为新的namenode

Hadoop2.x实现HDFS的高可用性:

  1. 引入高可用名称节点的概念,使用两个相同的名称节点,一个处在活动模式,一个处在待机模式,处在活动模式的名称节点为系统提供服务,处在待机模式的名称节点需要实时同步活动名称节点的数据,这样当活动节点宕机时,可以快速的进行故障切换。
  2. 两个名称节点共享同一个存储设备,通过NFS实现,活动节点的任何修改都会记录到共享存储设备的edits日志文件中去

参考

https://blog.csdn.net/do_yourself_go_on/article/details/77089647

猜你喜欢

转载自blog.csdn.net/lzq20115395/article/details/80847599