1. 程式人生 > >yarn學習筆記

yarn學習筆記

一、什麼是yarn?

    yarn(yet another resource negotiator)是hadoop的叢集資源管理系統。它是在hadoop2時被引入,最初是為了改善mapreduce的實現,由於其具備較高的通用性,現用於支援多種分散式計算模式,如mapreduce、spark和Tez等,yarn為這些計算模式提供了使用叢集資源的API。

二、yarn的核心成員

    1、resource manager:資源管理器,負責叢集資源的排程和分配,一個叢集只有一個。

    2、node manager:節點管理器,負責實現application的啟動和節點的資源管理,node manager執行在datanode中。


    3、application master:主應用,接受resource manager分配的任務,並傳達給各個node manager繼續分配和執行任務。每個應用只有一個application master,它執行在一個node manager上。

    4、containers:由resource manager分配的cpu、io、網路等資源的容器。

    5、job:一個map或reduce任務。

    6、task:一個實際完成map或reduce工作的獨立工作單元,task執行在node manager的container中。

三、yarn應用執行機制

    1、客戶端向yarn提交作業;

    2、resource manager啟動application master程序;

    3、resource manager為作業分配一個可用的node manager,並通知node manager啟動一個容器用於執行application master;

    4、application master向resource manager申請容器中任務執行需要的資源;

    5、application master通知已經申請到的node manager啟動map任務;

    6、map任務完成之後,application master獲取結果並報告給resource manager,resource manager分配新的資源給application master;

    7、application master通知新的node manager使用新資源啟動reduce任務;

    8、reduce任務完成後,將結果輸出到hdfs;

    9、application master完成任務並請求銷燬自己。

四、yarn與mapreduce1的比較

    1、yarn與mapreduce1在組成上的比較:

    mapreduce1 yarn
    jobtracker         resource manager、application master、timeline servier
    tasktracker         node manager
    slot container

    2、擴充套件性

    yarn將jobtracker的資源排程和作業控制功能進行了拆分,resource manager負責資源排程,application master負責作業控制,從而降低了jobtracker時單個節點的負擔,同時突破了可擴充套件性瓶頸。

    3、可用性    

    mapreduce1時代的jobtracker記憶體中存在大量快速變化的複雜狀態,使得當jobtracker出現故障時,想要快速恢復正常工作狀態顯得極為困難,從而難以獲取高可用性。

    yarn將jobtracker的功能進行了拆分,因此可以針對resource manager和application master分別提供高可用性支援,提高了整體的可用性。

    4、利用率

    mapreduce1時的資源配置被靜態的劃分為了map slot和reduce slot,這樣就會出現在執行任務時,由於叢集中只有map slot可用導致的reduce任務必須等待的情況。而yarn的每個node manager管理一個資源池,一個應用能夠按需請求資源,而不是請求一個固定的slot。

五、yarn的排程器

    1、FIFO排程器

    FIFO排程器採用先進先出模式,應用按照序列方式依次排隊申請服務。

    優點:簡單易懂,無需額外配置。

    缺點:不適合共享叢集。當一個大應用正在執行時會佔用叢集中的所有資源,導致後續其他任務等待時間較長,無法在合理的時間內獲取任務的結果。

    2、容量(capacity)排程器

    容器排程器會預留容器中的部分資源。當一個大應用執行時不會佔據叢集中的所以資源,一個專門的預留佇列使用預留的資源處理資源佔用較小少的小作業。這樣大應用執行時間相對增加,但是能夠在較為合理的時間未小作業提供結果。

    3、公平排程器

    公平排程器在執行的作業之間動態平衡資源。第一個大作業啟動時會得到所有的資源,當第二個作業執行時,會分配到一半的資源,這樣每個作業都能公平的共享叢集資源。

    主要注意的是:第二個資源不是實時獲取到叢集資源,而是要等到第一個作業使用的容器完成並釋放出資源之後。當小作業使用完資源並釋放之後,大作業會再次使用全部的叢集資源。這樣既保證了叢集資源的高效利用,又保證了小作業能夠在合理的時間完成。