NodeManager启动流程与服务
本文介紹了NodeManager的啟動流程與服務.
NodeManager主流程
????? 在main方法中new一個 NodeManager, 然后初始化并啟動.
?????? 這里主要看initAndStartNodeManager方法.
?????? 首先是增加一個shutDownHook, 即CompositeServiceShutdownHook, 它的目的是為了在NodeManager crash的時候停止compositeService (它維護了nodeManager上所有的service列表).
然后初始化, init(conf):
1. 如果配置了安全選項, 則需初始化containerTokenSecretManager.
2. 初始化ContainerExecutor, 顧名思義, ContainerExecutor封裝了nodeManager對Container操作的各種方法, 包括啟動container, 查詢指定id的container是否活著,等操作. 根據配置yarn.nodemanager.container-executor.class決定ContainerExecutor的實例, 默認為DefaultContainerExecutor.
3. New DeletionService, 用于刪除用戶文件 …..
4. New AsyncDispatcher, 和RM的AsyncDispatcher一樣. 異步分發器.
5. New NodeHealthCheckerService, 一個服務, 可以通過此服務查詢node是否健康, 當前node的健康狀態包括nodeHealthScriptRunner.isHealthy和dirsHandler.areDisksHealthy
6. 創建NodeStatusUpdater線程, 負責向RM注冊和發送心跳(更新狀態). 這里使用ResourceTracker協議向RM通信, 底層為YarnRPC. ResourceTracker接口提供了兩個方法; 提供注冊和心跳功能.
7. NodeResourceMonitor服務, 繼承于AbstractService, 沒有自己定義方法. 監控node的資源(即資源是否可用, 四種狀態, stopped, inited, notinited, started)
8. 創建ContainerManagerImpl服務, 管理container, 啟動20個RPC處理線程, 使用ContainerManager協議, ContainerManager協議為APP向NodeManager通信的協議, 提供了三個方法:
注意, 這里獲取container的狀態包括NEW, RUNNING, COMPLETE. 而container的進度信息其實是有container直接向AM匯報的.
9. 創建webServer, 啟動NodeManager的web服務. 通過yarn.nodemanagerwebapp.address設置地址, 默認端口為8042.
10. 初始化Metrics
轉載請注明出處(http://www.cnblogs.com/shenh062326/archive/2012/11/24/NodeManager.html)
轉載于:https://www.cnblogs.com/shenh062326/archive/2012/11/24/NodeManager.html
總結
以上是生活随笔為你收集整理的NodeManager启动流程与服务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Effective C++ 读书笔记(八
- 下一篇: 第一章:The Missing Code