HDFS Federation机制

HDFS Federation机制

一 为什么引入联盟框架 ?

1.1 hdfs的局限性

Namespace(命名空间)的限制
由于Namenode在内存中存储所有的元数据(metadata),因此单个Namenode所能存储的对象(文件+块)数目受到Namenode所在JVM的heap size的限制。50G的heap能够存储20亿(200 million)个对象,这20亿个对象支持4000个datanode,12PB的存储(假设文件平均大小为40MB)。
随着数据的飞速增长,存储的需求也随之增长。单个datanode从4T增长到36T,集群的尺寸增长到8000个datanode。存储的需求从12PB增长到大于100PB
性能的瓶颈
由于是单个Namenode的HDFS架构,因此整个HDFS文件系统的吞吐量受限于单个Namenode的吞吐量。毫无疑问,这将成为下一个MapReduce的瓶颈

隔离问题
由于HDFS仅有一个Namenode,无法隔离各个程序,因此HDFS上的一个实验程序就很有可能影响整个HDFS上运行的程序。那么在HDFS Federation中,可以用不同的Namespace来隔离不同的用户应用程序,使得不同Namespace Volume中的程序相互不影响。
集群的可用性
在只有一个Namenode的HDFS中,此Namenode的宕机无疑会导致整个集群不可用。

Namespace和Block Management的紧密耦合
当前在Namenode中的Namespace和Block Management组合的紧密耦合关系会导致如果想要实现另外一套Namenode方案比较困难,而且也限制了其他想要直接使用块存储的应用。

1.2 纵向扩展Namenode的可行性?

​ 比如将Namenode的Heap空间扩大到512GB,这样纵向扩展带来的第一个问题就是启动问题,启动花费的时间太长。当前具有50GB Heap Namenode的HDFS启动一次大概需要30分钟到2小时,那512GB的需要多久?
​ 第二个潜在的问题就是Namenode在Full GC时,如果发生错误将会导致整个集群宕机。

​ 第三个问题是对大JVM Heap进行调试比较困难。优化Namenode的内存使用性价比比较低。

1.3 引入HDFS Federation

​ 为了解决大部分单Namenode HDFS的问题,引入HDFS Federation**,HDFS Federation使用了多个独立的Namenode/namespace来使得HDFS的命名服务能够水平扩展。在HDFS Federation中的Namenode之间是联盟关系,他们之间相互独立且不需要相互协调。HDFS Federation中的Namenode提供了提供了命名空间和块管理功能。HDFS Federation中的datanode被所有的Namenode用作公共存储块的地方。每一个datanode都会向所在集群中所有的Namenode注册,并且会周期性的发送心跳和块信息报告,同时处理来自Namenode的指令.

​ Federation即为“联邦”,该特性允许一个HDFS集群中存在多个NameNode同时对外提供服务,这些NameNode分管一部分目录(水平切分),彼此之间相互隔离,但共享底层的DataNode存储资源.

二 Federation架构

### 2.1 架构

img

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

​ 一个block pool由属于同一个namespace的数据块组成,每个datanode可能会存储集群中所有block pool的数据块。

每个block pool内部自治,也就是说各自管理各自的block,不会与其他block pool交流。一个namenode挂掉了,不会影响其他namenode。

​ 某个namenode上的namespace和它对应的block pool一起被称为namespace volume。它是管理的基本单位。当一个namenode/nodespace被删除后,其所有datanode上对应的block pool也会被删除。当集群升级时,每个namespace volume作为一个基本单元进行升级。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WrqomvUk-1644138777416)(/Users/huoguangen/Documents/soft/data/Typora/image-20220206163347874.png)]

2.2 技术点

2.2.1 Block Pool(块池)

​ 所谓Block pool(块池)就是属于单个命名空间的一组block(块)。每一个datanode为所有的block pool存储块。Datanode是一个物理概念,而block pool是一个重新将block划分的逻辑概念。同一个datanode中可以存着属于多个block pool的多个块。Block pool允许一个命名空间在不通知其他命名空间的情况下为一个新的block创建Block ID。同时,一个Namenode失效不会影响其下的datanode为其他Namenode的服务。当datanode与Namenode建立联系并开始会话后自动建立Block pool。每个block都有一个唯一的标识,这个标识我们称之为扩展的块ID(Extended Block ID)= BlockID+BlockID。这个扩展的块ID在HDFS集群之间都是唯一的,这为以后集群归并创造了条件。

​ Datanode中的数据结构都通过块池ID(BlockPoolID)索引,即datanode中的BlockMap,storage等都通过BPID索引。在HDFS中,所有的更新、回滚都是以Namenode和BlockPool为单元发生的。即同一HDFS Federation中不同的Namenode

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
你意识到自己在实验过程中的不足之处,并找到改进的方向。你可以提HDFS FederationHDFS HA是Hadoop分布式文件系统(HDFS)中实现高可用性和扩展性的两种不同机制,它们有以下区别: 1. 目标:HDFS Federation的目标是实现HDFS的水平扩展,通过将命名空间划分为多个命名空间(Namespace),每个命名空间有自己的NameNode负责管理,从而提高系统的整体容量和吞吐量。而HDFS HA的目标是实现HDFS的高可用性,通过在集群中配置主备两个Name及自己在实验中遇到的困难和挑战,以及在解决问题时所采取的策略Node,当主节点发生故障时,备用节点可以快速接管服务。 2. 组件数量:HDFS Federation涉及多个NameNode和多个命名空间,每个命名空间都有一个独立的NameNode。而HDFS HA只涉及两个NameNode,即主节点和备用节点。 3. 命名空间划分:HDFS Federation将整个文件系统的命名空间划分为多个命名空间,并且每个命名空间有自己的NameNode。这样可以将文件系统的负载分散到多个NameNode上,提高系统的扩展性。而HDFS HA只有一个命名空间,主备两个NameNode共享同一个命名空间。 4. 故障切换方式:在HDFS Federation中,当某个命名空间的NameNode发生故障时,只会影响该命名空间下的文件系统操作,其他命名空间仍然可用。而在HDFS HA中,当主节点发生故障时,备用节点会接管整个文件系统的服务,实现快速故障切换。 5. 配置和管理:HDFS Federation需要配置和管理多个NameNode和命名空间,这需要更多的配置和管理工作。而HDFS HA只需要配置和管理主备两个NameNode,相对来说更加简单。 总的来说,HDFS Federation是为了实现HDFS的水平扩展,提高系统的容量和吞吐量;而HDFS HA是为了实现HDFS的高可用性,确保系统在主节点故障时能够快速恢复。它们分别解决了HDFS的扩展性和可靠性问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

野狼e族

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值