YARN基礎概念

2021-09-27 03:51:13 字數 3098 閱讀 2799

執行流程

排程器 scheduler

排程器的搶占和延遲排程

yarn應用的生命週期

apache hadoop yarn (yet another resource negotiator,另一種資源協調者)是一種新的 hadoop 資源管理器,它是乙個通用資源管理系統和排程平台,可為上層應用提供統一的資源管理和排程,它的引入為集群在利用率、資源統一管理和資料共享等方面帶來了巨大好處。

可以把 yarn 理解為相當於乙個分布式的作業系統平台,而 mapreduce 等運算程式則相當於執行於作業系統之上的應用程式,yarn 為這些程式提供運算所需的資源(記憶體、cpu)。

yarn 並不清楚使用者提交的程式的執行機制

yarn 只提供運算資源的排程(使用者程式向 yarn 申請資源,yarn 就負責分配資源)

yarn 中的主管角色叫 resourcemanager

yarn 中具體提供運算資源的角色叫 nodemanager

yarn 與執行的使用者程式完全解耦,意味著 yarn 上可以執行各種型別的分布式運算程式,比如 mapreduce、storm,spark,tez ……

spark、storm 等運算框架都可以整合在 yarn 上執行,只要他們各自的框架中有符合 yarn 規範的資源請求機制即可

yarn 成為乙個通用的資源排程平台.企業中以前存在的各種運算集群都可以整合在乙個物理集群上,提高資源利用率,方便資料共享

負責與 rm 排程器協商以獲取資源(用 container 表示)。

將得到的任務進一步分配給內部的任務(資源的二次分配)。

與 nm 通訊以啟動/停止任務。

監控所有任務執行狀態,並在任務執行失敗時重新為任務申請資源以重啟任務。

應用執行期間,client 直接與 am 通訊獲取應用的狀態、進度更新等資訊。

理想情況下,我們應用對 yarn 資源的請求應該立刻得到滿足,但現實情況資源往往是有限的,特別是在乙個很繁忙的集群,乙個應用資源的請求經常需要等待一段時間才能的到相應的資源。在 yarn 中,負責給應用分配資源的就是 scheduler。其實排程本身就是乙個難題,很難找到乙個完美的策略可以解決所有的應用場景。為此,yarn 提供了多種排程器和可配置的策略供我們選擇。

在 yarn 中有三種排程器可以選擇:fifo scheduler ,capacity scheduler,fair scheduler。

fifo scheduler 把應用按提交的順序排成乙個佇列,這是乙個先進先出佇列,在進行資源分配的時候,先給佇列中最頭上的應用進行分配資源,待最頭上的應用需求滿足後再給下乙個分配,以此類推。

fifo scheduler 是最簡單也是最容易理解的排程器,也不需要任何配置,但它並不適用於共享集群。大的應用可能會占用所有集群資源,這就導致其它應用被阻塞。在共享集群中,更適合採用 capacity scheduler 或 fair scheduler,這兩個排程器都允許大任務和小任務在提交的同時獲得一定的系統資源。

capacity scheduler

capacity 排程器允許多個組織共享整個集群,每個組織可以獲得集群的一部分計算能力。通過為每個組織分配專門的佇列,然後再為每個佇列分配一定的集群資源,這樣整個集群就可以通過設定多個佇列的方式給多個組織提供服務了。除此之外,佇列內部又可以垂直劃分,這樣乙個組織內部的多個成員就可以共享這個佇列資源了,在乙個佇列內部,資源的排程是採用的是先進先出(fifo)策略。

在 fair 排程器中,我們不需要預先占用一定的系統資源,fair 排程器會為所有執行的 job 動態的調整系統資源。如下圖所示,當第乙個大 job 提交時,只有這乙個 job 在執行,此時它獲得了所有集群資源;當第二個小任務提交後,fair 排程器會分配一半資源給這個小任務,讓這兩個任務公平的共享集群資源。

需要注意的是,在下圖 fair 排程器中,從第二個任務提交到獲得資源會有一定的延遲,因為它需要等待第乙個任務釋放占用的 container。小任務執行完成之後也會釋放自己占用的資源,大任務又獲得了全部的系統資源。最終效果就是 fair 排程器即得到了高的資源利用率又能保證小任務及時完成。

所謂搶占,就是允許排程器終止那些占用資源超過了其公平共享份額的佇列的容器,這些容器資源釋放後可以分配給資源數量低於應得份額的佇列。注意,搶占會降低整個集群的效率,因為被終止的containers需要重新執行。

通過將 yarn.scheduler.fair.preemption 設定為true,可以全面啟用搶占功能。有兩個相關的搶占超時設定:乙個用於最小共享(minimum share preemptiontimeout),另乙個用於公平共享(fair share preemption timeout),兩者設定時間均為秒級。預設情況下,兩個超時引數均不設定。所以為了允許搶占容器,需要至少設定其中乙個超時引數。

所有的yarn排程器都試圖以本地請求為重。在乙個繁忙的集群上,如果乙個應用請求某個節點,那麼極有可能此時有其他容器正在該節點上執行。顯而易見的處理是,立刻放寬本地性需求,在同一機架中分配乙個容器。然而,通過實踐發現,此時如果等待一小段時間(不超過幾秒),能夠戲劇性的增加在所請求的節點上分配到乙個容器的機會,從而可以提高集群的效率。這個特性稱之為延遲排程(delay scheduling)。容量排程器和公平排程器都支援延遲排程。

附:apache slider、apache twil、apache helix 類似,在不對程式進行修改的情況下,在yarn上快速部署應用程式。

Yarn 基礎使用

一款代替代npm的包管理工具 安裝yarn npm install g yarn 初始化yarn init 安裝包yarn 安裝專案的全部依賴 yarn install yarn install 安裝package.json裡所有包,並將包及它的所有依賴項儲存進yarn.lock yarn inst...

yarn基礎解釋

yarn 對你的 來說是乙個包管理器,你可以通過它使用全世界開發者的 或者分享自己的 通過包 package 或者稱為模組 module 的方式來共享。乙個包裡包含所有需要共享的 以及描述包資訊的檔案,稱為package.json。npm和yarn是競爭關係的包管理器。命令有相似,具體 migrat...

Yarn的基本概念

1.hadoop1.0與hadoop2.0結構 1.應用程式的master,每乙個應用對應乙個am,在使用者提交乙個應用程式時,乙個am的輕量型程序例項會啟動,am協調應用程式內的所有任務的執行 2.負責乙個job生命週期內的所有工作,類似舊的jobtracker 3.每乙個job都有乙個am,執行...