Apache Hadoop YARN
YARN是做什麼的
YARN在Hadoop中的功能作用有兩個,第一是負責Hadoop叢集中的資源管理(resource management),第二是負責對任務進行排程和監控(scheduling/monitoring)。YARN分別提供了相應的元件完成這兩項工作。
如何管理資源
YARN在管理資源上採用的是master/slave架構。在整個YARN叢集中,在其中一個節點上執行 ResourceManager 程序作為master,其餘每個節點上都執行一個 NodeManager 程序作為slave。
ResourceManager負責對叢集中的所有資源進行統一的管理和排程。NodeManager程序負責單個節點上的資源管理,它監控一個節點上的資源使用情況(如cpu,記憶體,硬碟,網路等)並將其report給ResourceManager。
ResourceManager有兩個主要的元件: Scheduler 和 ApplicationsManager 。
其中的Scheduler就負責為叢集中執行的各個application分配所需要的資源。Scheduler只負責資源的排程,它不做任何對application監控或跟蹤的工作,此外,在任務由於各種原因執行失敗時,它也不負責對任務進行重啟。
Scheduler根據application對資源的需求執行其資源排程功能。它將cpu、記憶體、硬碟、網路等資源合併成一個整體,抽象成 Container 進行資源分配。Container就是Scheduler進行資源分配的一個單位,也是執行在slave節點上的一個元件。
此外,Scheduler是一個可插拔的元件,使用者可根據自己的需要設計新的Scheduler,YARN提供了多種可直接使用的排程器,比如Fair Scheduler和Capacity Scheduler等。
如何排程/監控任務
ApplicationMaster元件負責跟蹤和管理一個application,它負責為application向ResourceManager中的Scheduler元件申請資源,並通過NodeManger啟動和監控一個任務。
當向ResourceManager提交一個application時,必須為其指定一個ApplicationMaster元件。ResourceManager中的ApplicationsManager元件會對所有應用程式的ApplicationMaster進行管理,它首先會為ApplicationMaster元件分配資源,使其執行在一個slave節點的Container中。並負責監控ApplicationMaster的執行狀態,在Container出現異常時對ApplicationMaster進行重啟。
ApplicationsManager負責管理整個叢集中的所有application,包括application提交、與Scheduler協商資源以啟動ApplicationMaster、監控ApplicationMaster執行狀態並在失敗時重新啟動它等。