hadoop高可用集群最详细原理讲解!

前面给大家讲解过hadoop集群的搭建和zookeeper集群的搭建,今天就给大家讲解下基于zookeerper如何实现hadoop高可用集群搭建!

Hadoop 高可用 (High Availability) 分为 HDFS 高可用和 YARN 高可用,两者的实现基本类似,但 HDFS NameNode 对数据存储及其一致性的要求比 YARN ResourceManger 高得多,所以它的实现也更加复杂,下面给大家详细讲解下如何实现HDFS 高可用和YARN高可用。

HDFS 高可用

Active NameNode 和 Standby NameNode:两台 NameNode 形成互备,一台处于 Active 状态,为主 NameNode,另外一台处于 Standby 状态,为备 NameNode,只有主 NameNode 才能对外提供读写服务。

1.主备切换控制器 ZKFailoverController:ZKFailoverController 作为独立的进程运行,对 NameNode 的主备切换进行总体控制。ZKFailoverController 能及时检测到 NameNode 的健康状况,在主 NameNode 故障时借助 Zookeeper 实现自动的主备选举和切换。

2.Zookeeper 集群:为主备切换控制器提供主备选举支持。共享存储系统:共享存储系统是实现 NameNode 的高可用最为关键的部分,共享存储系统保存了 NameNode 在运行过程中所产生的 HDFS 的元数据。

3.主 NameNode 和 备 NameNode 通过共享存储系统实现元数据同步。在进行主备切换的时候,新的主 NameNode 在确认元数据完全同步之后才能继续对外提供服务。

4.DataNode 会同时向主 NameNode 和备 NameNode 上报数据块的位置信息。

Hadoop使用 Quorum Journal Manager (QJM) 作为共享的存储系统
Active NameNode 首先把 EditLog 提交到 JournalNode 集群,然后 Standby NameNode 再从 JournalNode 集群定时同步 EditLog,当 Active NameNode 宕机后, Standby NameNode 在确认元数据完全同步之后就可以对外提供服务。流程图如下:
hadoop高可用集群最详细原理讲解!_第1张图片

NameNode 实现主备切换的流程下图所示
hadoop高可用集群最详细原理讲解!_第2张图片
HealthMonitor 初始化完成之后会启动内部的线程来定时调用对应 NameNode 的 HAServiceProtocol RPC 接口的方法,对 NameNode 的健康状态进行检测。

HealthMonitor 如果检测到 NameNode 的健康状态发生变化,会回调 ZKFailoverController 注册的相应方法进行处理。

如果 ZKFailoverController 判断需要进行主备切换,会首先使用 ActiveStandbyElector 来进行自动的主备选举。

ActiveStandbyElector 与 Zookeeper 进行交互完成自动的主备选举。

ActiveStandbyElector 在主备选举完成后,会回调 ZKFailoverController 的相应方法来通知当前的 NameNode 成为主 NameNode 或备 NameNode。

ZKFailoverController 调用对应 NameNode 的 HAServiceProtocol RPC 接口的方法将 NameNode 转换为 Active 状态或 Standby 状态。

YARN高可用
YARN ResourceManager 的高可用与 HDFS NameNode 的高可用类似,但是 ResourceManager 不像 NameNode ,没有那么多的元数据信息需要维护,所以它的状态信息可以直接写到 Zookeeper 上,并依赖 Zookeeper 来进行主备选举。
hadoop高可用集群最详细原理讲解!_第3张图片
主resourcemanager绑定在和主namenode同一台机上,
备resourcemanager绑定在和备namenode同一台机上。

实现高可用的具体设计思路

按照高可用的设计目标:需要保证至少有两个 NameNode (一主一备) 和 两个 ResourceManager (一主一备) ,同时为满足“过半写入则成功”的原则,需要至少要有3个 JournalNode 节点。这里使用三台主机进行搭建,集群规划如下:
Hadoop2成功启动以下进程:
主NameNode
主ResourceManager
QuorumPeerMain
DFSZKFailoverController
DataNode
JournalNode
NodeManager

Hadoop3成功启动以下进程:
备NameNode
备ResourceManager
QuorumPeerMain
DFSZKFailoverController
DataNode
JournalNode
NodeManager

Hadoop4成功启动以下进程:
QuorumPeerMain
SecondaryNameNode
DataNode
JournalNode
NodeManager

框架已经搭好,下次会讲解安装流程!
Hadoop高可用集群,基于Zookeeper集群详细搭建流程!

你可能感兴趣的:(hadoop)