hadoop1.x的hdfs架构
主要由namespace(命名空间)和Block Storage(块的存储)两层组成
局限性:
- namespace和block manager高度耦合,其他服务难以单独使用数据块储存功能。
- 拓展性有限:虽然Datanode可以水平扩展,但是namenode的内存存储了整个分布式文件系统的元数据信息,限制了集群的数据块,文件的目录的数量。
- 性能受限:HDFS的所有读写操作都要和namenode通信,单个namenode限制了性能。
- 隔离性差:namenode作为文件系统中心,无法进行数据的有效隔离。
- 单点故障:只有一个namenode用于处理信息。
hadoop 2.x的架构:联邦机制
联邦HDFS是namenode水平扩展方案。该方案允许HDFS创建多个namespace以提高集群的扩展性和隔离性。联邦HDFS允许每个namenode管理文件系统命名空间的一部分。每个namenode维护一个命名空间,不同namenode之间的命名空间相互独立。数据块池不再切分,所以每个DataNode需要注册到每个namenode。
引入块池(block pool)和命名空间卷(namespace Volume),一个块池由属于同一个命名空间的所有数据块组成。一个namenode和它的block pool一起称为命名空间卷,是一个基本升级单元。
HDFS的底层存储是可以水平拓展的(底层存储指的是datanode,当集群存储空间不够时,可简单的添加机器以进行水平拓展),但namespace不可以。当前的namespace只能存放在单个namenode上,而namenode在内存中存储了整个分布式文件系统中的元数据信息,这限制了集群中数据块,文件和目录的数目。
- 多个NN共用一个集群DN的存储资源,每个NN都可以单独对外提供服务。
- 每个NN都会定义一个存储池,有单独的id,每个DN都为所有存储池提供存储。
- DN会按照存储池id向其对应的NN汇报块信息,同时,DN会向所有NN汇报本地存储可用资源情况。
- 如果需要在客户端方便的访问若干个NN上的资源,可以使用客户端挂载表,把不同的目录映射到不同的NN,但NN上必须存在相应的目录。
优点:
- 支持namenode水平拓展,提供了命名空间卷级别的隔离性。
- 多个namenode提高了文件系统吞吐量,性能提高。
- 提高了高可用性,既有双机热备,又有多个namenode同时工作。