Zookeeper
Zookeeper是一个分布式协调服务(Coordination),一个leader,多个follower组成的集群,就是为用户的分布式应用程序提供协调服务。
Zookeeper是为别的分布式程序服务的。Zookeeper所提供的服务涵盖:主从协调、服务器节点动态上下线、统一配置管理、分布式共享锁、统一名称服务等。
Yarn
YARN的目标就是实现“一个集群多个框架”,即在一个集群上部署一个统一的资源调度管理框架YARN,在YARN之上可以部署其他各种计算框架。由YARN为这些计算框架提供统一的资源调度管理服务,并且能够根据各种计算框架的负载需求,调整各自占用的资源,实现集群资源共享和资源弹性收缩。
可以实现一个集群上的不同应用负载混搭,有效提高了集群的利用率。
不同计算框架可以共享底层存储,避免了数据集跨集群移动。
上图中的ResourceTrackeServer、ApplicationMasterService 、ClientRMServer是ResourceManager中处理上述功能的组件。
1、ResourceManager基本职能
ResourceManager基本职能概括起来就以下几方面:
-
与客户端(Application Client)进行交互,处理来自于客户端的请求,如查询应用的运行情况等。
-
启动和管理各个应用的ApplicationMaster,并且为ApplicationMaster申请第一个Container用于启动和在它运行失败时将它重新启动。接收来自ApplicationMaster的资源申请,为其进行分配。
-
管理NodeManager,接收来自NodeManager的资源和节点健康情况汇报,并向NodeManager下达管理资源命令,例如kill掉某个container。
举例说明
在一个分布式系统上。现在有个事要办。我们要找这个系统办这个事,就要通知yarn。打个比方,yarn的master node看看这个系统里有很多node,看看谁有空,谁有能力(cpu、内存、等)来干这个事。然后把任务分配给合适的node来办这个事。 这个时候系统面临一个危险。那就是在分布式系统中,failure成为常态。yarn master node管理着很多个node,管理着它们哪一个出问题了。危险在于master自己坏了怎么办。 常见的分布式系统出问题的解决办法是我们总保持有一个待命的,到需要的时候顶上。yarn里的Resource
Manager也有待命的。当一个Resource
Manager坏了,或者需要升级更新,另一个Resource
Manager要接手。这时候麻烦来了,新的Resource
Manager怎么知道哪个任务已经完成,哪个还没有,用户想执行的任务到什么状态了,一个任务所必须的先决条件任务是否已经完成。 这个情形中,Yarn自己成了Single
point of failure。 新启动的Resource
Manager成了这个分布式系统的另外一个大脑。两个大脑管理同一套资源,就可能有不一致的地方。 要解决这个问题,我们就要保存Yarn自身的各种状态,比如都收到了哪些任务,各个任务都执行到了什么状态,收到了哪些安全许可。这些东西保存在Resource
Manager State Store里。 Resource
Manager State Store自己怎么管理呢。好几种办法,存在内存,存在文件,或者另外一个更容易的办法就是Zookeeper了。 Zookeeper控制着什么时候,谁可以读写这个Resource
Manager State Store。Zookeeper自己也是个cluster,它也是Fault
Tolerance(容错)的,我们就省去了自己管理这个资源的各种麻烦。 Zookeeper保存着它所管理的系统的各种状态,可以保证任何时候都只有一个版本的系统状态。即便是Yarn的Master坏了,重启了,正在升级,也不会出现冲突。所以说起来,Yarn和Zookeeper的功能是不一样的,对于一套完整的系统,两者都需要使用。
总结
YARN相当于政府,负责管理机器资源的分配,有困难找政府,政府安排人力物力来解决你的问题。这个才是你说的管理节点。
Zookeeper相当于立法委员会,目标是提供权威的信息给这个国家所有的人。Zookeeper关注的主要是信息的一致性,管理一些需要在所有人心中保持一致的信息。