HDFS Federation 架构设计

一、当前HDFS的概况

1、当前HDFS的架构

当前HDFS包含两层结构: 
 
(1) Namespace 管理目录,文件和数据块
它支持常见的文件系统操作,如创建文件,修改文件,删除文件等。
  
(2)Block Storage有两部分组成:  
Block Management维护集群中datanode的基本关系,它支持数据块相关的操作,如:创建数据块,删除数据块等,同时,它也会管理副本的复制和存放。

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

Block Storage的这两部分分别在namenode和datanode上实现,所以该模块由namenode和datanode分工完成

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

2、NameNode 架构的局限性

(1)Namespace(命名空间)的限制

由于 NameNode 在内存中存储所有的元数据(metadata),因此单个 NameNode 所能存储的对象(文件+块)数目受到 NameNode 所在 JVM 的 heap size 的限制。50G 的 heap 能够存储 20 亿(200million)个对象,这 20 亿个对象支持 4000 个 DataNode,12PB 的存储(假设文件平均大小为 40MB)。随着数据的飞速增长,存储的需求也随之增长。单个 DataNode从 4T 增长到 36T,集群的尺寸增长到 8000 个 DataNode。存储的需求从 12PB 增长到大于100PB。

(2)隔离问题

由于 HDFS 仅有一个 NameNode,无法隔离各个程序,因此 HDFS 上的一个实验程序就
很有可能影响整个 HDFS 上运行的程序。

(3)性能的瓶颈

由于是单个 NameNode 的 HDFS 架构,因此整个 HDFS 文件系统的吞吐量受限于单个NameNode 的吞吐量

(4)namenode的扩展性

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

二、HDFS Federation 架构设计

1、为什么采用Federation ?

采用Federation的最主要原因是简单,Federation能够快速的解决大部分单Namenode的问题

Federation 整个核心设计实现大概用了4个月。大部分改变是在Datanode、Config和Tools,而Namenode本身的改动非常少,这样 Namenode原先的鲁棒性不会受到影响。这使得该方案与之前的HDFS版本兼容。

2、Federation架构

能不能有多个NameNode ???
在这里插入图片描述
在这里插入图片描述

为了水平扩展namenode,federation使用了多个独立的namenode/namespace。这些namenode之间是联合的,也就是说,他们之间相互独立且不需要互相协调,各自分工,管理自己的区域。分布式的datanode被用作通用的数据块存储设备。每个datanode要向集群中所有的namenode注册,且周期性地向所有namenode发送心跳和块报告,并执行来自所有namenode的命令。

一个block pool由属于同一个namespace的数据块组成,每个datanode可能会存储集群中所有block pool的数据块。

每个block pool内部自治,也就是说各自管理各自的block,不会与其他block pool交流。一个namenode挂掉了,不会影响其他namenode

某个namenode上的namespace和它对应的block pool一起被称为namespace volume。它是管理的基本单位。当一个namenode/nodespace被删除后,其所有datanode上对应的block pool也会被删除。当集群升级时,每个namespace volume作为一个基本单元进行升级。

3、Federation关键技术点

命名空间管理:

Federation中存在多个命名空间,如何划分和管理这些命名空间非常关键。在Federation中并采用“文件名hash”的方法,因为该方法的locality非常差,比如:查看某个目录下面的文件,如果采用文件名hash的方法存放文件,则这些文件可能被放到不同namespace中,HDFS需要访问所有namespace,代价过大。为了方便管理多个命名空间,HDFS Federation采用了经典的Client Side Mount Table。
在这里插入图片描述
 如上图所示,每个深色三角形代表一个独立的命名空间,上方浅色的三角形代表从客户角度去访问下方的子命名空间。各个深色的命名空间Mount到浅色的表中,客户可以访问不同的挂载点来访问不同的命名空间,这就如同在Linux系统中访问不同挂载点一样。
HDFS Federation中命名空间管理的基本原理将各个命名空间挂载到全局mount-table中,就可以做将数据到全局共享;同样的命名空间挂载到个人的mount-table中,这就成为应用程序可见的命名空间视图。

4、HDFS Federation的主要优点

(1)扩展性和隔离性

支持多个namenode水平扩展整个文件系统的namespace。可按照应用程序的用户和种类分离namespace volume,进而增强了隔离性。

(2)通用存储服务

Block Pool抽象层为HDFS的架构开启了创新之门。
分离block storage layer使得:

<1> 新的文件系统(non-HDFS)可以在block storage上构建  
<2> 新的应用程序(如HBase)可以直接使用block storage层  
<3> 分离的block storage层为将来完全分布式namespace打下基础

(3)设计简单

Federation 整个核心设计实现大概用了4个月。大部分改变是在Datanode、Config和Tools中,而Namenode本身的改动非常少,这样 Namenode原先的鲁棒性不会受到影响。虽然这种实现的扩展性比起真正的分布式的Namenode要小些,但是可以迅速满足需求,另外Federation具有良好的向后兼容性,已有的单Namenode的部署配置不需要任何改变就可以继续工作

5、HDFS Federation的不足之处

(1)单点故障问题

HDFS Federation并没有完全解决单点故障问题。虽然namenode/namespace存在多个,但是从单个namenode/namespace看,仍然存在单点故障:如果某个namenode挂掉了,其管理的相应的文件便不可以访问。Federation中每个namenode仍然像之前HDFS上实现一样,配有一个secondary namenode,以便主namenode挂掉一下,用于还原元数据信息。

(2)负载均衡问题

HDFS Federation采用了Client Side Mount Table分摊文件和负载,该方法更多的需要人工介入已达到理想的负载均衡。

三、HDFS Federation 应用思考

不同应用可以使用不同 NameNode 进行数据管理

比如:图片业务、爬虫业务、日志审计业务

Hadoop生态系统中,不同的框架使用不同的 NameNode 进行管理 NameSpace。(隔离性)

猜你喜欢

转载自blog.csdn.net/weixin_43520450/article/details/107812368