日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何编写YARN应用程序

發布時間:2025/3/21 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何编写YARN应用程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
(注意:本文的分析基于Hadoop trunk上的“ Revision 1452188 ”版本,具體可參考: http://svn.apache.org/repos/asf/hadoop/common/branches/branch-2/ 。)

1.???? 概述

YARN是一個資源管理系統,負責集群資源的管理和分配。如果想要將一個新的應用程序運行在YARN之上,通常需要編寫兩個組件:客戶端和ApplicationMaster。由于這兩個組件編寫非常復雜,尤其ApplicationMaster,需要考慮RPC調用、任務容錯等細節,所以,往往由專業的開發人員編寫這兩個組件,并提供給上層的應用程序用戶使用。如果大量應用程序可抽象成一種通用框架,那么只需實現一個客戶端和一個ApplicationMaster,然后讓所有應用程序重用這兩個組件即可,比如MapReduce是一種通用的計算框架,YARN已經為其實現了一個直接可以使用的客戶端—MRClientService和ApplicationMaster—MRAppMaster。

本文主要介紹了如何讓一種新的應用程序,或者新的計算框架,運行于YARN之上。正如前面介紹的,用戶需要編寫兩個組件完成該任務:客戶端和ApplicationMaster,其中,客戶端負責向ResourceManager提交ApplicationMaster,并查詢應用程序運行狀態,ApplicationMaster負責向ResourceManager申請資源(以Container形式表示),并與NodeManager通信以啟動各個Container,此外,ApplicationMaster還負責監控各個任務運行狀態,并在失敗是為其重新申請資源。

2.???? YARN Appcalition涉及到的RPC協議和主要編寫步驟

(1)?涉及到的RPC協議

通常而言,編寫一個YARN Appcalition涉及到3個RPC協議,分別為:

1)? ClientRMProtocol(Client<–>ResourceManager)

Client通過該協議將應用程序提交到ResourceManager上、查詢應用程序的運行狀態或者殺死應用程序等。

2)? AMRMProtocol(ApplicationMaster<–>ResourceManager)

ApplicationMaster使用該協議向ResourceManager注冊、申請資源以運行自己的各個任務。

3)? ContainerManager(ApplicationMaster<–> NodeManager)

ApplicationMaster使用該協議要求NodeManager啟動/撤銷Container,或者獲取各個container的運行狀態。

(2)客戶端編寫流程

步驟1?Client通過RPC函數ClientRMProtocol#getNewApplication從ResourceManager中獲取唯一的application ID

步驟2??Client通過RPC函數ClientRMProtocol#submitApplication將ApplicationMaster提交到ResourceManager上。

(3)ApplicationMaster編寫流程

步驟1?ApplicationMaster通過RPC函數AMRMProtocol#registerApplicationMaster向ResourceManager注冊。

步驟2?ApplicationMaster通過RPC函數AMRMProtocol#allocate向ResourceManager申請資源(以Container形式表示)。

步驟3?ApplicationMaster通過RPC函數ContainerManager#startContainer要求對應的NodeManager啟動Container。

ApplicationMaster重復步驟2~3,直到所有任務運行成功。

另外,在應用程序運行過程中,用戶可使用ClientRMProtocol#getApplicationReport 查詢應用程序運行狀態,也可以使用ClientRMProtocol#forceKillApplication將應用程序殺死。

3.?? 編寫YARN Appcalition詳細步驟介紹

(1)客戶端編寫流程

客戶端通常只需與ResourceManager交互,期間涉及到多個數據結構和一個RPC協議,具體如下:

步驟1?獲取ApplicationId??蛻舳送ㄟ^RPC協議ClientRMProtocol向ResourceManager發送應用程序提交請求GetNewApplicationRequest,ResourceManager為其返回應答GetNewApplicationResponse,該數據結構中包含多種信息,包括ApplicationId、可資源使用上限和下限等。

步驟2?提交ApplicationMaster。將啟動ApplicationMaster所需的所有信息打包到數據結構ApplicationSubmissionContext中,主要包括以下幾種信息:

(1)?application id

(2)?application 名稱

(3)?application優先級

(4)?application 所屬隊列

(5)?application 啟動用戶名

(6)??ApplicationMaster對應的Container信息,包括:啟動ApplicationMaster所需各種文件資源、jar包、環境變量、啟動命令、運行ApplicationMaster所需的資源(主要指內存)等。

客戶端調用ClientRMProtocol#submitApplication(ApplicationSubmissionContext)將ApplicationMaster提交到ResourceManager上。

(ResourceManager收到請求后,會為ApplicationMaster尋找合適的節點,并在該節點上啟動它)。

客戶端可通過多種方式查詢應用程序的運行狀態,其中一種是調用RPC函數ClientRMProtocol#getApplicationReport獲取一個應用程序當前運行狀況報告,該報告內容包括應用程序名稱、所屬用戶、所在隊列、ApplicationMaster所在節點、一些診斷信息、啟動時間等。

(2)編寫ApplicationMaster

ApplicationMaster需要與ResoureManager和NodeManager交互,以申請資源和啟動Container,期間涉及到多個數據結構和兩個RPC協議。具體步驟如下:

步驟1?注冊。ApplicationMaster首先需通過RPC協議AMRMProtocol向ResourceManager發送注冊請求RegisterApplicationMasterRequest,該數據結構中包含ApplicationMaster所在節點的host、RPC port和TrackingUrl等信息,而ResourceManager將返回RegisterApplicationMasterResponse,該數據結構中包含多種信息,包括該應用程序的ACL列表、可資源使用上限和下限等。

步驟2?申請資源。根據每個任務的資源需求,ApplicationMaster可向ResourceManager申請一系列用于運行任務的Container,ApplicationMaster使用ResourceRequest類描述每個Container(一個container只能運行一個任務):

1)??? Hostname??????? 期望Container所在的節點,如果是“*”,表示可以為任意節點。

2)??? Resource capability????????? 運行該任務所需的資源量,當前僅支持內存資源。

3)??? Priority???? 任務優先級。一個應用程序中的任務可能有多種優先級,ResourceManager會優先為高優先級的任務分配資源。

4)??? numContainers??????? 符合以上條件的container數目。

一旦為任務構造了Container后,ApplicationMaster會使用RPC函數AMRMProtocol#allocate向ResourceManager發送一個AllocateRequest對象,以請求分配這些Container,AllocateRequest中包含以下信息:

1)Requested containers????????????????? 所需的Container列表

2)Released containers??????????? 有些情況下,比如有些任務在某些節點上失敗過,則ApplicationMaster不想再在這些節點上運行任務,此時可要求釋放這些節點上的Container。

3)Progress update information????? 應用程序執行進度

4)ResponseId?????????????????? RPC響應ID,每次調用RPC,該值會加1。

ResourceManager會為ApplicationMaster返回一個AllocateResponse對象,該對象中主要信息包含在AMResponse中:

1)reboot????????? ???????? ApplicationMaster是否需要重新初始化.當ResourceManager端出現不一致狀態時,會要求對應的ApplicationMaster重新初始化。

2)Allocated Containers? 新分配的container列表。

3)Completed Containers??????? 已運行完成的container列表,該列表中包含運行成功和未成功的Container,ApplicationMaster可能需要重新運行那些未運行成功的Container。

ApplicationMaster會不斷追蹤已經獲取的container,且只有當需求發生變化時,才允許重新為Container申請資源。

步驟3?啟動Container。當ApplicationMaster(從ResourceManager端)收到新分配的Container列表后,會使用RPC函數ContainerManager#startContainer向對應的NodeManager發送ContainerLaunchContext以啟動Container,ContainerLaunchContext包含以下內容:

1)ContainerId?????????????????? Container id

2)Resource???? 該Container可使用的資源量(當前僅支持內存)

3)User??? Container所屬用戶

4)Security tokens?? 安全令牌,只有持有該令牌才可啟動container

5)LocalResource??? 運行Container所需的本地資源,比如jar包、二進制文件、其他外部文件等。

6)ServiceData???????? 應用程序可能使用其他外部服務,這些服務相關的數據通過該參數指定。

6)Environment??????? 啟動container所需的環境變量

7)command??? 啟動container的命令

ApplicationMaster會不斷重復步驟2~3,直到所有任務運行成功,此時,它會調用AMRMProtocol#finishApplicationMaster,以告訴ResourceManage自己運行結束。

【注意】 整個運行過程中,ApplicationMaster需通過心跳與ResourceManager保持聯系,這是因為,如果一段時間內(默認是10min),ResourceManager未收到ApplicationMaster信息,則認為它死掉了,會重新調度或者讓其失敗。通常而言,ApplicationMaster周期性調用RPC函數AMRMProtocol#allocate向其發送空的AllocateRequest請求即可。

4.?? 總結

編寫一個兼具高容錯性和高性能的ApplicationMaster是非常不容易的,在后面幾篇博文中,我將介紹YARN中提供的兩個ApplicationMaster實現,一個是非常簡單,通常用作示例的dsitributedshell,另一個是MapReduce計算框架對應的ApplicationMaster—MRAppMaster。

5.?? 參考資料

http://hadoop.apache.org/docs/r2.0.0-alpha/hadoop-yarn/hadoop-yarn-site/WritingYarnApplications.html

原創文章,轉載請注明:?轉載自董的博客

本文鏈接地址:?http://dongxicheng.org/mapreduce-nextgen/how-to-write-an-yarn-applicationmaster/

總結

以上是生活随笔為你收集整理的如何编写YARN应用程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。