溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Hadoop中Yarn架構(gòu)是什么樣的

發(fā)布時間:2021-12-09 14:48:34 來源:億速云 閱讀:159 作者:小新 欄目:云計算

這篇文章主要介紹Hadoop中Yarn架構(gòu)是什么樣的,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!

先來看看Yarn平臺的基本架構(gòu):

    Hadoop中Yarn架構(gòu)是什么樣的

    在Yarn的結(jié)構(gòu)中,把原來JobTracker管的事兒(資源管理、任務(wù)調(diào)度)拆開了,資源調(diào)度讓ResourceManager干,任務(wù)調(diào)度讓ApplicationMaster管,這樣的好處就是能夠讓各個模塊各司其職,專一干一件事,就好比一個大領(lǐng)導(dǎo)每天如果不專心管理管隊,老跑去敲代碼,最后這個團隊必然存在問題。言歸正傳,既然要了解Yarn的架構(gòu),在這里有必要先解釋一下用戶提交一個任務(wù)都走了哪些流程:

Hadoop中Yarn架構(gòu)是什么樣的

    NodeManager啟動的時候,會向ResourceManager注冊自己的內(nèi)存、CPU使用率等資源信息,供NodeManager調(diào)度。

    2. ApplicationMaster

    ApplicationMaster 負(fù)責(zé)管理應(yīng)用程序的整個生命周期,每個應(yīng)用程序都對應(yīng)一個AM,主要功能有:

    (1) 與RM的調(diào)度器通訊,協(xié)商管理資源分配。

    (2) 與NM合作,在合適的容器中運行對應(yīng)的task,并監(jiān)控這些task執(zhí)行。

    (3) 如果container出現(xiàn)故障,AM會重新向調(diào)度器申請資源。

    (4) 計算應(yīng)用程序所需的資源量,并轉(zhuǎn)化成調(diào)度器可識別的協(xié)議。

    (5) AM出現(xiàn)故障后,ASM會重啟它,而由AM自己從之前保存的應(yīng)用程序執(zhí)行狀態(tài)中恢復(fù)應(yīng)用程序。 

    3. NodeManager

    NodeManager替代了Hadoop v1版本中的TaskTracker,每個節(jié)點都會有一個NM,主要功能有:

    (1) 為應(yīng)用程序啟動容器,同時確保申請的容器使用的資源不會超過節(jié)點上的總資源。

    (2) 為task構(gòu)建容器環(huán)境,包括二進制可執(zhí)行文件,jars等。

    (3) 為所在的節(jié)點提供了一個管理本地存儲資源的簡單服務(wù),應(yīng)用程序可以繼續(xù)使用本地存儲資源即使他沒有從RM那申請。比如:MapReduce可以使用該服務(wù)程序存儲map task的中間輸出結(jié)果。

    一個NodeManager上面可以運行多個Container,Container之間的資源互相隔離,類似于虛擬機的多個系統(tǒng)一樣,各自使用自己分配的資源。NodeManager會啟動一個監(jiān)控進行用來對運行在它上面的Container進行監(jiān)控,當(dāng)某個Container占用的資源超過約定的閾值后,NodeManager就會將其殺死。

    4. Container

    Container可以說是一個對Application使用資源描述的集合(或容器),可以看做一個可序列化的java對象,封裝了一些描述信息,例如:

    message ContainerProto {

    optional ContainerIdProto id = 1; //container id

    optional NodeIdProto nodeId = 2; //container(資源)所在節(jié)點

    optional string node_http_address = 3;

    optional ResourceProto resource = 4; //container資源量

    optional PriorityProto priority = 5; //container優(yōu)先級

    optional hadoop.common.TokenProto container_token = 6; //container token,用于安全認(rèn)證

    }

    Container的一些基本概念和工作流程如下:

    (1) Container是YARN中資源的抽象,它封裝了某個節(jié)點上一定量的資源(CPU和內(nèi)存兩類資源)。它跟Linux Container沒有任何關(guān)系,僅僅是YARN提出的一個概念(從實現(xiàn)上看,可看做一個可序列化/反序列化的Java類)。

    (2) Container由ApplicationMaster向ResourceManager申請的,由ResouceManager中的資源調(diào)度器異步分配給ApplicationMaster;
    (3) Container的運行是由ApplicationMaster向資源所在的NodeManager發(fā)起的,Container運行時需提供內(nèi)部執(zhí)行的任務(wù)命令(可以使任何命令,比如java、Python、C++進程啟動命令均可)以及該命令執(zhí)行所需的環(huán)境變量和外部資源(比如詞典文件、可執(zhí)行文件、jar包等)。

    另外,一個應(yīng)用程序所需的Container分為兩大類,如下:

    (1) 運行ApplicationMaster的Container:這是由ResourceManager(向內(nèi)部的資源調(diào)度器)申請和啟動的,用戶提交應(yīng)用程序時,可指定唯一的ApplicationMaster所需的資源;
    (2) 運行各類任務(wù)的Container:這是由ApplicationMaster向ResourceManager申請的,并由ApplicationMaster與NodeManager通信以啟動之。

以上兩類Container可能在任意節(jié)點上,它們的位置通常而言是隨機的,即ApplicationMaster可能與它管理的任務(wù)運行在一個節(jié)點上。

    5. YARN平臺的資源管理方案

    在YARN中,用戶以隊列的形式組織,每個用戶可屬于一個或多個隊列,且只能向這些隊列中提交application。每個隊列被劃分了一定比例的資源。
    YARN的資源分配過程是異步的,也就是說,資源調(diào)度器將資源分配給一個application后,不會立刻push給對應(yīng)的ApplicaitonMaster,而是暫時放到一個緩沖區(qū)中,等待ApplicationMaster通過周期性的RPC函數(shù)主動來取,也就是說,采用了pull-based模型,而不是push-based模型,這個與MRv1是一致的。

    相比于MRv1中的資源調(diào)度器,盡管YANR的調(diào)度器也是插拔式的,但由于YARN采用了事件驅(qū)動的模型,因此編寫起來更加復(fù)雜,難度也遠(yuǎn)遠(yuǎn)大于MRv1。
    同MRv1一樣,YARN也自帶了三種常用的調(diào)度器,分別是FIFO,Capacity Scheduler和Fair Scheduler,其中,第一個是默認(rèn)的調(diào)度器,它屬于批處理調(diào)度器,而后兩個屬于多租戶調(diào)度器,它采用樹形多隊列的形式組織資源,更適合公司應(yīng)用場景。需要注意的是,這三種調(diào)度器采用的算法與MRv1中的完全一致,只不過是根據(jù)YARN中資源調(diào)度器的對外接口重新實現(xiàn)了一遍,在此不再贅述。 

以上是“Hadoop中Yarn架構(gòu)是什么樣的”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI