Hadoop-2.2.0学习之二HDFS联盟

在学习Hadoop-2.x版本中的HDFS之前先看一下目前普遍使用中的Hadoop-1.x版本的HDFS结构,有助于更好地理解2.x版本中HDFS的变化所带来的好处。先看看2.x版本之前的HDFS结构图,如下所示。

Hadoop-2.2.0学习之二HDFS联盟_第1张图片

从上面的结构可以看出,HDFS主要包括两层:Namespace(命名空间)和块存储(BlockStorage)。命名空间由目录、文件和块组成,支持文件系统相关的所有命名空间操作,比如创建、删除、修改、列出文件和目录。

块存储服务有两部分:块管理和存储。其中的块管理由NameNode实现,通过处理注册信息和周期性的心跳提供DataNode集群的组员关系,处理块报告和维护块位置,支持譬如创建、删除、修改和查询块位置等的块相关操作,管理副本位置和确保一个块的副本数量在允许的副本数量之内,删除超出的块副本。存储由DataNode通过在本地文件系统存储块提供,并且允许读写访问。

Hadoop-1.x版本中的HDFS架构在整个集群中只允许单一的命名空间,单一的NameNode管理着该空间。HDFS联盟通过增加支持多NameNode/命名空间解决了HDFS架构中的局限性。

在看过了1.x版本中的HDFS架构后,现在看一下2.x中的HDFS联盟架构,架构图如下图所示。通过该图可以发现,2.x版本对HDFS中的NameNode/Namespace进行了水平扩展,但NameNode之间是独立的。

Hadoop-2.2.0学习之二HDFS联盟_第2张图片

在2.x的HDFS联盟架构图中,可以发现Pool 1、Pool k、…、Pool n,这些是属于单个命名空间的Block Pool(块池),是一组块的集合。DataNode为集群中所有块池存储块。块池之间的管理是相互对立的,这就允许一个命名空间在不需要与其它命名空间协作的情况下为新的块生成Block ID,同样失效的NameNode不会阻止DataNode继续为集群中的其它NameNode提供服务。

一个命名空间和属于它的Block Pool(块池)一起被称为命名空间卷,这是一个独立自主的管理单元。当NameNode/命名空间被删除时,DataNode中对应的Block Pool(块池)也被删除。当集群升级时,每个命名空间卷作为一个单元升级。

在2.x版本中还新增了称为ClusterID的标示符,用于标示集群中的节点,从上图也可以发现这一变化,比如NN-1、NN-k。当NameNode格式化时,这个标示符ID被提供或者自动生成,在格式化集群中其他的NameNode时会使用到该ID。

上述这些变化或者改进带来了哪些好处呢?

  1. 命名空间的扩展性——之前版本中HDFS集群的存储可以水平扩展但是命名空间不可以,现在通过增加更多的NameNode到集聚中,可以达到扩展命名空间的目的,而这将使大型部署或者使用非常多小文件的部署受益。
  2. 性能提升——在之前的HDFS架构中,文件系统操作的吞吐量受限于单个NameNode节点,通过在集群中增加更多的NameNode节点可以扩展文件系统读写访问的吞吐量。
  3. 隔离性——在多用户环境中单个NameNode无法提供隔离措施,会出现实验性质的应用程序使NameNode超载而降低了关键应用程序的生产。存在多个NameNode节点时,不同类别的应用程序或者不同的用户被不同的命名空间隔离开来,不会互相影响。

你可能感兴趣的:(Hadoop-2.2.0学习之二HDFS联盟)