A-A+

从零学习Hadoop之HDFS的Federation机制

2016年04月15日 Hadoop 暂无评论 阅读 688 views 次

上一篇介绍了Hadoop2中的新特性HA机制,是由于单节点故障而开发的,并且提到随着集群规模的变大,NameNode成为性能的瓶颈,而这次介绍一下HDFS的Federation机制就是为了解决这两个问题而开发的。

在Hadoop1的HDFS架构中,HDFS集群只有一个名字空间,并且只有单独的一个NameNode,这个NameNode负责对这单独的一个名字空间进行管理。这也正是单点失效(Single Point Failure)的隐患所在。

可得:HDFS Federation就是使得HDFS支持多个名字空间,并且允许在HDFS中同时存在多个NameNode。

单个NameNode的HDFS结构的局限性

Hadoop架构

在整个集群中只有一个NameNode,还有一个Backup NameNode。NameNode会实时将变化的HDFS的信息同步给Backup NameNode。Backup NameNode顾名思义是用来做NameNode的备份。NameNode中名字空间以层次结构存储着文件名和BlockID的对应关系、BlockID和具体Block位置的对应关系。这个单独的NameNode管理着数个DataNode,Block分布在各个DataNode中,每个DataNode会周期性的向此NameNode发送心跳消息,报告自己所在的DataNode的使用状态。Block是用来存储数据的最小单元,通常一个文件会存储在一个或者多个Block中,默认Block大小:Hadoop1为64MB,Hadoop为128MB。

由于NameNode在内存中存储着所有的元数据(MetaData),因此单个NameNode所能存储的对象(文件+块)数目受到NameNode所在JVM的heap size的限制。50GB的heap能存储20亿个对象,这20亿个对象支持4000个DataNode,12PB的存储(假设文件大小为40MB)。

随着数据的飞速增长,存储的需求也随之增长。

单个NameNode的HDFS架构的局限性:

  • 性能的瓶颈:整个HDFS文件系统的吞吐量受限于单个NameNode的吞吐量。
  • 隔离问题:单个NameNode无法隔离程序。
  • 集群的可用性:宕机问题。
  • NameSpace和Block Management的紧密耦合

为什么引入Federation机制

引入Federation的最主要原因是对HDFS系统中文件的隔离,Federation能够快速解决大部分单NameNode HDFS的问题。

Federation是简单鲁棒性的设计,由于联盟中各个NameNode之间相互独立的,Federation整个设计实现大概用了三个半月。大部分的改变是在DataNode、Config和Tools,而NameNode本身的改动非常少,这样NameNode原来的鲁棒性不会受到影响。

Federation具有良好的向后兼容性。

Federation架构

HDFS Federation使用了多个独立的NameNode/NameSpace使得HDFS的命名服务能够水平扩展。

Federation架构

HDFS Federation中的NameNode之间是联盟关系,它们之间相互独立且不需要相互协调。HDFS Federation中的NameNode提供了名字空间和块管理功能。HDFS Federation中的DataNode被所有的NameNode用作公共存储的地方。每一个DataNode都会向所在集群中所有的NameNode注册,并且会周期性地发送心跳和块信息报告,同时处理来自NameNode的指令。

在Hadoop1中HDFS只有一个名字空间(NameSpace),它使用全部的块。而Federation HDFS中有多个独立的NameSpace,并且每一个名字空间使用一个块池(Block Pool)。

在Hadoop1中HDFS只有一组块。而Federation HDFS中有多组独立的块。块池就是属于同一个名字空间的一组块。

块池:属于单个名字空间的一组Block。每个DataNode可以为所有的块池存储块。

当DataNode和NameNode建立联系并开始会话后自动建立块池。

在DataNode中,对应于每个NameNode都有一个相应的线程。每个DataNode会去每一个NameNode注册,并且周期性地给所有的NameNode发送心跳及DataNode的使用报告。DataNode还会给NameNode发送其所在的块池的块报告(Block Report)。

多个名字空间的管理问题

在一个集群中需要唯一的名字空间an还是多个名字空间,核心问题是名字空间中数据的共享和访问的问题。使用全局唯一的名字空间是解决数据共享和访问的一种方法,在多个名字空间下,还可以使用Client Side Mount Table方式做到数据共享和访问。

参考资料

书名:Hadoop应用开发技术详解

作者:刘刚

给我留言

*

Copyright © If Coding 保留所有权利.   Theme  Ality   

用户登录