HDFS Architecture and Explaination of Design


HDFS 架构以及解释其设计

HDFS 也许不是最好的大数据存储技术,但依然是最重要的大数据存储技术。
为什么呢?
在整个大数据体系里面,最宝贵、最难以代替的资产就是数据,大数据所有的一切都要围绕数据展开。HDFS存储着宝贵的数据资产,各种新的算法、框架要想得到人们的广泛使用,必须支持HDFS才能获取已经存储在里面的数据。

HDFS 架构图

我们都知道 RAID 是在多个磁盘上进行文件存储及并行读写,将 RAID 的设计理念扩大到整个分布式服务器集群,就产生了分布式文件系统, Hadoop 分布式文件系统的核心原理就是如此。

HDFS 是在一个大规模分布式服务器集群上,对数据进行分片后进行并行读写及冗余存储。
HDFS 的设计目标是管理数以千计的服务器、数以万计的磁盘,将这么大的规模的计算资源当作一个单一的存储系统进行管理,对应用程序提供数以 PB 计的存储容量,让应用程序像使用普通文件系统一样存储大规模的文件数据。

下面我们来看一下 HDFS 的架构图:
HDFS 架构图
HDFS_architecture

上图是 HDFS 的架构图,从图中你可以看到 HDFS 的关键组件有两个,一个是 DataNode,一个是 NameNode。

在实践中,HDFS 集群的 DataNode 服务器会有很多台,一般在几百台到几千台这样的规模,每台服务器配有数块磁盘,整个集群的存储容量大概在几 PB 到数百 PB。

HDFS 的高可用设计

在设计一个高可用系统时,我们需要从微观到宏观地去考虑采取什么措施,这里的措施就是如何容错(failover)。
When we consider how to design a high-available system, we need to think of what corresponding mesures to take from the micro to the macro perspective.

  1. 数据存储故障容错

    这里面主要涉及:

    • Block
    • checksum
  2. 磁盘故障容错

    这里面主要涉及:

    • BlockID
    • NameNode 保存了 metadatametadata 包括了文件名和文件的 BlockID,以及分散在什么位置(哪个 DataNode,哪块盘上)
  3. DataNode 故障容错

    这里面主要涉及:

    • DataNodeNameNode 之间保持心跳
    • 数据分散在不同的 DataNode 上,metadata 保存在 NameNode
  4. NameNode 故障容错

    这里面主要涉及:

    • Zookeeper(分布式锁原理)
    • Active NameNodeStandby NameNode
    • Shared Edits
    • ANN 维持 znode锁,SNN 获取 znode锁
    • DataNode 向 ANN 和 SNN 同事发送心跳,只有 ANN 能返回控制信息

小结

我们小结一下,看看 HDFS 是如何通过大规模分布式服务器集群实现数据的大容量、高速、高可靠的存储、访问的。

  1. 文件数据以数据块(Block)的方式进行切分,数据块可以存储在集群中任意的 DataNode 上。所以 HDFS 存储的文件可以非常大,一个文件理论上可以占据整个 HDFS 服务器集群上的所有磁盘,实现了大容量存储。
  2. HDFS 一般的访问模式是通过 MapReduce 程序在计算时读取,MapReduce 对输入数据进行分片读取,通常一个分片就是一个数据块 1,每个数据块分配一个计算进程,这样就可以同时启动很多进程对一个 HDFS 文件的多个数据块进行并发访问,从而实现数据的告诉访问。关于 MapReduce 的具体处理过程,我以后再详细记录。
  3. DataNode 存储的数据块会进行复制,使每个数据块在集群里有多个备份,保证了数据的可靠性,并通过一系列的故障容错手段实现 HDFS 系统中主要组件的高可用,进而保证数据和整个系统的高可用。

彩蛋

这里有一个关于 HDFS 的漫画,可以作为工作机制的概括:
金山文档 - HDFS_comic.pdf
缩略图:
HDFS comic

1 Mapreduce中有分片(fragment)概念,和HDFS的数据块(Block)概念不一样。


文章作者: 少年G
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 少年G !
评论
  目录