yarn採用了基於事件驅動的併發模型,該模型能夠大大增強併發性,從而提高系統整體效能。為了構件模型,yarn將各種處理邏輯抽象成事件和對應事件排程器,並將每類事件的處理過程分割成多個步驟,用有限狀態機表示。yarn中的事件處理模型可概括為下圖所示。
整個處理過程大致為:處理請求會作為事件進入系統,由**非同步排程器(asyncdispatcher)負責傳遞給相應事件排程器(event handler)。該事件排程器可能將該事件**給另外乙個事件排程器,也可能交給乙個帶有有限狀態機的事件處理器,其處理結果也以事件的形式輸出給**非同步排程器。而新的事件會再次被**非同步排程器**給下乙個事件排程器,直至處理完成(達到終止條件)。
yarn服務庫和事件庫的使用方法
為了說明yarn服務庫和事件庫的使用方法,舉例如下。
1)定義task事件
package com.event;
import org.apache.hadoop.yarn.event.abstractevent;
public class
taskevent
extends
abstractevent
public string gettaskid()
}
其中,task事件型別定義如下:
package com.event;
public
enum taskeventtype
2)定義job事件
package com.event;
import org.apache.hadoop.yarn.event.abstractevent;
public class
jobevent
extends
abstractevent
public string getjobid()
}
其中,job事件型別定義如下:
package com.event;
public
enum jobeventtype
3)事件排程器。
接下來定義乙個**非同步排程器,它接收job和task兩種型別事件,並交給對應的事件處理器處理。
package com.event;
import org.apache.hadoop.conf.configuration;
import org.apache.hadoop.service.compositeservice;
import org.apache.hadoop.service.service;
import org.apache.hadoop.yarn.event.asyncdispatcher;
import org.apache.hadoop.yarn.event.dispatcher;
import org.apache.hadoop.yarn.event.eventhandler;
@suppresswarnings("unchecked")
public
private dispatcher dispatcher ; // **非同步排程器
private string jobid ;
private
int tasknumber ; //該作業包含的任務數目
private string taskids; //該作業內部包含的所有任務
public
super(name) ;
this.jobid = jobid ;
this.tasknumber = tasknumber ;
taskids = new string[tasknumber] ;
for(int i=0 ; inew string(jobid + "_task_" + i) ;}}
public
void
serviceinit(final configuration conf) throws exception
public dispatcher getdispatcher()
private
class jobeventdispatcher implements eventhandler
}else
if(event.gettype() == jobeventtype.job_init)}}
}private
class taskeventdispatcher implements eventhandlerelse
if(event.gettype() == taskeventtype.t_schedule)}}
}
4)測試程式
package com
.event
;import org.apache
.hadoop
.conf
.configuration
;import org.apache
.hadoop
.yarn
.conf
.yarnconfiguration
; public static void main(string args) throws exception
}
解釋一下程式:
主函式表示往**非同步處理器放入了兩個jobeventtype型別的事件jobeventtype.job_kill和jobeventtype.job_init。
**非同步處理器根據註冊情況即可知曉什麼型別的事件發往什麼型別的排程器
//分別註冊job和task事件排程器
dispatcher.register(jobeventtype.class, new jobeventdispatcher()) ;//jobeventtype型別的事件發往jobeventdispatcher排程器
dispatcher.register(taskeventtype.class, new taskeventdispatcher()) ;//taskeventtype型別的事件發往taskeventdispatcher排程器
jobeventtype.job_kill和jobeventtype.job_init都是jobeventtype型別的事件,呼叫jobeventdispatcher的handler方法,該方法根據事件型別,往**非同步排程器新增型別為taskeventtype型別的事件taskeventtype.t_kill和taskeventtype.t_schedule。
**非同步處理器將事件taskeventtype.t_kill和taskeventtype.t_schedule發往 taskeventdispatcher,呼叫該排程器的handler方法進行處理。
流程如下圖所示:
Yarn中的服務庫和事件庫及其使用
在yarn的服務元件中,其resourcemanager和nodemanager上擁有多個服務並對外提供,並且resourcemanager和nodemanager上需要響應各種客戶端的併發請求,以及其內部維護的任務和資源狀態流轉。所以在resourcemanager和nodemanager的源 設...
事件模型和標準庫
監聽函式 監聽函式是事件發生時,程式所要執行的函式。它是事件驅動程式設計模式的主要程式設計方式。在dom中提供三種方法為事件繫結監聽函式。html標籤的on 屬性 html語言允許在元素標籤的屬性中,直接定義某些事件的監聽 事件型別的種類 滑鼠事件 事件冒泡和捕獲 滑鼠事件 click事件 dblc...
ASIHTTPRequest類庫簡介和使用說明
官方 asihttprequest功能很強大,主要特色如下 安裝說明 新增asihttprequest相關檔案到xcode專案中,所需檔案列表如下 reachability.h 在原始碼的 external reachability 目錄下 reachability.m 在原始碼的 external...