Hadoop NodeManager
YARN - NodeManager
Node節點下的Container管理
啓動時向ResourceManager註冊並定時發送心跳消息,等待ResourceManager的指令
監控Container的運行,維護Container的生命週期,監控Container的資源使用情況
啓動或停止Container,管理任務運行時的依賴包(根據ApplicationMaster的需要,啓動Container之前將需要的程序及其依賴包、配置文件等拷貝到本地)
內部結構
NodeStatusUpdater: 啓動向ResourceManager註冊,報告該節點的可用資源情況,通信的端口和後續狀態的維護
ContainerManager: 接收RPC請求(啓動、停止),資源本地化(下載應用需要的資源到本地,根據需要共享這些資源)
PUBLIC: /filecache
PRIVATE: /usercache//filecache
APPLICATION: /usercache//appcache//(在程序完成後會被刪除)
ContainersLauncher: 加載或終止Container
ContainerMonitor: 監控Container的運行和資源使用情況
ContainerExecutor: 和底層操作系統交互,加載要運行的程序
Hadoop ApplicationMaster
YARN - ApplicationMaster
單個作業的資源管理和任務監控
具體功能描述:
計算應用的資源需求,資源可以是靜態或動態計算的,靜態的一般是Client申請時就指定了,動態則需要ApplicationMaster根據應用的運行狀態來決定
根據數據來申請對應位置的資源(Data Locality)
向ResourceManager申請資源,與NodeManager交互進行程序的運行和監控,監控申請的資源的使用情況,監控作業進度
跟蹤任務狀態和進度,定時向ResourceManager發送心跳消息,報告資源的使用情況和應用的進度信息
負責本作業內的任務的容錯
ApplicationMaster可以是用任何語言編寫的程序,它和ResourceManager和NodeManager之間是通過ProtocolBuf交互,以前是一個全局的JobTracker負責的,現在每個作業都一個,可伸縮性更強,至少不會因爲作業太多,造成JobTracker瓶頸。同時將作業的邏輯放到一個獨立的ApplicationMaster中,使得靈活性更加高,每個作業都可以有自己的處理方式,不用綁定到MapReduce的處理模式上
如何計算資源需求
一般的MapReduce是根據block數量來定Map和Reduce的計算數量,然後一般的Map或Reduce就佔用一個Container
如何發現數據的本地化
數據本地化是通過HDFS的block分片信息獲取的