日期:2014-05-16  浏览次数:20691 次

Apache Hadoop 0.23 HDFS Federation介绍

HDFS Federation

?

?

为了水平扩展命名服务的规模,federation?使用多个Namenode和命名空间代替过去的单个Namenode的模式。多个Namenode被联合在一起提供服务,但是每个Namenode又是独立的,且每个Namenode不需要与其他Namenode协调工作。而Datenode的存储方式还是和过去一样使用块来存储,但每个Datenode需要注册到集群中所有的Namenode上。Datanode周期性的发布心跳、块操作的报告和从Namenode发送来的操作命令的响应。

?

背景

HDFS Layers

HDFS包括两个层次:

? ? ? ? 1.Namespace

? ? ? ? ? ? ? ? ? 包括目录、文件和blocks

? ? ? ? ? ? ? ? ??HDFS支持所有与namespace相关的操作,包括增删查改,列出文件和目录等操作。

? ? ? ? 2.块(block)存储,也包括两个方面

? ? ? ? ? ? ? ? ? ?块的管理(哪些已经在namenode上记录了)

? ? ? ? ? ? ? ? ? ? ? ? ?HDFS通过注册和心跳机制为hadoop提供一个datanode群组

? ? ? ? ? ? ? ? ? ? ? ? ?处理从datanode上传的块报告,并维护本地的块信息

? ? ? ? ? ? ? ? ? ? ? ? ?提供针对块的操作,例如增删查改和定位一个块的位置。

? ? ? ? ? ? ? ? ? ? ? ? ?管理备份的布局,拷贝要备份的块,删除已经备份的块。

? ? ? ? ? ? ? ? ? ?存储 - ?由datanode提供用来存储块在每个datanode本地文件系统,并且控制读和写的访问权限。

?

目前的HDFS架构只支持一个集群一个namenode,一个单独的namenode管理namespace。HDFS Federation 对现有架构进行修改,一个HDFS系统支持多个namenode。

?

HDFS Federation

HDFS Federation Architecture

?

Block Pool

? ? ? ?一个block pool 是属于一个单独namespace的块的集合。集群中所有Datanode为每个block pool存储所有块。block pool相对于其他block pool来说是独立存在的,相互之间没有影响。这样就允许一个namespace为新生成的块创建Block??ID而不需要与其他namespace沟通协调。一个namenode挂掉并不会影响集群中datanode为其他namenode提供服务。

? ? ? ? 一个namespace和它管理的block pool合称为Namespace Volume。它是一个自给自足的独立系统。当一个Namenode/namespace被删除,在集群全部datanode上与之相关的block pool 将被一起删除。在集群升级的时候每个namespace volume 可以单独的升级。

?

ClusterID

? ? ? ?一个新的标示符ClusterID?被创建,用来识别集群中的每个节点。当一个namenode被格式化,可以手工提供或自动创建一个ClusterID。这个ID可能在集群中其他namenode格式化的时候被用到。

?

核心利益

?

  • Namespace?扩展性 - HDFS集群存储可以水平的扩展,但是namespace不行。通过增加在集群中的namenode数量来扩展namespace有利于大量的调度任务或者调度大量的小文件。
  • 性能 - 文件系统的吞吐量普遍收到单个namenode的制约。为集群增加namenode增加了文件系统的读写操作的吞吐量。
  • 隔离性 - 单namenode在多用户环境中没有隔离性可言。一个实验性的项目可以使namenode满负荷运行,从而降低生产环境下得项目的速度。使用多namenode后,不同类别的用户和项目通过不同的namespace被隔离。
Federation配置

? ? ? Federation配置是向后兼容的,所以你还是可以只配置一个namenode工作而无需做任何配置上的修改。新的配置文件被巧妙的设计后,我们可以在全部的集群节点中只使用一种配置文件而不用管哪些节点是什么类型。
? ? ? 在Federation提出了一个新的抽象类NameServiceID?。一个namenode和它对应的secondary / backup?/?checkpointer节点都属于同一个NameServiceID?。为了做到只是用一种配置文件,namenode和secondary / backup / checkpointer的配置参数都要加上NameServiceID?前缀并放在同一个配置文件当中。

配置步骤
1.在配置文件中增加以下参数: