hadoop的高可用机制和联邦机制

1. hadoop的高可用机制

高可用机制主要是解决NameNode单点故障问题

在Hadoop 中,NameNode 所处的位置是非常重要的,整个HDFS文件系统的元数据信息都由NameNode 来管理,NameNode的可用性直接决定了Hadoop 的可用性,一旦NameNode进程不能工作了,就会影响整个集群的正常使用。所以在实际应用中一般会使用高可用集群(HA),在hadoop集群中配置两个NameNode。

在典型的HA集群中,两台独立的机器被配置为NameNode。在工作集群中,NameNode机器中的一个处于Active状态,另一个处于Standby状态。Active NameNode负责群集中的所有客户端操作,而Standby充当从服务器。Standby机器保持足够的状态以提供快速故障切换(如果需要)。

在这里插入图片描述

ZKFC组件:

  • ZKFailoverController

    是基于Zookeeper的故障转移控制器,它负责控制NameNode的主备切换,ZKFailoverController会监测NameNode的健康状态当发现Active NameNode出现异常时会通过Zookeeper进行一次新的选举,完成Active和Standby状态的切换

  • HealthMonitor

    周期性调用NameNode的HAServiceProtocol RPC接口(monitorHealth 和 getServiceStatus),监控NameNode的健康状态并向ZKFailoverController反馈

  • ActiveStandbyElector

    接收ZKFC的选举请求,通过Zookeeper自动完成主备选举,选举完成后回调ZKFailoverController的主备切换方法对NameNode进行Active和Standby状态的切换.

DataNode

NameNode包含了HDFS的元数据信息数据块信息(blockmap),其中数据块信息通过DataNode主动向Active NameNode和Standby NameNode上报

共享存储系统

共享存储系统负责存储HDFS的元数据(EditsLog),Active NameNode(写入)和 Standby NameNode(读取)通过共享存储系统实现元数据同步,在主备切换过程中,新的Active NameNode必须确保元数据同步完成才能对外提供服务
在这里插入图片描述

高可用的具体操作如上图所示。

  • 通过共享存储系统来保证两个NameNode之间的数据同步
  • 通过ZKFC和Zookeeper来实现NameNode状态的切换
    1. HealthMonitor监控工作NameNode的状态,当发现NameNode宕机马上汇报给ZKFalloverController
    2. ZKFalloverController向ActiveStandbyElector汇报NameNode已经宕机
    3. ActiveStandbyElector告诉Zookeeper重新选举新的NameNode
    4. Zookeeper选举完成后回复ActiveStandbyElector新的选举结果
    5. ActiveStandbyElector报告ZKFalloverController新的选举结果
    6. ZKFalloverController改变原来NameNode的状态
    7. ZKFalloverController让新选举的NameNode状态变为Active

还需要注意的一点是,SecondaryNameNode不是高可用中的备份NameNode

二者主要区别可以用下面两个图来显示

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

具体区别可以参考这篇博客https://blog.csdn.net/andyguan01_2/article/details/88696239

2. hadoop的联邦机制

联邦机制主要是解决NameNode的横向扩展问题

单NameNode的架构使得HDFS在集群扩展性和性能上都有潜在的问题,当集群大到一定程度后,NameNode进程使用的内存可能会达到上百G,NameNode成为了性能的瓶颈。因而提出了namenode水平扩展方案– Federation,即联邦机制。

NameNode的运行存在多个NameNode,多个NameNode的情况意味着有多个namespace(命名空间),区别于HA模式下的多NameNode,它们是拥有着同一个namespace。不同的namespace之间是隔离的不同namespace会有其对应的编号,并在对应的DataNode中创建对应的目录,也就是说DataNode下不同目录下的数据由不同namespace管理。

在这里插入图片描述

概括起来:

多个NN共用一个集群里的存储资源,每个NN都可以单独对外提供服务。

每个NN都会定义一个存储池,有单独的id,每个DN都为所有存储池提供存储。

DN会按照存储池id向其对应的NN汇报块信息,同时,DN会向所有NN汇报本地存储可用资源情况。

HDFS Federation不足

HDFS Federation并没有完全解决单点故障问题。虽然namenode/namespace存在多个,但是从单个namenode/namespace看,仍然存在单点故障:如果某个namenode挂掉了,其管理的相应的文件便不可以访问。Federation中每个namenode仍然像之前HDFS上实现一样,配有一个secondary namenode,以便主namenode挂掉一下,用于还原元数据信息。

所以一般集群规模真的很大的时候,会采用HA+Federation的部署方案。也就是每个联合的namenodes都是ha的。

猜你喜欢

转载自blog.csdn.net/qq_24852439/article/details/104185496