摘要:博客原文采用了基于事件驅動的并發模型該模型能極大的提高應用程序并發性在中幾乎所有的事件都通過進行事件的派發其基本架構圖如下從基本的架構圖可以簡單的看出該模型還需要幾個基本的要素那就是事件事件類型和處理事件對應的處理器在中事件被定義如下事件類
博客原文:hackershell
YARN采用了基于事件驅動的并發模型,該模型能極大的提高應用程序并發性,在RM中,幾乎所有的事件都通過AsyncDispatcher進行事件的派發.
其基本架構圖如下:
從基本的架構圖可以簡單的看出,該模型還需要幾個基本的要素,那就是事件(Event),事件類型(EventType)和處理事件對應的處理器(Handler).
在HADOOP中,事件被定義如下:
public interface Event> { TYPE getType(); long getTimestamp(); String toString(); }
事件類型(EventType)則是簡單的枚舉類
主要功能定義事件有哪幾種類型:
public enum NodesListManagerEventType { NODE_USABLE, NODE_UNUSABLE }
處理事件的接口
主要功能處理相應的事件
public interface EventHandler{ void handle(T event); }
Dispatcher通過不同的事件類型(EventType)找到相應的handler對事件(event)進行處理.
對于AsyncDispatcher來說,它實現了Dispatcher接口:
public interface Dispatcher { EventHandler getEventHandler(); void register(Class extends Enum> eventType, EventHandler handler); }
其中有兩個基本的方法,register和getEventHandler
register在AsyncDispatcher使用之前就需要先注冊eventType和對應的EventHandler,而getEventHandler方法主要則是把事件(event)放入eventQueue中.
接下來在ResourceManager舉個簡單的例子:
在RM初始化自身基本服務的時候,會把相應的事件類型(EventType)和事件處理器(EventHandler),先注冊在AsyncDispatcher上,以便于派發器在事件(event)到來時做出相應的處理.
RM的部分代碼:
// Register event handler for RmNodes this.rmDispatcher.register(RMNodeEventType.class, new NodeEventDispatcher(this.rmContext));
其實注冊也就是把相應的類型和處理器放到一個HashMap中
因為是資源管理方面的服務,所以我們進入ResourceTrackerService類中,找到nodesListManager這個實例,通過代碼可以知道nodesListManager是用來管理節點是否可用,并作出相應的處理
// 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; }
從代碼可以看出,如果節點是非法的,則從Dispatcher獲取Handler,并構造一個RMNodeEventType.DECOMMISSION類型的事件,這個RMNodeEvent將會被放到eventQueue中
class GenericEventHandler implements EventHandler{ public void handle(Event event) { try { eventQueue.put(event); } catch (InterruptedException e) { } }; }
最后由dispatch進行通過傳入的RMNodeEventType找到相應的NodeEventDispatcher(即EventHandler),并調用handle進行處理.
總結:
通過了解AsyncDispatcher可以提升自己理解Yarn的工作流程,加深對Yarn的設計實現的了解.
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64370.html
摘要:包括等,它們共同維護了一個事件與事件處理器的映射表,用來處理各個事件。例如內部包含一個中央異步調度器,并注冊了等一系列事件事件處理器,由中央異步調度器統一管理和調度。當狀態機轉換到最終狀態時,則退出。 大數據夢工廠( 0011 - YARN核心設計解析)1 - YARN RPC架構設計YARN RPC Serv...
摘要:由于文件中版本號的特點,下面三個版本號在安裝的時候代表不同的含義。安裝版本統一為了防止拉取到不同的版本,有一個鎖定文件記錄了被確切安裝上的模塊的版本號。 showImg(https://segmentfault.com/img/bVbs8Rg?w=1920&h=1080); 一位用不好包管理器的前端,是一個入門級前端,一個用不好webpack的前端,是一個初級前端 三個包管理器是可以一...
閱讀 6912·2021-09-22 15:08
閱讀 1920·2021-08-24 10:03
閱讀 2437·2021-08-20 09:36
閱讀 1315·2020-12-03 17:22
閱讀 2474·2019-08-30 15:55
閱讀 905·2019-08-29 16:13
閱讀 3053·2019-08-29 12:41
閱讀 3249·2019-08-26 12:12