Zookeeper 在Hadoop中的应用

jopen 9年前
Zookeeper 简介

Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。


Hadoop简介

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
Hadoop主要包含两部分:HDFS,YARN。

HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。

YARN 主要包含ResourceManager(RM),以及NodeManager(NM),ApplicationManager(AM),Container四个部分组成,其中RM最为核心,作为全局的资源管理器,他主要负责系统的资源管理与分配
关于Hadoop的的更多介绍可参考:http://hadoop.apache.org/

Hadoop面临的问题

在Hadoop中,不管是HDFS,还是YARN,都存在一个问题,由于HDFS使用NameNode管理众多的DataNode节点,YARN使用ResourceManager管理系统的资源分配,所以如果NN节点或者是RM节点出现问题,都会导致整个集群不能正常使用,为了解决这个问题Hadoop针对NN以及RM引入了 支持Active/StandBy 模式的HA架构。

正常情况下对于NN以及RM,分别只会有一个Active节点,其他节点为Standby,Active节点负责对外提供服务,当Active的节点由于异常不能对外提供服务时,standby节点会转化为Active节点,继续提供服务

Zookeeper帮助Hadoop解决的问题
下文以YARN为例,描述Zookeeper是如何帮助YARN实现HA机制的

  1. 创建锁节点
    所有的ResourceManager在启动的时候会竞争写一个/yarn-leader-election/pseudo-yarn-rm- cluster节点(临时节点),创建成功的ResourceManager节点变成Active节点,其他的切换为StandBy
  2. 注册Watcher节点
    所有的standby的ResourceManager节点会向/yarn-leader-election/pseudo-yarn-rm-cluster节点注册一个Watcher
  3. 主备切换
    当Active的ResourceManager节点出现异常或挂掉时,起在zookeeper上创建的临时节点也会被删除,standy的ResourceManager节点检测到该节点发生变化时,会重新发起竞争,直到产生一个Active节点
  4. 如果集群中存在两个ResourceManager节点RM1,RM2,在通过竞争操作后,RM1变成了Active后,如果某个时间段RM1由于资源损耗比较严重,产生了假死的现象,此时的zookeeper会以为RM1这台机器出现了故障,于是发起新一轮的竞选,选了RM2作为Active,在RM2变成Active后,RM1恢复了服务但是它任然以为自己是Active的,此时就出现了两个Active的情况,这种情况又称为“脑裂”,为了解决这种问题可以在创建根节点的时候引入ACL控制,这样的话当RM1恢复后尝试更新数据时,会发现对应的节点必须提供RM2的ACL信息才可以更新对应的数据
  5. 在Hadoop中负责解决该问题的组件是Hadoop-common 中的ActiveStandElector组件


HDFS的原理与之ResourceManager类似