用一个例子了解Yarn和Zookeeper之间是什么关系

Zookeeper和Yarn是一起工作的,它们一起管理资源。

举例说明
在一个分布式系统上。现在有个事要办。我们要找这个系统办这个事,就要通知yarn。打个比方,yarn的master node看看这个系统里有很多node,看看谁有空,谁有能力(cpu、内存、等)来干这个事。然后把任务分配给合适的node来办这个事。 这个时候系统面临一个危险。那就是在分布式系统中,failure成为常态。yarn master node管理着很多个node,管理着它们哪一个出问题了。

危险在于master自己坏了怎么办。
常见的分布式系统出问题的解决办法是我们总保持有一个待命的,到需要的时候顶上。yarn里的ResourceManager也有待命的。当一个ResourceManager坏了,或者需要升级更新,另一个ResourceManager要接手。

这时候麻烦来了,新的ResourceManager怎么知道哪个任务已经完成,哪个还没有,用户想执行的任务到什么状态了,一个任务所必须的先决条件任务是否已经完成。
这个情形中,Yarn自己成了Single point of failure。 新启动的ResourceManager成了这个分布式系统的另外一个大脑。两个大脑管理同一套资源,就可能有不一致的地方。 要解决这个问题,我们就要保存Yarn自身的各种状态,比如都收到了哪些任务,各个任务都执行到了什么状态,收到了哪些安全许可。这些东西保存在Resource Manager State Store里。 ResourceManager State Store自己怎么管理呢。好几种办法,存在内存,存在文件,

或者另外一个更容易的办法就是Zookeeper了。
Zookeeper控制着什么时候,谁可以读写这个ResourceManager State Store。Zookeeper自己也是个cluster,它也是Fault Tolerance(容错)的,我们就省去了自己管理这个资源的各种麻烦。 Zookeeper保存着它所管理的系统的各种状态,可以保证任何时候都只有一个版本的系统状态。即便是Yarn的Master坏了,重启了,正在升级,也不会出现冲突。所以说起来,Yarn和Zookeeper的功能是不一样的,对于一套完整的系统,两者都需要使用。

你可能感兴趣的:(用一个例子了解Yarn和Zookeeper之间是什么关系)