HDFS1.X的架构从逻辑空间上可以分为两层。

Namespace 和 Block Storage Service;

  其中,Namespace 层面包含目录、文件以及块的信息,支持对Namespace相关文件系统的操作,如增加、删除、修改以及文件和目录的展示;

  而Block Storage Service层面又包含两个部分:

  ①Block Management(块管理)维护集群中DataNode的基本关系和数据块信息,它支持数据块相关的操作,如:创建数据块,删除数据块等,同时,它也会管理副本的复制和存放。

  ②Physical Storage(物理存储)存储实际的数据块并提供针对数据块的读写服务。

  当前HDFS架构只允许整个集群中存在一个Namespace,而该Namespace被仅有的一个NameNode管理。这个架构使得HDFS非常容易实现,但是,它(见上图)在具体实现过程中会出现一些模糊点,进而导致了很多局限性(下面将要详细说明),当然这些局限性只有在拥有大集群的公司,像baidu,腾讯等出现。

  

hdfs副本分集群存储 hdfs分层存储_hdfs副本分集群存储


  

  Hadoop1.x的HDFS架构的局限:

(1)Block Storage和namespace高耦合

当前namenode中的namespace和block management的结合使得这两层架构耦合在一起,难以让其他服务单独使用数据块存储功能。

(2)NameNode扩展性

HDFS的底层存储是可以水平扩展的(解释:底层存储指的是datanode,当集群存储空间不够时,可简单的添加机器已进行水平扩展),但 namespace不可以。当前的namespace只能存放在单个namenode上,而namenode在内存中存储了整个分布式文件系统中的元数据 信息,这限制了集群中数据块,文件和目录的数目。

(3)NameNode性能

由于HDFS文件的读写等流程都涉及与Namenode的交互,所以文件系统的吞吐量受限于单个Namenode的处理能力。

(4)隔离性

Namenode作为文件系统的中心节点,无法做到数据的有效隔离。

hdfs副本分集群存储 hdfs分层存储_hdfs副本分集群存储_02

考虑到以上缺点,HDFS2.X架构提供了HDFS Federastion功能。

在Hadoop2.x中,HDFS的变化主要体现在增强了NameNode的水平扩展(Horizontal Scalability)及高可用性(HA), 可以同时部署多个NameNode,这些NameNode之间是相互独立,也就是说他们不需要相互协调,DataNode同时在所有NameNode中注 册,作为他们共有的存储节点,并定时向所有的这些NameNode发送心跳块使用情况的报告,并处理所有NameNode向其发送的指令。该架构如图2所 示:

hdfs副本分集群存储 hdfs分层存储_HDFS_03

该架构引入了两个新的概念:存储块池(Block Pool) 和命名空间卷(namespaceVolume);

  ①一个块池(black pool)由属于同一个命名空间的所有数据块(信息)组成,这个块池中的数据块可以存储在集群中的所有Datanode上,而每个Datanode都可以存储集群中所有块池的数据块。Block Pool的管理相互之间是独立的。这意味着一个Namespace可以独立的生成块ID,不需要与其他Namespace协调。一个NameNode失败 不会导致Datanode的失败,这些Datanode还可以服务其他的Namenode。

 ②一个Namespace和它的Block Pool一起称作命名空间卷(Namespace Volume)。这是一个自包含单元。当一个NameNode/Namespace删除后,对应的Block Pool也会被删除。当集群升级时,每个Namespace Volume也会升级。

 

hdfs副本分集群存储 hdfs分层存储_HDFS架构_04


  (2)HDFS Federation与老HDFS架构的比较

①支持Namenode/Namespace的水平扩展,同时为应用程序和用户提供了命名空间卷级别的隔离性。

②Federation架构实现起来比较简单,Namenode的实现并不需要太大的改变,只需要更改部分Datanode代码即可。

Federation的出现为HDFS架构提供了新的可能,在未来我们可以将BlockStorage抽象成一个新的层次,HDFS Namespace将使用Block Storage层的功能来存储数据块。
在BlockStorage层中,每个块池都是一个独立的数据块集合,块池在管理上与其他块池独立,相互之间不需要协调。Datanode则提供共享存储功能,存储块池的数据块。Datanode会定期向BlockStorage层注册并发送心跳,同时会为每个块池发送块汇报。BlockStorage层会向Datanode发送数据块管理命令,之后Datanode会执行这些管理命令,例如数据块的复制、删除等。

分离出Block storage层会带来以下优势:
1.解耦合Namespace管理以及Block Storage管理。
2.其他应用可以直接绕过namenode/Namespace直接管理数据块,例如Hbase等应用可以直接使用Block Storage层。
3.可以在Block Storage上构建新的文件系统(非HDFS)。
4.使用分离的Block Storage层为分布式命名空间的实现提供了基础。

在HDFS2.X架构中,还多了HA(高可用),可以看我写过的文章。

Hadoop2.X相比较于Hadoop1.x来说,HDFS的架构与MapReduce的都有较大的变化,且速度上和可用性上都有了很大的提高,Hadoop2.X中有两个重要的变更:
(1)HDFS的NameNode可以以集群的方式布署,增强了NameNodes的水平扩展能力和高可用性,分别是:HDFS Federation与HA;
(2)MapReduce将JobTracker中的资源管理及任务生命周期管理(包括定时触发及监控),拆分成两个独立的组件,并更名为YARN(Yet Another Resource Negotiator);

关于Mapreduce和yarn框架将在以后的文章详述。