【深入淺出 Yarn 架構與實現】1-1 設計理念與基本架構

来源:https://www.cnblogs.com/shuofxz/archive/2022/11/03/16855746.html
-Advertisement-
Play Games

一、Yarn 產生的背景 Hadoop2 之前是由 HDFS 和 MR 組成的,HDFS 負責存儲,MR 負責計算。 一)MRv1 的問題 耦合度高:MR 中的 jobTracker 同時負責資源管理和作業控制兩個功能,互相制約。 可靠性差:管理節點是單機的,有單點故障的問題。 資源利用率低:基於 ...


一、Yarn 產生的背景

Hadoop2 之前是由 HDFS 和 MR 組成的,HDFS 負責存儲,MR 負責計算。

一)MRv1 的問題

  • 耦合度高:MR 中的 jobTracker 同時負責資源管理和作業控制兩個功能,互相制約。
  • 可靠性差:管理節點是單機的,有單點故障的問題。
  • 資源利用率低:基於 slot 的資源分配模型。機器會將資源劃分成若幹相同大小的 slot,並劃定哪些是 map slot、哪些是 reduce slot。
  • 無法支持多種計算框架:限定了只能用於 MapReduce 程式。

二)Yarn 的誕生

由於之前 Hadoop 資源調度的種種問題,新的資源調度框架產生了 —— YARN(Yet Another Resource Negotiator)。

它是一個通用資源管理系統,可為上層應用提供統一的資源管理和調度,它的引入為集群在利用率、資源統一管理和數據共用等方面帶來了巨大好處。

二、Yarn 的基本架構

一)Yarn 三大組件

  • ResourceManager
  • Nodemanager
  • ApplicationMaster

image.png

Yarn依然是Master/Slave的結構:

  • 在資源架構層面:RM 是 master、NM 是 slave
  • 在應用運行期間:AM 是 master、container 是 slave

1、ResourceManager

ResourceManager 主要由兩個組件構成:
調度器( Scheduler)和應用程式管理器(Applications Manager,ASM)。

  • 調度器(Scheduler):
    • 根據容量、隊列等限制條件(如每個隊列分配一定的資源,最多執行一定數量的作業等),將系統中的資源分配給各個正在運行的應用程式。
  • 應用程式管理器(Applications Manager):
    • 負責管理整個系統中所有應用程式,包括應用程式提交、與調度器協商資源以啟動 ApplicationMaster、監控 ApplicationMaster 運行狀態併在失敗時重新啟動等。

2、NodeManager

NodeManager 是每個節點上的資源和任務管理器。

  • 定時地向 RM 彙報本節點上的資源使用情況和各個 Container 的運行狀態;
  • 接收並處理來自 AM 的 Container啟動/停止等各種請求。

3、ApplicationMaster

ApplicationMaster 是一個任務最先啟動的容器,用於管理當前任務的調度。

  • 與 RM 調度器協商以獲取資源(用 Container 表示);
  • 將得到的任務進一步分配給內部的任務;
  • 與NM 通信以啟動 / 停止任務;
  • 監控所有任務運行狀態,併在任務運行失敗時重新為任務申請資源以重啟任務。

4、Container

不屬於 Yarn 三大組件,但是 yarn 中資源的抽象。

  • 封裝 NM 上的資源(hadoop2 僅支持 cpu 和記憶體,hadoop3 擴展網路、硬碟、GPU 等資源);
  • 不同於靜態的 slot,container 可以根據需要動態劃分。

二)Yarn 通信協議

通信協議共有 5 種如下圖所示:
image.png

  • 分散式環境下,需要涉及跨機器跨網路通信,YARN底層使用RPC協議實現通信。
  • RPC是遠程過程調用(Remote Procedure Call)的縮寫形式。基於RPC進行遠程調用就像本地調用一樣。
  • 在RPC協議中,通信雙方有一端是Client,另一端為Server,且Client總是主動連接 Server 的。因此,YARN實際 上採用的是拉式(pull-based) 通信模型。

三、Yarn 工作流程

image.png

  1. client 向 YARN 中提交應用程式,其中包括 AM 程式、啟動 AM 的命令、用戶程式等。
  2. RM 為該應用程式分配第一個 Container,並與對應的 NM 通信,要求它在這個 Container中啟動應用程式的 AM。
  3. AM 首先向 RM 註冊,這樣用戶可以直接通過 RM 查看應用程式的運行狀態,然後它將為各個任務申請資源,並監控它的運行狀態,直到運行結束,即重覆步驟4~7。
  4. AM 通過 RPC 協議向 RM 申請和領取資源。
  5. —旦 AM 申請到資源後,便與對應的 NM 通信,要求它啟動任務。
  6. NM 為任務設置好運行環境(包括環境變數、JAR 包、二進位程式等)後,將任務啟動命令寫到 一個腳本中,並通過運行該腳本啟動任務。
  7. 各個任務通過 RPC 協議向 AM 彙報自己的狀態和進度,以讓 AM 隨時掌握各個任務的運行狀態,從而可以在任務失政時重新啟動任務。在應用程式運行過程中,用戶可隨時通過 RPC 向 AM 查詢應用程式的當前運行狀態。
  8. 應用程式運行完成後,AM 向 RM 註銷並關閉自己。

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 一、概述 在我們開發中,經常要用到Vue.extend創建出Vue的子類來構造函數,通過new 得到子類的實例,然後通過$mount掛載到節點,如代碼: <div id="mount-point"></div> <!-- 創建構造器 -- ...
  • 1 yyg-cli 是什麼 yyg-cli 是優雅哥開發的快速創建 vue3 項目的腳手架。在 npm 上發佈了兩個月,11月1日進行了大升級,發佈 1.1.0 版本:支持創建 vue3 全家桶項目和 vue3 組件庫項目。具體如下: vue3 全家桶項目 使用 yyg-cli 創建的 vue3 全 ...
  • 邏輯導航 1.當在前端輸入用戶名和密碼之後,點擊登錄,後端校驗完畢返回前端 2.前端拿到需要首先做個判斷,判斷用戶是否輸入用戶名和密碼,未輸入則發出提示;輸入了則發送post請求給後端,校驗用戶名和密碼 3.校驗通過,前端拿到後端返回的token和用戶名等數據 4.登錄成功,則關閉登錄框,同時,在登 ...
  • 大部分同學都用過 CSS 的屏幕寬度媒體查詢,像是這樣: @media screen and (min-width: 900px) { div { padding: 1rem 3rem; } } 這裡表示的是與屏幕寬度相關的樣式設置,上面的代碼表示當屏幕寬度大於 900px 時,內部的樣式代碼塊才能 ...
  • 邏輯導航 1.當點擊頁面主頁的登錄/註冊按鈕時,彈出登錄/註冊模態框 2.登錄/註冊模態框也是一個小組件,在組件文件夾內創建對應組件 3.然後需要將該組件傳到header(頭部)組件內(進行相關的導入和註冊) 4. 補充子傳父組件語法 在子組件內 當點擊子組件里的東西時,傳遞給父組件一個事件,父組件 ...
  • 本文主要記錄 Vue.js 中的 Vuex,Vuex 是一個專為 Vue.js 應用程式開發的狀態管理模式。它採用集中式存儲管理應用的所有組件的狀態,並以相應的規則保證狀態以一種可預測的方式發生變化。 ...
  • 當我們使用vuex的時候,時不時能看到“更改Vuex中的store中的狀態唯一辦法就是提交mutations”,但是有沒有試想過,我們不提交mutations其實也能修改state的值?答案是可以的 我們可以直接使用如下方式; this.$store.state.num=666; 其中,這樣修改的話 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 for in 和 for of 相對於大家肯定都不陌生,都是用來遍歷屬性的沒錯。那麼先看下麵的一個例子: 例1 const obj = { a: 1, b: 2, c: 3 } for (let i in obj) { console.l ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...