Hadoop NodeManager&Hadoop ApplicationMaste

Hadoop NodeManager

YARN - NodeManager

Node節點下的Container管理

  1. 啓動時向ResourceManager註冊並定時發送心跳消息,等待ResourceManager的指令

  2. 監控Container的運行,維護Container的生命週期,監控Container的資源使用情況

  3. 啓動或停止Container,管理任務運行時的依賴包(根據ApplicationMaster的需要,啓動Container之前將需要的程序及其依賴包、配置文件等拷貝到本地)

內部結構


  • NodeStatusUpdater: 啓動向ResourceManager註冊,報告該節點的可用資源情況,通信的端口和後續狀態的維護

  • ContainerManager: 接收RPC請求(啓動、停止),資源本地化(下載應用需要的資源到本地,根據需要共享這些資源)

    PUBLIC: /filecache

    PRIVATE: /usercache//filecache

    APPLICATION: /usercache//appcache//(在程序完成後會被刪除)

  • ContainersLauncher: 加載或終止Container

  • ContainerMonitor: 監控Container的運行和資源使用情況

  • ContainerExecutor: 和底層操作系統交互,加載要運行的程序

Hadoop ApplicationMaster

YARN - ApplicationMaster

單個作業的資源管理和任務監控

具體功能描述:

  1. 計算應用的資源需求,資源可以是靜態或動態計算的,靜態的一般是Client申請時就指定了,動態則需要ApplicationMaster根據應用的運行狀態來決定

  2. 根據數據來申請對應位置的資源(Data Locality)

  3. 向ResourceManager申請資源,與NodeManager交互進行程序的運行和監控,監控申請的資源的使用情況,監控作業進度

  4. 跟蹤任務狀態和進度,定時向ResourceManager發送心跳消息,報告資源的使用情況和應用的進度信息

  5. 負責本作業內的任務的容錯

ApplicationMaster可以是用任何語言編寫的程序,它和ResourceManager和NodeManager之間是通過ProtocolBuf交互,以前是一個全局的JobTracker負責的,現在每個作業都一個,可伸縮性更強,至少不會因爲作業太多,造成JobTracker瓶頸。同時將作業的邏輯放到一個獨立的ApplicationMaster中,使得靈活性更加高,每個作業都可以有自己的處理方式,不用綁定到MapReduce的處理模式上

如何計算資源需求

一般的MapReduce是根據block數量來定Map和Reduce的計算數量,然後一般的Map或Reduce就佔用一個Container

如何發現數據的本地化

數據本地化是通過HDFS的block分片信息獲取的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章