服務庫和事件庫介紹
使用示例
截圖預覽
下面開始今天的内容分享。
yarn對于生命周期較長的對象使用服務的對象模型進行管理,主要特點如下:
用于被服務化的對象包含4個狀态,他們分别是:被建立、已初始化、已啟動和已停止。源代碼位址在 org.apache.hadoop.service 的 service 接口中,内容如下所示:
通過閱讀代碼,我們可以看出,服務的對象它實作了接口service,并定義了最基本的服務狀态:建立、初始化、啟動以及停止。對于 abstractservice 類來說,它實作了 service 接口。
任何服務狀态的變化都可以觸發其他的動作,例如
這裡,我們會去觸發一個監聽動作,全局監聽狀态的改變,異常的捕捉監聽等。
可以通過組合的方式進行服務組合,這樣做的好處是便于統一去管理:在 yarn 中,如果是非組合服務,可以直接繼承 abstractservice 類,否則需繼承 compositeservice。
在 yarn 中,核心服務其本質就是一個中央異步排程器,包含有resourcemanager、 nodemanager、mrappmaster等内容,yarn 事件與事件處理器的關系在
org.apache.hadoop.yarn.event 中。在使用 yarn 事件庫的時候,需要先定義一個中央異步排程器
asyncdispatcher,它負責事件的處理與轉發,然後我們根據實際業務需求定義一系列事件 event 與事件處理器
eventhandler,并将事件注冊到中央異步排程器中用于完成事件統一管理和應用排程。流程如下圖所示:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcugzNxUTOwIDNxQDMxEzMy8CX3ATNxAjMvwVN0cjN2YzLcVTMwIzZvxmYvwVbvNmLzd2bsJmbj5CMzV2Zh1Wavw1LcpDc0RHaiojIsJye.png)
接下來,我們編寫示例代碼,去代碼中了解這部分流程。
首先是 jmrappmaster 類:
另外,還需要添加一些其他類,這些類以來可以在 hadoop 源碼工程中找到,這裡就不貼代碼了,大家可以到 hadoop 工程的源碼中找到對應的類,相關類名如下圖所示:
接下來是一個測試類,去測試一下我們所編寫的示例流程。
jmrappmastertest類:
在編寫完成相關流程代碼後,我們運作代碼來觀察整個流程,截圖如下所示:
在編寫這部分流程代碼時,可以參考 hadoop yarn
部分的工程源碼,通過運作調試代碼,掌握對事件庫和服務庫的流程,以及它們的工作機制。另外,在編寫的過程當中,最好将源碼的檔案引入到自己的工程,不要
單獨使用 jar 包的方式導入,由于我們是獨立運作某個子產品,需要改動源代碼的函數通路權限,若是直接引入 jar
包位址,會導緻函數修飾權限問題而不能運作,這裡大家在運作調試的時候注意即可。
這篇部落格就和大家分享到這裡,如果大家在研究學習的過程當中有什麼問題,可以加群進行讨論或發送郵件給我,我會盡我所能為您解答,與君共勉!