文档章节

事件驱动和状态机模式在YARN中的使用

彭苏云
 彭苏云
发布于 2014/08/20 12:26
字数 567
阅读 176
收藏 0

阅读了下YARN的源码,架构中设计模式除了服务生命周期管理模式外,还包括事件驱动和状态机模式。生命周期管理模式在容器设计时候比较常见,包括资源模型的加载,卸载等等,比如tomcatjboss等开源产品。

这里重点讲一下事件驱动和状态机模式的使用。

从提交任务到任务处理完成,YARN架构中整个任务的处理过程的设计都是事件驱动和状态机器的模式。

对于事件驱动模式,对象包括事件类型EventType、事件对象Event、事件分发器Dispatcher、事件处理器EventHandler,每种事件都有对应的事件处理器注册在Dispatcher中,YARN中的事件分发器AsyncDispatcher是异步处理的事件的(事件发送到queue中,单独线程从队列中取event,根据事件类型取对应的EventHandler进行处理)EventHandler处理逻辑中也可以包括发送下一个事件。

对于状态机模式,基本做法是

根据发生的事件和当前状态,来执行下一步的动作action,并设置下一个状态,参见下图:

YARN中状态机对象StateMachine,涉及的对象包括事件操纵的对象OPERAND(状态机的宿主对象,对应到YARN中的RMAppImpl、RMAppAttemptImpl等等)、状态STATE事件Event、事件类型EventType

 

1、在宿主对象中构造状态机拓扑

StateMachineFactory<RMAppImpl,

                                           RMAppState,

                                           RMAppEventType,

                                           RMAppEvent> stateMachineFactory

                               = new StateMachineFactory<RMAppImpl,

                                           RMAppState,

                                           RMAppEventType,

                                           RMAppEvent>(RMAppState.NEW)

    .addTransition(RMAppState.NEW, RMAppState.NEW,

        RMAppEventType.NODE_UPDATEnew RMAppNodeUpdateTransition())

...............

     .installTopology();

 this.stateMachine = stateMachineFactory.make(this); 

 

2、在宿主对象中进行状态跳转控制逻辑(宿主对象是特殊的EventHandler)

输入是当前的状态currState和发生的事件Event,经过transition处理后,跳转到下一个状态

  this.stateMachine.doTransition(event.getType(), event);

 

3、状态转换处理逻辑,在事件逻辑处理中可以发送事件Event(事件EventAsyncDispacher异步分发,在EventHandler中调用状态机调整控制逻辑),进行下一次的状态迁移

public interface SingleArcTransition<OPERAND, EVENT> {

  /**

   * Transition hook.

   * 

   * @param  operand the entity attached to the FSM, whose internal 

   *                state may change.

   * @param  event causal event

   */

  public void transition(OPERAND operand, EVENT event);

}

参见下图,

 

本文转载自:http://blog.csdn.net/yangbutao/article/details/12652713

彭苏云
粉丝 44
博文 204
码字总数 54255
作品 0
广州
高级程序员
私信 提问
Spark在不同集群中的运行架构

Spark注重建立良好的生态系统,它不仅支持多种外部文件存储系统,提供了多种多样的集群运行模式。部署在单台机器上时,既可以用本地(Local)模式运行,也可以使用伪分布式模式来运行;当以分...

姚兴泉
2018/08/07
0
0
Spark的运行架构分析(二)之运行模式详解

在上一篇博客 spark的运行架构分析(一)中我们有谈到Spark的运行模式是多种多样的,那么在这篇博客中我们来具体谈谈Spark的运行模式 本博客转载自https://blog.csdn.net/gamer_gyt/article...

lubin2016
2018/04/18
0
0
Hadoop YARN单点故障解决方案(HA)介绍

在Apache Hadoop 2.0的第一个稳定版本2.2.0中,资源管理系统YARN存在单点故障,且尚未解决。YARN ResourceManage HA的相关jira为YARN-149,目前正在火热开发中,但尚未公布将来的发布版本。由...

蓝狐乐队
2014/05/12
391
0
大数据学习~Hadoop初识三Yarn模式

我们都知道在如今的Hadoop中主要有三个重要的执行管理器。一个HDFS,一个MapReduce,还有就是我们今天要看的 YARN。 2.0以前的Hadoop 在2.0以前的hadoop中是没有Yarn这个模式管理的。大部分都是...

Mr_zebra
2018/06/29
7
0
Apache Flink源码解析 (三)Flink On Yarn (1) YarnSessionClusterEntrypoint

杂谈 有一段时间没有写技术博客了,正好之前花了一周的时间解决了一个Flink在Yarn上部署的问题,也将Flink在Yarn上运行的机制与源码了解了个大概。Flink在Yarn上部署涉及到的东西比较多,肯定...

铛铛铛clark
2018/06/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

MySQL-基于SELECT查询的UPDATE查询

我需要检查(从同一张表)基于日期时间的两个事件之间是否存在关联。 一组数据将包含某些事件的结束日期时间,另一组数据将包含其他事件的开始日期时间。 如果第一个事件在第二个事件之前完成...

javail
今天
64
0
将PostgreSQL数据库复制到另一台服务器

我正在将生产PostgreSQL数据库复制到开发服务器。 什么是最快,最简单的方法? #1楼 pg_dump the_db_name > the_backup.sql 然后将备份复制到您的开发服务器,并使用以下命令进行还原: ps...

技术盛宴
今天
55
0
[译]软件架构师之路

今天给大家带来一篇自己翻译的干货《软件架构师之路》。本周Github上升很快的项目。其内容对致力于成为软件架构师(不论前后端)的同学应该都会有极大的帮助。 项目地址: 中文地址 https://...

gamedilong
今天
55
0
聊聊artemis的ExpiryScanner

序 本文主要研究一下artemis的ExpiryScanner startExpiryScanner activemq-artemis-2.11.0/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl......

go4it
今天
57
0
MySQL概述

MySql主要概念 参考:https://snailclimb.gitee.io/javaguide/#/database/MySQL MySQL 是一种关系型数据库,在Java企业级开发中非常常用,因为 MySQL 是开源免费的,并且方便扩展。阿里巴巴数...

Las_Vegas
今天
66
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部