基于事件驱动的YARN并发模型

Posted 360企业安全基础大数据部

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于事件驱动的YARN并发模型相关的知识,希望对你有一定的参考价值。


YARN作为Hadoop 2.x中的统一资源管理系统,具有可靠性强、资源利用率高、支持多种不同的计算框架等优点。随着集群规模的不断扩大及计算框架的推陈出新,YARN需要管理的资源和支持的计算框架越来越多,如何高效的分配和管理系统资源成为了YARN中必须解决的问题。

本文着重介绍YARN中的并发编程模型,采用基于事件驱动的方式异步高效的实现资源的分配管理。

原理

YARN中将各种业务处理逻辑抽象成事件Event和对应的事件处理器EventHandler;对于一些处理过程比较复杂的事件类型,进一步细分成不同的状态及状态间的转移,用有限状态机StateMachine表示。下图为YARN中的事件驱动处理模型。

基于事件驱动的YARN并发模型


整个并发处理流程为:各种类型的处理请求以事件的形式进入系统事件队列EventQueue中,由中央异步调度器AsyncDispatcher中的HandlerThread负责将事件event传递给对应的事件处理器EventHandler;该事件处理器可能将事件转发给带有限状态机的事件处理器,处理结果也以事件的形式输出到中央异步调度器。新产生的事件会被中央异步调度器重新调度从而转发给下一个事件处理器,直至达到终止条件。

YARN中的所有核心服务都是一个中央异步调度器,包括ResourceManager,NodeManager, ApplicationMaster等,它们维护了事先注册的事件及对应的事件处理器,然后根据接收的事件类型驱动服务的运行。中央异步调度器、事件、事件处理器的UML如下:

基于事件驱动的YARN并发模型

事件驱动模型优势

在MRv1中,对象之间通过直接的函数调用来完成程序逻辑,整个执行过程是串行的。比如,TaskTracker需要执行一个Task时,首先下载Task依赖的文件,然后执行Task, 同时在整个过程中会记录一些关键日志信息。Task执行过程如图:

基于事件驱动的YARN并发模型


在task执行过程中,依赖文件的下载是阻塞式的,下载未完成之前后面的任务将一直处于等待状态,只有文件下载完成后才能启动一个独立的新进程运行该task。在大规模分布式系统中,这种阻塞式的函数调用方式将严重制约集群的扩展和业务的快速处理。

相比之下,YARN中引入的事件驱动编程模型则是一种高效的并发模型,在该模型中,业务对象被抽象成了事件处理器,各事件处理器之间通过事件相互关联。每种事件处理器处理一种类型的事件,同时根据需要触发新的事件。

基于事件驱动的YARN并发模型


当A需要下载文件时,只需向中央异步处理器发送一个文件下载事件即可,之后便可继续处理后续的功能而无须等待下载完成,文件下载事件会被中央异步处理器传递给对应的事件处理器B,由B完成具体的下载任务。一旦B完成下载任务,便可以通过事件通知A。

总结

YARN的基于事件驱动的并发编程模型实现了异步高效的业务处理功能,同时各对象之间的作用关系更加简单清晰,使得YARN具有低耦合、高内聚的特点。各模块只需完成各自的功能,模块之间采用事件联系起来,系统设计简单且维护方便,适于大型分布式系统的设计和开发。

参考

[1] http://blog.csdn.net/gjt19910817/article/details/43441801
[2] http://x-rip.iteye.com/blog/1535479
[3] https://segmentfault.com/a/1190000002965631
[4] https://www.cnblogs.com/smartloli/p/4669968.html
[5] http://dongxicheng.org/mapreduce-nextgen/resourcemanager-code-structure/
[6] http://dongxicheng.org/mapreduce-nextgen/yarnmrv2-node-manager-container-state-machine/


以上是关于基于事件驱动的YARN并发模型的主要内容,如果未能解决你的问题,请参考以下文章

Python并发编程-事件驱动模型

Python并发编程-事件驱动模型

11.python并发入门(part13 了解事件驱动模型))

Yarn中的几种状态机

Yarn中的几种状态机

对 Node.js 事件驱动模型的深入理解