一. 前言
1.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的吞吐量。
2.hdfs federation架构设计,如图所示
能不能有多个namenode
hdfs federation架构设计
二.实现
namenode ha是为了解决namenode可用性的问题,而namenode federation则主要是为了解决namenode扩展性,隔离性,以及单个namenode性能方面的问题。namenode federation架构如下:
namenode federation使用了多个命名空间,这些命名空间互相独立,自制(其实是对元数据的水平切分),而集群中所有datanode向所有namenode都进行注册,而一个块池(block pool)有属于同一个命名空间的数据块组成,每个datanode可能会存储集群中所有块池的数据块,每个块池互相独立,有一个挂掉了也不会影响其他块池正常工作。
同时部署了namenode ha和namenode federation时,集群结构会相对复杂一点,如下图。在实际的生成环境中,namenode ha几乎是必备,而当集群规模在1000台以下时,几乎是不需要namenode federation的。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对服务器之家的支持。如果你想了解更多相关内容请查看下面相关链接
原文链接:https://blog.csdn.net/qq_43193797/article/details/85078422