深入理解 Taier:MR on Yarn 的實現原理

来源:https://www.cnblogs.com/DTinsight/archive/2023/03/15/17217567.html
-Advertisement-
Play Games

我們今天常說的大數據技術,它的理論基礎來自於2003年 Google 發表的三篇論文,《The Google File System》、《MapReduce: Simplified Data Processing on Large Clusters》、《Bigtable: A Distributed ...


我們今天常說的大數據技術,它的理論基礎來自於2003年 Google 發表的三篇論文,《The Google File System》、《MapReduce: Simplified Data Processing on Large Clusters》、《Bigtable: A Distributed Storage System for Structured Data》。這三篇論文分別對應後來出現的 HDFS,MapReduce, HBase。

在大數據的發展歷史上,還有一個名字是無論如何都繞不開的,那就是 Doug Cutting。Doug是 Apache Lucene、Nutch、Hadoop、Avro 項目的創始人,2006 年 Docu Cutting 開源了 Hadoop,名字取自於他兒子的玩具小象 Hadoop。

那麼就從 Hadoop 起,我們開始本文的分享。

Taier & Yarn

Hadoop

新生事物的成長往往是螺旋上升的,Hadoop 也是如此。Hadoop 1.0 是指 MapReduce + HDFS,其中 MapReduce 是一個離線處理框架,由編程模型(新舊API)、運行時環境(JobTracker 和 TaskTracker)和數據處理引擎(MapTask和ReduceTask)三部分組成。早期的 MapReduce 非常臃腫,有著很明顯的缺點,JobTracker 有單點故障問題、框架設計只能執行 MapReduce 任務,不能跑 Storm,Flink 等計算框架的任務。

file

之後迎來的 Hadoop 2.0 是指 MapReduce + HDFS + Yarn,其中 YARN 是一個資源管理系統,負責集群資源管理和調度, MapReduce 則是運行在 YARN 上的離線處理框架。Hadoop 2.0 很好地解決了單點問題,它將 JobTracker 中的資源管理和作業控制分開,分別由 ResourceManager 負責所有應用程式的資源分配,ApplicationMaster 負責管理一個應用程式。並且解決了擴展問題,包括針對 Hadoop 1.0 中的 MapReduce 在擴展性和多框架支持等方面的不足。

file

MapReduce 2.0

MapReduce 1.0的工作機制中,角色主要包括客戶端,Jobtracker,Tasktracker。Jobtracker 主要是協調作業的運行,而 Tasktracker 是負責運行作業劃分之後的任務。網上關於 MR 1.0 的內容很多,這裡就不再過多贅述,流程圖如下:

file

到了 MapReduce 2.0,核心思想則是將 MR 1.0 中 JobTracker 的資源管理和任務調度兩個功能分開,分別由 ResourceManager 和 ApplicationMaster 進程實現。

MR 2.0 的工作流程主要分為以下6個執行過程(請將圖片和文字對照起來看):

file

一、作業的提交

1)客戶端向 ResourceManager 請求一個新的作業ID,ResourceManager 收到後,回應一個 ApplicationID,見第2步

2)計算作業的輸入分片,將運行作業所需要的資源(包括jar文件、配置文件和計算得到的輸入分片)複製到一個(HDFS),見第3步

3)告知 ResourceManager 作業準備執行,並且調用 submitApplication() 提交作業,見第4步

二、作業的初始化

  1. ResourceManager收到對其 submitApplication() 方法的調用後,會把此調用放入一個內部隊列中,交由作業調度器進行調度,並對其初始化,然後為該其分配一個 contain 容器,見第5步

5)並與對應的 NodeManager 通信,見第5a步;要求它在 Contain 中啟動 ApplicationMaster ,見第5b步

  1. ApplicationMaster 啟動後,會對作業進行初始化,並保持作業的追蹤,見第6步

  2. ApplicationMaster 從 HDFS 中共用資源,接受客戶端計算的輸入分片為每個分片,見第7步

三、任務的分配

  1. ApplicationMaster 向 ResourceManager 註冊,這樣就可以直接通過 RM 查看應用的運行狀態,然後為所有的 map 和 reduce 任務獲取資源,見第8步

四、任務的執行

  1. ApplicationMaster 申請到資源後,與 NodeManager 進行交互,要求它在 Contain 容器中啟動執行任務,見第9a、9b步

五、進度和狀態的更新

10)各個任務通過 RPC 協議 umbilical 介面向 ApplicationMaster 彙報自己的狀態和進度,方便 ApplicationMaster 隨時掌握各個任務的運行狀態,用戶也可以向 ApplicationMaster 查詢運行狀態

六、作業的完成

11)應用完成後,ApplicationMaster 向 ResourceManager 註銷並關閉自己

手寫一個 Yarn 程式

如果想要將一個新的應用程式運行在 YARN 之上,通常需要編寫兩個組件:客戶端和 ApplicationMaster。

· 客戶端編寫需要註意:客戶端通常只需與 ResourceManager 交互,期間涉及到多個數據結構和一個 RPC 協議。

· ApplicationMaster 編寫需要註意:ApplicationMaster 需要與 ResoureManager 和 NodeManager 交互,以申請資源和啟動 Container,期間涉及到多個數據結構和兩個 RPC 協議

手寫一個 YARN Application 程式對理解 YARN 的運行原理非常有幫助,熟悉 Spark 、Flink 計算組件的同學也可以參考 Spark on Yarn、Flink on Yarn 的源代碼。

Taier&Yarn

洋洋灑灑,回過頭來,現在來給大家介紹一下 Taier 和 Yarn 之間的關係。

Taier 作為一站式大數據任務調度引擎,是數棧數據中台整體架構的重要樞紐,負責調度日常龐大的任務量。它旨在降低ETL開發成本,提高大數據平臺穩定性,讓大數據開發人員可以在 Taier 直接進行業務邏輯的開發,而不用關心任務錯綜複雜的依賴關係與底層的大數據平臺的架構實現,將工作的重心更多地聚焦在業務之中。

為了更好地實現讓數據開發人員關註業務的目標,Taier 主要在控制臺中展示了 Hadoop Yarn的相關信息。分為以下3點:Yarn 配置管理、Yarn 資源管理、任務 on Yarn 的相關配置。

file

下麵為大家展示一下 Taier 中 Yarn 相關的頁面:

file

file

file

實現原理

前情提要全部講完,下麵為大家重點介紹下 Taier 怎麼實現 MR on Yarn 的計算。

Taier 目前支持22種任務類型,支持在 Yarn 上運行的任務有 python、shell、數據同步、實時採集、Flink Jar、Flink SQL、Spark SQL 和 Hadoop MR 等等。

實現原理

以 MR on Yarn 任務為例,其實現原理主要有2個關鍵步驟:

· 組裝任務運行時的相關信息生成 pluginInfo,信息包含任務相關配置、YARN 配置、HDFS 配置和公共配置。

· 根據 pluginInfo 實例化相應的任務提交客戶端,客戶端負責向 YARN 提交任務,實現了 Taier 與計算集群的解耦、保證節點無侵入。

file

下圖是目前已經在 Taier 上運行的 Flink 任務的一些參數,包括 groupName、jobID 等:

file
file

執行原理

以 MR on Yarn 任務為例,其執行原理可以分為以下3個階段:

file

● 準備階段

· 對普通的 Hadoop MR 任務進行改造,修改 MR 代碼的 Main 方法

· 編譯修改後的 Hadoop MR 任務,並通過 Taier 的資源上傳功能將 Jar 進行上傳,目標選擇 HDFS

· 配置 Haddoop MR 任務的任務參數

● 運行階段

· Taier 的 worker-plugin 主要負責任務提交相關工作,其中 hadoop 插件會負責 MR 任務的相關處理

· 實例化 HadoopClient,並下載準備階段上傳的 MR 任務對應的 Jar(註意這裡是一個任務的生命周期,為了保障任務的無狀態,所以每次運行都會重新下載一次)

· 通過 MapReduceTemplate ,載入 Jar 並構建 MR 任務的類載入器

· 通過類載入器實獲取 Class 類對象,並調用類對象的 Main 方法,傳入 Configuration、args 等參數

· 返回 JobId

● 運維階段

· 處理 JobId 並轉化為 ApplicationId

· 實例化 YarnClient,獲取 MR on Yarn 的相關信息,包括運行狀態、日誌、停止 Application

Taier 中的 Hadoop 插件

Hadoop MR 的任務在 Taier 中的實現是基於 Hadoop 的插件,在裡面實現了相關的類,其中比較主要的包括:

· HadoopClient: 實現任務提交運行的相關介面(init、judgeSlots、processSubmitJobWithType、beforeSubmitFunc、afterSubmitFunc、getJobStatus、getJobLog、cancelJob)

· MapReduceTemplate:封裝 MR 任務及其重要參數、方法,實例化 PackagedProgram

· PackagedProgram:MR 任務提交前的處理實現

這一部分相關的代碼可以在 PR 中的上下文看到,也可以下載 Taier 插件看到關鍵類所做的事件,如何相互配合實現 MR 任務往 Yarn 上進行提交。

相關PR:

https://github.com/DTStack/Taier/pull/983

案例演示

案例演示的部分,大家直接觀看視頻,會得到最直觀清楚的講解,本文就不再進行贅述。

視頻鏈接:

https://www.bilibili.com/video/BV1ag4y1n7bT/?spm_id_from=333.999.0.0

file
file
file
file

視頻課程&PPT獲取

視頻課程:

https://www.bilibili.com/video/BV1ag4y1n7bT/?spm_id_from=333.999.0.0

課件獲取:

關註公眾號 “數棧研習社” ,後臺私信 “Taier” 獲得直播課件

《數據治理行業實踐白皮書》下載地址:https://fs80.cn/380a4b

想瞭解或咨詢更多有關袋鼠雲大數據產品、行業解決方案、客戶案例的朋友,瀏覽袋鼠雲官網:https://www.dtstack.com/?src=szbky

同時,歡迎對大數據開源項目有興趣的同學加入「袋鼠雲開源框架釘釘技術qun」,交流最新開源技術信息,qun號碼:30537511,項目地址:https://github.com/DTStack


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

-Advertisement-
Play Games
更多相關文章
  • 很多時候,在linux我們源碼編譯庫代碼時候會自定義安裝路徑,這使得man查詢的時候無法找到庫文檔,預設的man搜索路徑可以使用下麵命令查看: $ man -w /usr/local/share/man:/usr/share/man 我們可以通過修改man的命令搜索配置文件/etc/man_db.c ...
  • Linux進程間通信通常使用的方式有很多種,其中比較常用的包括管道(pipe)和 FIFO(命名管道)。本文將介紹這兩種通信方式的基本概念,並用C語言編寫示例代碼,來說明如何在兩個進程之間使用這些IPC機制進行通信。 管道(pipe) 管道是一種半雙工的通信方式,用於父進程和子進程之間的通信。在 L ...
  • 【報錯信息】 ERROR: Support for FileParameters in the input step is disabled and will be removed in a future release. Details on how to migrate your pipelin ...
  • iptables是一個Linux內核中的包過濾工具,可以用來過濾、轉發、修改、控制網路流量等。如果想要將主機的所有流量轉發至其他機器,可以使用iptables進行配置。 以下是具體步驟: 1. 首先需要在其他機器上開啟轉發功能,可以使用以下命令開啟: echo 1 > /proc/sys/net/i ...
  • 規則: 1、兩個參數至少有一個是 NULL 時,比較的結果也是 NULL,例外是使用 <=> 對兩個 NULL 做比較時會返回 1,這兩種情況都不需要做類型轉換2、兩個參數都是字元串,會按照字元串來比較,不做類型轉換3、兩個參數都是整數,按照整數來比較,不做類型轉換4、十六進位的值和非數字做比較時, ...
  • 日前,“2022年中國開源創新大賽”初賽晉級名單公佈,易用、穩定、高效的批流統一的數據集成框架 ChunJun 順利晉級決賽,並榮獲“2022年中國開源創新大賽優秀開源項目/社區”獎項。 感謝組委會專家的認可,ChunJun也將繼續秉承技術初心,砥礪前行,不遺餘力地助力國內開源發展,為更多的開發者傳 ...
  • 摘要:這些年大家都在談分散式資料庫,各大企業也紛紛開始做資料庫的分散式改造。那麼所謂的分散式資料庫是什麼?採用什麼架構,優勢在哪?為什麼越來越多企業選擇它?我們不妨一起來深入瞭解下。 本文分享自華為雲社區《GaussDB分散式架構大揭秘》,作者:華為雲資料庫首席架構師 馮柯。 這些年大家都在談分散式 ...
  • MySQL查詢執行流程 架構總覽 下麵就是MySQL 的邏輯架構,sql layer主要負責如下功能:許可權判斷、sql解析、執行計劃優化、query cache的處理等操作,這些操作都是在資料庫系統處理底層數據之前的工作; Storage Engine Layer主要負責底層數據存取的實現,由多種存 ...
一周排行
    -Advertisement-
    Play Games
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...