YARN基本框架介紹&Mapreduce的內存參數理解

YARN是一個資源管理、任務調度的框架,主要包含三大模塊:

  1. ResourceManager(RM):負責所有資源的監控、分配和管理
  2. NodeManager(NM):負責每一個節點的維護
  3. ApplicationMaster(AM):  負責每一個具體應用程序的調度和協調

對於所有的applications,RM擁有絕對的控制權和對資源的分配權。
每個AM會和RM協商資源,同時和NodeManager通信來執行和監控task。幾個模塊之間的關係如圖所示。

ResourceManager

  • ResourceManager負責整個集羣的資源管理和分配,是一個全局的資源管理系統。
  • NodeManager以心跳的方式,向ResourceManager彙報資源使用情況(目前主要是CPU和內存的使用情況)。
    RM只接受NM的資源回報信息,對於具體的資源處理則交給NM自己處理。
  • YARN Scheduler根據application的請求爲其分配資源,不負責application job的監控、追蹤、運行狀態反饋、啓動等工作。

resource_manager

NodeManager

  • NodeManager是每個節點上的資源和任務管理器,它是管理這臺機器的代理,負責該節點程序的運行,以及該節點資源的管理和監控。YARN集羣每個節點都運行一個NodeManager。
  • NodeManager定時向ResourceManager彙報本節點資源(CPU、內存)的使用情況和Container的運行狀態。ResourceManager宕機時NodeManager自動連接RM備用節點。
  • NodeManager接收並處理來自ApplicationMaster的Container啓動、停止等各種請求。

ApplicationMaster

  • 用戶提交的每個應用程序均包含一個ApplicationMaster,它可以運行在ResourceManager以外的機器上。
  • 負責與RM調度器協商以獲取資源(用Container表示)。
  • 將得到的任務進一步分配給內部的任務(資源的二次分配)。
  • 與NM通信以啓動/停止任務。
  • 監控所有任務運行狀態,並在任務運行失敗時重新爲任務申請資源以重啓任務。
  • 當前YARN自帶了兩個ApplicationMaster實現,一個是用於演示AM編寫方法的實例程序DistributedShell,它可以申請一定數目的Container以並行運行一個Shell命令或者Shell腳本;另一個是運行MapReduce應用程序的AM—MRAppMaster。
  • 注:RM只負責監控AM,並在AM運行失敗時候啓動它。RM不負責AM內部任務的容錯,任務的容錯由AM完成。

YARN運行流程

  1. client向RM提交應用程序,其中包括如ApplicationMaster程序、啓動ApplicationMaster的命令、用戶程序等。
  2. ResourceManager啓動一個container用於運行ApplicationMaster。
  3. 啓動中的ApplicationMaster向ResourceManager註冊自己,啓動成功後與RM保持心跳。
  4. ApplicationMaster向ResourceManager發送請求,申請相應數目的container。
  5. ResourceManager返回ApplicationMaster的申請的containers信息。
    申請成功的container,由ApplicationMaster進行初始化。
    container的啓動信息初始化後,AM與對應的NodeManager通信,要求NM啓動container。
    AM與NM保持心跳,從而對NM上運行的任務進行監控和管理。
  6. container運行期間,ApplicationMaster對container進行監控。
    container通過RPC協議向對應的AM彙報自己的進度和狀態等信息。
  7. 應用運行期間,client直接與AM通信獲取應用的狀態、進度更新等信息。
  8. 應用運行結束後,ApplicationMaster向ResourceManager註銷自己,並允許屬於它的container被收回。

 

Container是什麼?


Container就是一個yarn的java進程,在Mapreduce中的AM,MapTask,ReduceTask都作爲Container在Yarn的框架上執行

 

  • RM通過邏輯上的隊列分配內存,CPU等資源給application,
    默認情況下RM允許最大AM申請Container資源爲8192MB(“yarn.scheduler.maximum-allocation-mb“),默認情況下的最小分配資源爲1024M(“yarn.scheduler.minimum-allocation-mb“),
  • AM只能以增量(”yarn.scheduler.minimum-allocation-mb“)和不會超過(“yarn.scheduler.maximum-allocation-mb“)的值去向RM申請資源,
  • AM負責將(“mapreduce.map.memory.mb“)和(“mapreduce.reduce.memory.mb“)的值規整到能被(“yarn.scheduler.minimum-allocation-mb“)整除,
  • RM會拒絕申請內存超過8192MB和不能被1024MB整除的資源請求【內存增量】。
     
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章