在Hadoop中,调度框架YARN(Yet Another Resource Negotiater)是基于事件的,调度的是MapReduce的Application。Application有一系列的状态变化(NEW/NEW_SAVING/SUBMITTED/ACCEPTED/RUNNING/FINISHED/FAILED/KILLED ),即基于状态机的变换(设计模式State Pattern),状态之间的变换通过事件触发。

①对AsyncDispatcher的介绍

核心类AsyncDispatcher:异步事件分发器(Yarn中最底层的总管道)

AsyncDispatcher extends AbstractService implements Dispatcher {

  主要的属性

  (1)事件队列:    BlockingQueue<Event> eventQueue;

  (2)事件分发器:   Map<Class<? extends Enum>, EventHandler> eventDispatchers

  (3)处理事件的线程  Thread eventHandlingThread

  主要的方法

    1、从eventQueue中取出事件以及处理事件

  (1)createThread():返回一个Runnable对象,该线程类对象有一个while循环,不断eventQueue中取出事件(RM启动之后),event = eventQueue.take();然后将事件分发出去dispatch(event)。

  (2)dispatch(event):首先得到事件的类型,然后从eventDispatchers中根据事件类型得到相应的事件处理器EventHandler,然后EventHandler.handle(event)对事件进行处理。

    2、向eventQueue中添加事件

    AsyncDispatcher 的内部类GenericEventHandler implements EventHanler的handle(event)方法向eventQueue中添加事件eventQueue.put(event);

}

②Yarn对事件的二次分发

事件分发,分两次完成。第一次是eventHandlingThread轮询出事件之后,由AsyncDispatcher的dispatch方法进行分发,第二次分发会调用相应的分发器,比如 ApplicationEventDispatcher,ApplicationEventDispatcher自己没有处理这个事件,而是将事件交给了RMApp,RMApp的实现类RMAppImpl.handle(event)最终处理了事件。

RMAppImpl的handler(event)方法,这个方法是不断重复执行的,:

  this.writeLock.lock();

  /* keep the master in sync with the state machine 进行状态机的转换*/

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

  this.writeLock.unlock();

RMAppImpl的handler(event)不断变换状态机的状态,即handler被调用多次,从NEW状态开始不断变换。RM应用的状态如下所示。

public enum RMAppState {

NEW,

NEW_SAVING,

SUBMITTED,

ACCEPTED,

RUNNING,

FINAL_SAVING,

FINISHING,

FINISHED,

FAILED,

KILLING,

KILLED

}

③ResourceManager类中的Dispatcher

存在不同的事件,每种事件具有不同的类型,同一类型的事件交给一个XXXEventDispatcher(ResourceManager中定义了许多Dispatcher内部类),XXXEventDispatcher将事件交给真正的事件处理实体进行处理。

Yarn源码分析1(Hadoop2.7.2)的更多相关文章

  1. Yarn源码分析之如何确定作业运行方式Uber or Non-Uber?

    在MRAppMaster中,当MapReduce作业初始化时,它会通过作业状态机JobImpl中InitTransition的transition()方法,进行MapReduce作业初始化相关操作,而 ...

  2. Yarn源码分析之MRAppMaster上MapReduce作业处理总流程(二)

    本文继<Yarn源码分析之MRAppMaster上MapReduce作业处理总流程(一)>,接着讲述MapReduce作业在MRAppMaster上处理总流程,继上篇讲到作业初始化之后的作 ...

  3. Yarn源码分析之MRAppMaster上MapReduce作业处理总流程(一)

    我们知道,如果想要在Yarn上运行MapReduce作业,仅需实现一个ApplicationMaster组件即可,而MRAppMaster正是MapReduce在Yarn上ApplicationMas ...

  4. YARN源码分析(一)-----ApplicationMaster

    转自:http://blog.csdn.net/androidlushangderen/article/details/48128955 YARN学习系列:http://blog.csdn.net/A ...

  5. Yarn源码分析之事件异步分发器AsyncDispatcher

    AsyncDispatcher是Yarn中事件异步分发器,它是ResourceManager中的一个基于阻塞队列的分发或者调度事件的组件,其在一个特定的单线程中分派事件,交给AsyncDispatch ...

  6. Yarn源码分析之MapReduce作业中任务Task调度整体流程(一)

    v2版本的MapReduce作业中,作业JOB_SETUP_COMPLETED事件的发生,即作业SETUP阶段完成事件,会触发作业由SETUP状态转换到RUNNING状态,而作业状态转换中涉及作业信息 ...

  7. Yarn源码分析之MRAppMaster:作业运行方式Local、Uber、Non-Uber

    基于作业大小因素,MRAppMaster提供了三种作业运行方式:本地Local模式.Uber模式.Non-Uber模式.其中, 1.本地Local模式:通常用于调试: 2.Uber模式:为降低小作业延 ...

  8. Yarn源码分析之参数mapreduce.job.reduce.slowstart.completedmaps介绍

    mapreduce.job.reduce.slowstart.completedmaps是MapReduce编程模型中的一个参数,这个参数的含义是,当Map Task完成的比例达到该值后才会为Redu ...

  9. Hadoop2源码分析-YARN 的服务库和事件库

    1.概述 在<Hadoop2源码分析-YARN RPC 示例介绍>一文当中,给大家介绍了YARN 的 RPC 机制,以及相关代码的演示,今天我们继续去学习 YARN 的服务库和事件库,分享 ...

随机推荐

  1. Flutter - 左右侧滑菜单:drawer和endDrawer

    侧滑菜单可以从左面滑出,也可以从右面滑出.在Scaffold中有drawer和endDrawer两个参数,分别对应左边的菜单和右边的菜单. drawer: new Drawer( child: new ...

  2. JS ,substr、 substring、charAt方法的区别

    JS 截取字符串substr 和 substring方法的区别,需要的朋友可以参考下,根据需要自行选择. substr 方法 返回一个从指定位置开始的指定长度的子字符串. stringvar.subs ...

  3. java基础解析系列(三)---HashMap

    java基础解析系列(三)---HashMap java基础解析系列 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析系列(二)-- ...

  4. 使用scrapy框架的monkey出现monkeypatchwarning: monkey-patching ssl after ssl...的解决办法

    问题描述:  环境情况: pycharm 2016.1.4———-python 3.6.0——–windows10系统 在scrapy爬虫框架中, 使用协程gevent中的monkey时, 可能会出现 ...

  5. [Codeforces-888C] - K-Dominant Character

    C. K-Dominant Character time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  6. 在HTML中引用JavaScript中的变量

    和上次的代码几乎一样,但这次是引用已经写好的变量.主要功能和用法如下: document对象的getElementId方法得到HTML元素. HTML元素的value属性可以用来设置变量的值. 02. ...

  7. Markdown 版本演进

    本文作为 Markdown 系列的第二篇,对上一篇使用 Markdown 写技术博客,我踩过的 6个坑博客提到的版本变迁进行简要的提纲说明. 如果不想读文章,请直接看思维导图,使用 Atom + ma ...

  8. 方正 ignb路由器设置备份(自用笔记)

    192.168.15.96255.255.255.0192.168.15.1219.232.46.61219.141.136.10

  9. Xcode中的Target

    Xcode中的Target,主要包含下面几点知识: Target依赖 Build Phase Build Rule Target依赖 Target的依赖关系表示一个Target要构建成功,必先依赖于其 ...

  10. 第十二周作业_PSP总结报告

    回顾1 (1)回想一下你曾经对计算机专业的畅想 当初你是如何做出选择计算机专业的决定的?经过一个学期,你的看法改变了么,为什么? 你认为过去接触到的课程是否符合你对计算机专业的期待,为什么?经过一个学 ...