一看就懂!任務提交的資源判斷在Taier中的實踐

来源:https://www.cnblogs.com/DTinsight/archive/2023/02/01/17081797.html
-Advertisement-
Play Games

Taier 介紹 Taier 是袋鼠雲開源項目之一,是一個分散式可視化的DAG任務調度系統。 旨在降低ETL開發成本、提高大數據平臺穩定性,大數據開發人員可以在 Taier 直接進行業務邏輯的開發,而不用關心任務錯綜複雜的依賴關係與底層的大數據平臺的架構實現,將工作的重心更多地聚焦在業務之中。 項目 ...


Taier 介紹

Taier 是袋鼠雲開源項目之一,是一個分散式可視化的DAG任務調度系統

旨在降低ETL開發成本、提高大數據平臺穩定性,大數據開發人員可以在 Taier 直接進行業務邏輯的開發,而不用關心任務錯綜複雜的依賴關係與底層的大數據平臺的架構實現,將工作的重心更多地聚焦在業務之中。

項目地址:https://github.com/DTStack/Taier

file

Taier 資源判斷

Taier 基於插件式架構設計,用戶在界面開發任務並提交運行。提交運行插件又劃分為worker-plugins、datasource-plugins雙插件類型。

在任務提交的時候,Taier需要判斷是否有足夠的資源來執行,否則一股腦地提交任務,最終會拖垮環境,導致服務的不可用。根據環境資源的剩餘情況來動態調整提交任務的速率是Taier必不可少的一項功能,那麼Taier究竟是怎麼來判斷資源的呢?

什麼是資源?

對一個系統而言,首先要定義出資源的種類,然後將每種資源量化,才能進行管理,這就是資源抽象的過程。那麼,想回答上文中「Taier是如何判斷資源」的這個問題,就需要先理清楚,在一個分散式、多環境的系統中,什麼是資源,又為什麼要有“資源”這個概念?

我們通常所說的“資源”都是硬體資源,包括CPU使用/記憶體使用/磁碟用量/IO/網路流量等等,這是比較粗粒度的。也可以是抽象層次更高的TPS/請求數之類的。

資源可以用來衡量系統的瓶頸。系統能否充分利用資源,什麼時候可以持續提交任務,什麼時候需要暫停提交任務,比如當總體資源充裕時,可以把對應的任務全部提交上去。

● 以Yarn框架介紹為例

file

ResourceManager 是一個全局的資源管理器,負責整個系統的資源管理和分配,包括 scheduler 、Application Manager和 Node Manager。

對調度器來說,YARN 提供了多種直接可用的調度器, Fair Scheduler 和 Capacity Scheduler 等。調度器僅根據各個應用程式的資源需求進行資源分配,分配的基本單位是Container,而容器裡面是將記憶體、CPU、網路、磁碟封裝到一起。

在Yarn的web 界面,我們可以直觀的看到當前Yarn集群剩餘的記憶體、CPU核數、運行的Container數量。對提交到yarn上的任務來說,資源就是:記憶體、CPU、磁碟等可用信息

file

所以在提交到Yarn上執行的任務,我們可以根據ResourceManager 獲取Yarn集群當前剩餘的記憶體、CPU核數來進行判斷,任務能否滿足提交條件等規則。其中,最基本的規則就是:

• Yarn集群剩餘的記憶體 >= 當前任務所需的記憶體

• Yarn集群剩餘的CPU核數 >= 當前任務所需的CPU核數

何時去判斷資源?

任務在界面開發完成之後,點擊運行的按鈕,開始從等待提交的狀態切換。在提交運行的時候,任務組裝好集群配置信息進入下一個階段——資源判斷

在這個階段開始判斷資源是否滿足任務提交。如果任務滿足則進行提交,如果任務不滿足,則定時、延時、重試直到資源滿足任務執行條件。

file

怎樣去判斷資源?

在worker-plugins提交的抽象類中,有一個通用的方法judgeSlots 去判斷資源。

judgeSlots 的判斷結果分為以下四種:

• OK: 資源判斷滿足,任務可以提交

• NOT_OK: 不滿足任務所需資源,需要延時重試

• LIMIT_ERROR: 任務參數設置錯誤: CPU核數或記憶體為0等場景

• EXCEPTION: 任務資源判斷異常: ResourceManager連接異常等場景

file

● 以Spark任務為例

下文我們以Spark任務為例,看看Spark的提交插件是如何獲取對應的ResourceManager信息併進行資源判斷的。

file

可以看到根據Yarn集群信息獲取了以下信息:

• 根據Yarn集群信息初始化YarnClient

• 獲取Yarn集群隊列下的ACCEPTED狀態任務,是否大於控制台yarnAccepterTaskNumber 參數設置

• 獲取Yarn集群隊列的剩餘CPU核數和記憶體信息

file

然後根據JobClient所攜帶的任務參數信息,獲取了Driver、Executor 的相關記憶體和CPU信息併進行計算。

file

最後將獲取到的Yarn集群信息和任務所需的資源信息按照固定規則進行比對,返回對應的資源判斷結果。資源判斷的結果將會實時在 Taier 的界面上展示,所以在任務處於等待提交狀態的時候,可以去控制台->隊列,管理並查看該任務資源判斷信息

file

Taier 未來規劃

展望未來,為進一步提升Taier的使用場景,同時也為了減少Hadoop生態在Taier中的依賴,Taier後續會擴展更多的任務類型。除了支持對接Hadoop集群外,Taier也會陸續支持相關類型的local模式運行,完善更多的場景使用。

Taier團隊非常期待得到每一個人的反饋,能夠和其他優秀開發者共同合作,進一步推動Taier的技術發展。

如果您對Taier有興趣,希望可以參與到我們的建設中來,一起交流,一起進步,為 Taier變得更好貢獻一點你的代碼和意見,這將是我們,同時也是 Taier莫大的榮幸。

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

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


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

-Advertisement-
Play Games
更多相關文章
  • 摘要:AQS 的全稱為(AbstractQueuedSynchronizer),AQS 是一個用來構建鎖和同步器的框架,使用 AQS 能簡單且高效地構造出應用廣泛的大量的同步器。 本文分享自華為雲社區《【高併發】AQS中的CountDownLatch、Semaphore與CyclicBarrier核 ...
  • 題目背景(題目鏈接) 題目描述 給定一個N*M方格的迷宮,迷宮裡有T處障礙,障礙處不可通過。 在迷宮中移動有上下左右四種方式,每次只能移動一個方格。數據保證起點上沒有障礙。 給定起點坐標和終點坐標,每個方格最多經過一次,問有多少種從起點坐標到終點坐標的方案。 輸入格式 第一行為三個正整數 N,M,T ...
  • 當我們在製作PDF文件或者PPT演示文稿的時候,為了讓自己的文件更全面詳細,就會在文件中添加附件。並且將相關文檔附加到 PDF 可以方便文檔的集中管理和傳輸。那麼如何添加或刪除 PDF 中的附件呢?別擔心,我們可以通過編程方式輕鬆實現此操作。下麵是我整理的具體步驟,並附上Java代碼供大家參考。 文 ...
  • Java實現BP神經網路,內含BP神經網路類,採用MNIST數據集,包含伺服器和客戶端程式,可在伺服器訓練後使客戶端直接使用訓練結果,界面有畫板,可以手寫數字 ...
  • 一 引入 考慮實現一種三軸機器人控制項。 三軸機器人用來將某種工件從一個位置運送到另一個位置。 其X軸為手臂軸,可以正向和反向運動,它處於末端,直接接觸工件; 其T軸為旋轉軸,可以對手臂進行旋轉; 其Z軸為升降軸,可以對手臂和旋轉部分進行升降。 二 RobotControl 定義出機器人的軸動作枚舉, ...
  • 前言 相信大家看過不少講C# async await的文章,博客園就能搜到很多,但還是有很多C#程式員不明白。 如果搞不明白,其實也不影響使用。但有人就會疑惑,為什麼要用非同步?我感覺它更慢了,跟同步有啥區別? 有的人研究深入,比如去研究狀態機,可能會明白其中的原理。但深入研究的畢竟少數。有的人寫一些 ...
  • 疑惑 最近在反覆搭建ceph集群過程中,總是遇到osd創建不成功的問題,疑似硬碟殘留信息,排查中引出了很多陌生的命令,比如vgremove等,於是打算重新瞭解這部分。 LVM是什麼? 邏輯捲管理器(LVM,Logical Volume Manager)是一種把硬碟空間分配成邏輯捲的方法。 看到定義可 ...
  • Windows server 2016 搭建DNS伺服器 環境說明: 1、Windows server 2016標準版 實操步驟: 1、添加DNS伺服器功能 1.1、點擊win圖標打開菜單,點擊打開伺服器管理器。 1.2、點擊“ 管理 ”,點擊“ 添加角色和功能 ” 下一步 基於角色或功能的安裝,下 ...
一周排行
    -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中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...