国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

YARN的AsyncDispatcher原理

BoYang / 2138人閱讀

摘要:博客原文采用了基于事件驅(qū)動(dòng)的并發(fā)模型該模型能極大的提高應(yīng)用程序并發(fā)性在中幾乎所有的事件都通過進(jìn)行事件的派發(fā)其基本架構(gòu)圖如下從基本的架構(gòu)圖可以簡單的看出該模型還需要幾個(gè)基本的要素那就是事件事件類型和處理事件對應(yīng)的處理器在中事件被定義如下事件類

博客原文:hackershell

YARN采用了基于事件驅(qū)動(dòng)的并發(fā)模型,該模型能極大的提高應(yīng)用程序并發(fā)性,在RM中,幾乎所有的事件都通過AsyncDispatcher進(jìn)行事件的派發(fā).

其基本架構(gòu)圖如下:

從基本的架構(gòu)圖可以簡單的看出,該模型還需要幾個(gè)基本的要素,那就是事件(Event),事件類型(EventType)和處理事件對應(yīng)的處理器(Handler).

在HADOOP中,事件被定義如下:

public interface Event> {

  TYPE getType();
  long getTimestamp();
  String toString();
}

事件類型(EventType)則是簡單的枚舉類

主要功能定義事件有哪幾種類型:

public enum NodesListManagerEventType {
  NODE_USABLE,
  NODE_UNUSABLE
}

處理事件的接口

主要功能處理相應(yīng)的事件

public interface EventHandler {
  void handle(T event);
}

Dispatcher通過不同的事件類型(EventType)找到相應(yīng)的handler對事件(event)進(jìn)行處理.

對于AsyncDispatcher來說,它實(shí)現(xiàn)了Dispatcher接口:

public interface Dispatcher {
  EventHandler getEventHandler();
  void register(Class eventType, EventHandler handler);
}

其中有兩個(gè)基本的方法,registergetEventHandler

register在AsyncDispatcher使用之前就需要先注冊eventType和對應(yīng)的EventHandler,而getEventHandler方法主要?jiǎng)t是把事件(event)放入eventQueue中.

接下來在ResourceManager舉個(gè)簡單的例子:

在RM初始化自身基本服務(wù)的時(shí)候,會(huì)把相應(yīng)的事件類型(EventType)和事件處理器(EventHandler),先注冊在AsyncDispatcher上,以便于派發(fā)器在事件(event)到來時(shí)做出相應(yīng)的處理.

RM的部分代碼:

// Register event handler for RmNodes
this.rmDispatcher.register(RMNodeEventType.class,
    new NodeEventDispatcher(this.rmContext)); 

其實(shí)注冊也就是把相應(yīng)的類型和處理器放到一個(gè)HashMap

因?yàn)槭琴Y源管理方面的服務(wù),所以我們進(jìn)入ResourceTrackerService類中,找到nodesListManager這個(gè)實(shí)例,通過代碼可以知道nodesListManager是用來管理節(jié)點(diǎn)是否可用,并作出相應(yīng)的處理

// 2. Check if it"s a valid (i.e. not excluded) node
    if (!this.nodesListManager.isValidNode(rmNode.getHostName())) {
      String message =
          "Disallowed NodeManager nodeId: " + nodeId + " hostname: "
              + rmNode.getNodeAddress();
      LOG.info(message);
      shutDown.setDiagnosticsMessage(message);
      this.rmContext.getDispatcher().getEventHandler().handle(
          new RMNodeEvent(nodeId, RMNodeEventType.DECOMMISSION));
      return shutDown;
    }

從代碼可以看出,如果節(jié)點(diǎn)是非法的,則從Dispatcher獲取Handler,并構(gòu)造一個(gè)RMNodeEventType.DECOMMISSION類型的事件,這個(gè)RMNodeEvent將會(huì)被放到eventQueue中

class GenericEventHandler implements EventHandler {
    public void handle(Event event) {
      try {
        eventQueue.put(event);
      } catch (InterruptedException e) {

      }
    };
  }

最后由dispatch進(jìn)行通過傳入的RMNodeEventType找到相應(yīng)的NodeEventDispatcher(即EventHandler),并調(diào)用handle進(jìn)行處理.

總結(jié):
通過了解AsyncDispatcher可以提升自己理解Yarn的工作流程,加深對Yarn的設(shè)計(jì)實(shí)現(xiàn)的了解.

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/64370.html

相關(guān)文章

  • 0011 - YARN核心設(shè)計(jì)解析

    摘要:包括等,它們共同維護(hù)了一個(gè)事件與事件處理器的映射表,用來處理各個(gè)事件。例如內(nèi)部包含一個(gè)中央異步調(diào)度器,并注冊了等一系列事件事件處理器,由中央異步調(diào)度器統(tǒng)一管理和調(diào)度。當(dāng)狀態(tài)機(jī)轉(zhuǎn)換到最終狀態(tài)時(shí),則退出。 大數(shù)據(jù)夢工廠( 0011 - YARN核心設(shè)計(jì)解析)1 - YARN RPC架構(gòu)設(shè)計(jì)YARN RPC Serv...

    KoreyLee 評論0 收藏0
  • 前端核心工具:yarn、npm、cnpm三者如何優(yōu)雅在一起使用 ?

    摘要:由于文件中版本號的特點(diǎn),下面三個(gè)版本號在安裝的時(shí)候代表不同的含義。安裝版本統(tǒng)一為了防止拉取到不同的版本,有一個(gè)鎖定文件記錄了被確切安裝上的模塊的版本號。 showImg(https://segmentfault.com/img/bVbs8Rg?w=1920&h=1080); 一位用不好包管理器的前端,是一個(gè)入門級前端,一個(gè)用不好webpack的前端,是一個(gè)初級前端 三個(gè)包管理器是可以一...

    sihai 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<