从零学习Hadoop之HDFS的Federation机制
上一篇介绍了Hadoop2中的新特性HA机制,是由于单节点故障而开发的,并且提到随着集群规模的变大,NameNode成为性能的瓶颈,而这次介绍一下HDFS的Federation机制就是为了解决这两个问题而开发的。
在Hadoop1的HDFS架构中,HDFS集群只有一个名字空间,并且只有单独的一个NameNode,这个NameNode负责对这单独的一个名字空间进行管理。这也正是单点失效(Single Point Failure)的隐患所在。
可得:HDFS Federation就是使得HDFS支持多个名字空间,并且允许在HDFS中同时存在多个NameNode。
单个NameNode的HDFS结构的局限性
在整个集群中只有一个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的命名服务能够水平扩展。
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应用开发技术详解
作者:刘刚