91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

YARN任務提交啟動的流程是什么

發布時間:2021-10-12 14:56:02 來源:億速云 閱讀:182 作者:iii 欄目:編程語言

本篇內容介紹了“YARN任務提交啟動的流程是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

【名詞概念】


首先來說明下yarn中的一些概念,后續流程中都會涉及到。

  • ResourceManager(RM)

    負責整個集群的資源管理和分配,處理客戶端和AM的請求,為containr分配資源(將任務調度到不同的NM上運行),同時通過NM的心跳獲取所有container的運行狀態,并進行必要的失敗重試。


  • NodeManager(NM)

    集群資源(CPU和內存,還包括GPU等)的實際擁有者,接收RM和AM的請求,啟動具體的container,并通過心跳向RM匯報container的運行情況。


  • Application

    對應1.X版本中的job,它可以是一個MapReduce應用,也可以是一個spark應用,或者flink應用等。


  • ApplicationMaster(AM)

    每個Application都有一個ApplicationMaster,負責管理具體的某個應用,包括向RM申請具體任務所需的資源,向NM請求啟動具體的任務,同時監控所有任務的運行狀況,并進行必要的容錯處理。spark的driver,flink的jobManager都屬于AM。


  • Container

    Container是YARN中的一個抽象概念,它是任務運行所需資源,環境變量,啟動參數等的一個封裝和抽象。


    一個Application中可以分為兩類Container,一類是前面提到的AM,一類是具體任務的container,常見的任務container有MR中的map任務、reduce任務、spark中的executor、flink的taskManager。

【整體流程】


首先通過一張圖來看下客戶端提交任務到最終運行的整體流程。

YARN任務提交啟動的流程是什么

  1. 客戶端向RM提交應用,本質上是向RM請求啟動AM

  2. RM選擇合適的NM,并向NM發送請求,要求啟動AM

  3. NM收到啟動AM的請求后,根據所攜帶的參數,下載AM所依賴的資源到本地

  4. 完成依賴資源的本地化后,NM啟動AM進程

  5. AM啟動后向RM進行注冊,并向RM申請啟動任務containr所需的資源

  6. RM根據NM的資源匯報情況,向AM回復資源(container)的分配情況,即給請求的任務container分配具體的NM。

  7. AM根據任務container分配的NM,向對應的NM發送請求,要求啟動任務container

  8. NM收到啟動任務container的請求后,同樣根據請求參數,先完成依賴資源的本地化,然后啟動任務container進程。


整體流程中有幾點需要注意:

  • RM中為container分配container,是等待NM進行心跳匯報后,被動觸發進行的。

  • 任務container的運行狀態,是NM通過心跳向RM匯報,RM再通過AM的心跳響應告知對應的AM。

【RM中的流程】


前面概念中提到了application、container以及AM。在RM中,分別用Application,Container,AppAttempt類來對應這三個概念。整個任務提交運行流程也就圍繞這三個類實例的創建,以及各自的狀態機變化完成。

當然,還有一塊內容未涉及,那就是調度器模塊,這里暫不深入,后續再單獨整理說明。

來看看任務提交運行在RM中的流程:

YARN任務提交啟動的流程是什么

  1. 客戶端向RM申請Application的ID

  2. RM內部生成application的唯一ID

  3. 通過rpc響應將applicaiton ID告知客戶端

  4. 客戶端攜帶ID,以及container上下文,通過RPC向RM提交任務。

  5. RM的rpc服務將請求轉發給內部的AppManager模塊。

  6. AppManager創建一個App實例對象(RMAppImpl)。

  7. 隨后向該實例對象發送start事件。

  8. RMAppImpl收到事件后,向狀態存儲服務請求保存App狀態,狀態從NEW變為NEW_SAVING。

  9. 狀態存儲服務完成APP信息的存儲后,再以事件的形式告知RMAppImpl。

  10. RMAppImpl向調度器發送添加APP的事件,狀態從NEW_SAVING變為SUBMITTED。

  11. 調度器收到消息后,進行相應的處理動作,然后告知RMAppImpl應用被接受。

  12. RMAppImpl創建Attempt實例對象(RMAppAttemptImpl),

  13. 然后,向其發送start事件,隨后狀態從SUBMITTED變為ACCEPTED。

  14. Attempt創建后,先向ApplicationMasterService進行注冊,使其在內存中有對應的記錄,方便后面真正的AM進程進行注冊。

  15. 然后,向調度器發送添加Attempt事件。

  16. 調度器同樣進行一系列的處理,包括權限判斷,隊列應用計數等,在內存中記錄相關信息,最后通知Attempt成功添加。

  17. Attempt調用調度器的接口,申請啟動AM所需的資源,同時狀態從NEW變為SUBMITTED。

  18. 當有NM節點向RM發送心跳請求時,RM內部最終會以事件的形式通知到調度器,調度器則選擇合適的應用為其分配資源。

  19. 資源分配過程中,會新建Container對象(RMContainerImpl)。

  20. 然后向Container對象發送start事件。

  21. container收到start事件后,告知attempt,資源已經完成分配。自身狀態從NEW切換為ALLOCATED。

  22. attempt收到事件后,通過接口向調度器獲取已分配的資源,然后狀態從SUBMITTED切換為SCHEDULED。

  23. 調度器的接口處理過程中會向container發送acquire事件。Container的狀態從ALLOCATED切換為ACQUIRED。

  24. 隨后,attempt向狀態存儲模塊發送請求,要求存儲attempt的信息。自身狀態從SCHEDULED切換為ALLOCATED_SAVING。

  25. 狀態存儲完成后,以事件的形式告訴attempt。

  26. attmpt向AMLaunch模塊發送啟動AM的請求。自身狀態從ALLOCATED_SAVING切換為ALLOCATED。

  27. AMLaunch通過RPC協議向指定的NM發送startContainer的請求。

  28. AMLaunch告知Attempt,container已啟動,Attempt的狀態從ALLOCATED切換為LAUNCHED。

  29. NM收到請求后,啟動AM進程

  30. AM進程啟動后向RM中的ApplicationMasterService進行注冊。

  31. ApplicationMasterService收到注冊請求后,告知對應的Attempt。Attempt的狀態從LAUNCHED切為RUNNING。

  32. Attempt收到AM進程并成功注冊的消息后,進而告訴RMAppImpl。App的狀態從ACCEPTED轉換為RUNNING。

注:NM通過心跳告知RM節點上container的運行狀態,RM內部處理該消息最終通知對應container,container狀態從ACQUIRED轉為RUNNING。

【NM中的流程】


與RM不同,在NM中并不感知container是具體任務還是AM,因此內部只有application和container,任務運行流程也就圍繞這兩個類實例的創建,狀態機的變化及周邊配套模塊完成。

在NM中,任務運行的流程如下圖所示:

YARN任務提交啟動的流程是什么

  1. NM內部的containerManagerImpl處理啟動container的請求,先新建一個AppImpl(App的具體實現,后面簡稱為App)的實例對象,然后向該APP發送一個初始化事件,然后新建一個ContainerImpl(Container的具體實現,后面簡稱為Container)對象。

  2. App向日志聚合模塊發送請求,告知App啟動,要求進行相應的初始化動作,同時狀態從NEW變為INITING。

  3. 日志聚合模塊完成app的初始化動作后,通過事件告知App。

  4. APP收到事件后,接著向資源本地化服務模塊發送請求,要求完成App所依賴資源的下載。

  5. 資源本地化服務模塊完成對應的資源下載后,通過事件告知App。

  6. App收到事件后,向Container發送初始化事件,同時狀態從INITING變為RUNNING。

  7. Container同樣向資源本地化服務模塊發送請求,要求完成Container所依賴資源的下載,此時狀態從NEW變為LOCALIZING

  8. 資源本地化服務模塊每成功完成一個資源的下載,都會以事件的形式通知Container。

  9. 當Container感知所有依賴資源都完成本地化后,通過事件告知資源本地化服務模塊進行清理動作(這里的清理動作不是清理資源文件,而是結束相應的資源下載進程)。

  10. Container繼續向Container啟動服務模塊發送請求,要求啟動具體的Container進程,隨后狀態從LOCALIZING變為LOCALIZED。

  11. Container啟動服務模塊根據Container上下文,設置環境變量、啟動參數生成啟動腳本,并創建Container的進程,然后通過事件告知Container。

    Container收到進程啟動的事件后,狀態從LOCALIZED變為RUNNING。

  12. 當Container的進程運行結束后,其對應的創建線程獲取其結束碼,并通知Container。(假設這里為運行成功并正常結束)

  13. Container收到事件后,向資源本地化服務模塊發送請求,要求清理資源文件,然后狀態從RUNNING切換為EXITED_WITH_SUCCESS。

  14. 資源本地化服務模塊對Container的資源文件進行清理后,告知Container。

  15. Container通知日志聚合模塊運行結束,讓其準備進行日志聚合。

  16. 隨后也通知App,Container運行結束,最后狀態切換為DONE。

  17. App感知Container運行結束后,只是在內存中進行相關的記錄,NM通過心跳向RM上報所有container的運行狀況。RM會再通過心跳告知AM,當AM得知所有任務均結束時,向RM進行注銷,并自身退出。RM得知AM結束后,進行相應的處理動作,最終告知該應用對應任務containerd的NM,應用結束。NM內部最終告知App。

  18. App收到消息后,通知資源本地化服務模塊進行資源的清理。然后自身狀態從RUNNING切換為APPLICATION_RESOURCE_CLEANUP。

  19. 資源化本地服務模塊完成資源清理后事件通知App。

  20. App通知日志聚合模塊進行日志聚合,最后狀態變為FINISHED。

“YARN任務提交啟動的流程是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

望城县| 崇明县| 石渠县| 临沭县| 雅江县| 神木县| 安塞县| 兰溪市| 鄢陵县| 南开区| 班玛县| 建水县| 浙江省| 万宁市| 苏尼特右旗| 玉屏| 绩溪县| 江城| 滦南县| 甘南县| 巨野县| 潮州市| 轮台县| 蛟河市| 繁峙县| 台安县| 南通市| 普兰店市| 沈阳市| 闻喜县| 乌拉特后旗| 宝应县| 淮滨县| 丽水市| 洞头县| 湟源县| 遂溪县| 化隆| 独山县| 郑州市| 海晏县|