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有兩個主要的組件:SchedulerApplicationsManager
其中的Scheduler就負責爲集羣中運行的各個application分配所須要的資源。Scheduler只負責資源的調度,它不作任何對application監控或跟蹤的工做,此外,在任務因爲各類緣由執行失敗時,它也不負責對任務進行重啓。
Scheduler根據application對資源的需求執行其資源調度功能。它將cpu、內存、硬盤、網絡等資源合併成一個總體,抽象成Container進行資源分配。Container就是Scheduler進行資源分配的一個單位,也是運行各個任務的容器。
此外,Scheduler是一個可插拔的組件,用戶可根據本身的須要設計新的Scheduler,YARN提供了多種可直接使用的調度器,好比Fair Scheduler和Capacity Scheduler等。架構

如何調度/監控任務

ApplicationMaster組件負責跟蹤和管理一次提交的做業(job),它負責爲job的運行向ResourceManager中的Scheduler組件申請資源,並經過NodeManger啓動和監控這個job的全部task。
當向ResourceManager提交一個job時,必須爲其指定一個ApplicationMaster組件。ResourceManager中的ApplicationsManager組件會對全部job的ApplicationMaster進行管理,它首先會爲ApplicationMaster組件分配資源,使其運行在一個slave節點的Container中。並負責監控ApplicationMaster的運行狀態,在Container出現異常時對ApplicationMaster進行重啓。
ApplicationsManager負責管理整個集羣中的全部job,包括job的提交、與Scheduler協商資源以啓動ApplicationMaster、監控ApplicationMaster運行狀態並在失敗時從新啓動它等。app

YARN架構

YARN架構

上面咱們已經介紹了YARN中的所有組件的做用,如今咱們詳細說一下YARN的架構。
先看圖中的Node Statue線,這條線展示了YARN集羣的master/slave架構。ResourceManager是集羣中的master節點,做爲老大統一管理集羣中的全部資源分配。集羣中能夠存在多個NodeManager節點,NodeManager負責其所在機器上的資源管理,並將資源使用狀況report給ResourceManager節點。
Container是YARN中的資源抽象,它封裝了一個節點上的多維度資源,如內存、CPU、磁盤、網絡等。從圖中能夠看到,一個NodeManager節點上同時存在多個Container。提交做業的每一個task都運行在一個Container中。
再看MapReduce Status和Resource Request這兩條線,它展示了ApplicationMaster的做用。首先,對於每一個提交的做業都必需要有一個ApplicationMaster(如這裏的兩個做業分別對應一個ApplicationMaster)。ApplicationMaster對做業的全部任務進行跟蹤監控和管理,能夠看到做業下的每一個任務都將執行statue彙報給ApplicationMaster。此外,ApplicationMaster還負責向ResourceManager申請資源。
最後,Job Submission這條線展示了每次提交新的做業時,都是將任務提交給ResourceManager,由ResourceManager全局管理。常見的操做有提交一個做業、殺死一個做業等。oop

YARN執行流程

提交一個做業到YARN的詳細執行流程以下:spa

  1. Client向YARN提交一個job,首先向ResourceManager中的ApplicationManager申請資源,用於運行本做業的ApplicationMaster。
  2. ApplicationManager給集羣中的一個NodeManager發命令,通知其建立一個Container並運行做業的ApplicationMaster。
  3. NodeManager建立一個Container並啓動做業的ApplicationMaster。
  4. ApplicationMaster將本身註冊到ApplicationManager,使得ApplicationManager能夠監控到Job的執行狀態,Client也能夠經過ApplicationManager對做業進行控制。
  5. Scheduler將資源分配信息發給ApplicationMaster。
  6. ApplicationMaster將獲取到的資源分配信息發送給各個NodeManager。
  7. 各個NodeManager接收到資源分配命令,建立Container並啓動對應的task。
  8. 各個task直接與ApplicationMaster進行通訊,彙報心跳和任務執行進度。
  9. 全部的Task都執行完畢,將講過反饋給ApplicationMaster。ApplicationMaster再將任務執行的結果反饋ApplicationManager。

YARN執行流程

相關文章
相關標籤/搜索