HA联邦机制

为什么需要联邦机制?

单NameNode的架构使得HDFS存在单点故障、内存受限,制约集群扩展性和缺乏隔离机制(不同业务使用同一个NameNode导致业务相互影响)等文艺,为了解决这些问题,除了用基于共享存储的HA解决方案我们还可以用HDFS的Federation机制来解决这个问题

什么是联邦机制

  • 联邦机制是NameNode的水平拓展方案。该方案允许HDFS创建多个NameSpece (NameNode节点管理,两个为一对)以提高集群的拓展性和隔离性。

  • 联邦HDFS允许每个NameNode管理一部分数据,且共享所有DataNode的储存资源

  • NameSpace之间在逻辑上是完全相互独立的(即任意两个NameSpace可以有完全相同的文件名)。在物理上可以完全独立(每个NameNode节点管理不同的DataNode)也可以有联系(共享存储节点DataNode)。一个NameNode节点只能管理一个Namespace。

  • Federation机制解决单NameNode存在的以下几个问题

    1. HDFS集群扩展性。每个NameNode分管一部分namespace,相当于namenode是一个分布式的。
    2. 性能更高效。多个NameNode同时对外提供服务,提供更高的读写吞吐率。
    3. 良好的隔离性。用户可根据需要将不同业务数据交由不同NameNode管理,这样不同业务之间影响很小。
    4. Federation良好的向后兼容性,已有的单Namenode的部署配置不需要任何改变就可以继续工作

Federation优点

  • 鲁棒性(健壮和强壮):在输入错误、磁盘故障、网络过载或有意攻击情况下,能否不死机、不崩溃

  • 由于联盟中各个Namenode之间是相互独立的:Federation整个核心设计大部分改变是在Datanode、Config和Tools,而Namenode本身的改动非常少,这样Namenode原先的鲁棒性不会受到影响。比分布式的Namenode简单,虽然扩展性比真正的分布式的Namenode要小些,但是可以迅速满足需求。

  • Federation良好的向后兼容性,可以无缝的支持目前单Namenode架构中的配置。已有的单Namenode的部署配置不需要任何改变就可以继续工作

Federation缺点

  • HDFS Federation并没有完全解决单点故障问题。虽然namenode/namespace存在多个,但是从单个namenode/namespace看,仍然存在单点故障。因此 Federation中每个namenode配置成HA高可用集群,以便主namenode挂掉,用于快速恢复服务

Federation 架构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VhWz9XdE-1637578022355)(%E8%81%94%E9%82%A6%E6%9C%BA%E5%88%B6.assets/image-20211120173917830.png)]

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

  • 每个namenode维护一个命名空间卷(namespace volume)。由命名空间的元数据和一个数据块池组成,数据块池(block pool)包含该命名空间下文件的所有数据块。

  • 每一个DataNode为所有的Block Pool存储块。DataNode是一个物理概念,而Block
    Pool是一个重新将block划分的逻辑概念。同一个datanode中可以存着属于多个Block Pool的多个块。

  • 命名空间卷之间相互独立。两两之间并不互相通信,甚至其中一个namenode的失效也不会影响由其他namenode维护的命名空间的可用性。

  • 某个NN上的NameSpace和它对应的Block Pool一起被称为NameSpace Volume。它是管理的基本单位。当一个NN/NS被删除后,其所有DN上对应的Block Pool也会被删除。当集群升级时,每个NameSpace Volume作为一个基本单元进行升级

    Block pool就是属于单个命名空间的一组block。每一个datanode为所有的block pool存储块。
    Datanode是一个物理概念,而block pool是一个重新将block划分的逻辑概念。
    Block pool允许一个命名空间在不通知其他命名空间的情况下为一个新的block创建Block ID。

    当datanode与Namenode建立联系并开始会话后自动建立Block pool。
    每个block都有一个唯一的标识,这个标识我们称之为扩展的块ID(Extended BlockID=BlockID+BlockID)
    这个扩展的块ID在HDFS集群之间都是唯一的,这为以后集群归并创造了条件。
    Datanode中的数据结构都通过BlockPoolID索引,即datanode中的BlockMap,storage等都通过BPID索引。
    在HDFS中,所有的更新、回滚都是以Namenode和BlockPool为单元发生的。
    即同一HDFS Federation中不同的Namenode/BlockPool之间没有什么关系。
    Hadoop1.x版本中Block Pool的管理功能放在Namenode中,以后Block Pool的管理功能移动的新的功能节点中。

参考

Hadoop记录-Federation联邦机制 - 信方 - 博客园 (cnblogs.com)

logs.com)](https://www.cnblogs.com/xinfang520/p/10397360.html)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值