Yarn執行原理
-
yarn的介紹
yarn是hadoop叢集當中的資源管理系統模組,從hadoop2.0開始引入yarn模組,yarn可為各類計算框架提供資源的管理和排程,主要用於管理叢集當中的資源(主要是伺服器的各種硬體資源,包括CPU,記憶體,磁碟,網路IO等)以及排程執行在yarn上面的各種任務。
yarn核心出發點是為了分離資源管理與作業監控,實現分離的做法是擁有一個全域性的資源管理(ResourceManager,RM),以及每個應用程式對應一個的應用管理器(ApplicationMaster,AM)
總結一句話就是說:yarn主要就是為了排程資源,管理任務等。
其排程分為兩個層級來說:
-
一級排程管理:
計算資源管理(CPU,記憶體,網路IO,磁碟)
-
二級排程管理:
任務內部的計算模型管理(AppMaster的任務精細化管理)
-
-
yarn的主要元件介紹與作用
Yarn總體上是Master/Slave結構,主要由ResourceManager、NodeManager、ApplicationMaster和Container等幾個元件構成。
- ResourceManager(RM)負責處理客戶端請求,對各NM上的資源進行統一管理和排程。給ApplicationMaster分配空閒的Container執行並監控其執行狀態。主要由兩個元件構成:排程器和應用程式管理器:
- 排程器(Scheduler):排程器根據容量、佇列等限制條件,將系統中的資源分配給各個正在執行的應用程式。排程器僅根據各個應用程式的資源需求進行資源分配,而資源分配單位是Container。Scheduler不負責監控或者跟蹤應用程式的狀態。總之,排程器根據應用程式的資源要求,以及叢集機器的資源情況,為應用程式分配封裝在Container中的資源。
- 應用程式管理器(Applicatios Manager):應用程式管理器負責管理整個系統中所有應用程式,包括應用程式提交、與排程器協商資源以啟動ApplicationMaster、監控ApplicationMaster執行狀態並在失敗時重新啟動等,跟蹤分給的Container的進度、狀態也是其職責。
- NodeManager(NM):NodeManager是每個節點上的資源和工作管理員。它會定時地向ResourceManager彙報本節點上的資源使用情況和各個Container的執行狀態;同時會接受並處理來自ApplicationMaster的Container啟動/停止等請求。
- ApplicationMaster(AM):使用者提交的應用程式均包含一個ApplicationMaster,負責應用的監控,跟蹤應用執行狀態,重啟失敗任務等。ApplicationMaster是應用框架,它負責向ResourceManager協調資源,並且與NodeManager協同工作完成Task的執行和監控。
- Container:Container是Yarn中的資源抽象,它封裝了某個節點上的多維度資源,如記憶體、CPU、磁碟、網路等,當ApplicationMaster向ResourceManager申請資源時,ResourceManager為ApplicationMaster返回資源便是用Container表示的。
- ResourceManager(RM)負責處理客戶端請求,對各NM上的資源進行統一管理和排程。給ApplicationMaster分配空閒的Container執行並監控其執行狀態。主要由兩個元件構成:排程器和應用程式管理器:
-
yarn的結構和工作流程
-
yarn的排程器
yarn我們都知道主要是用於做資源排程,任務分配等功能的,那麼在hadoop當中,究竟使用什麼演算法來進行任務排程就需要我們關注了,hadoop支援好幾種任務的排程方式,不同的場景需要使用不同的任務排程器。
-
第一種排程器:FIFO Scheduler(佇列排程)
把任務按提交的順序排成一個佇列,這是一個先進先出佇列,在進行資源分配的時候,先給佇列中最頭上的任務進行分配資源,待最頭上任務需求滿足後再給下一個分配,以此類推。
FIFO Scheduler是最簡單也是最容易理解的排程器,也不需要任何配置,但它並不適用於共享叢集。大的任務可能會佔用所有叢集資源,這就導致其它任務被阻塞。
-
第二種排程器:Capacity Scheduler(容量排程器,apache版本預設使用的排程器)
Capacity排程器允許多個組織共享整個叢集,每個組織可以獲得叢集的一部分計算能力。通過為每個組織分配專門的佇列,然後再為每個佇列分配一定的叢集資源,這樣整個叢集就可以通過設定多個佇列的方式給多個組織提供服務了。除此之外,佇列內部又可以垂直劃分,這樣一個組織內部的多個成員就可以共享這個佇列資源了,在一個佇列內部,資源的排程是採用的是先進先出(FIFO)策略。
-
第三種排程器:Fair Scheduler(公平排程器,CDH版本的Hadoop預設使用的排程器)
Fair排程器的設計目標是為了所有的應用分配公平的資源(對公平的定義可以通過引數來設定)。公平排程也可以在多個佇列間工作。舉個例子,假設有兩個使用者A和B,他們分別擁有一個佇列。當A啟動一個Job而B沒有任務時,A會獲得全部叢集資源;當B啟動一個Job後,A的Job會繼續執行,不過一會兒之後兩個任務各自獲得一半的叢集資源。如果此時B再啟動第二個Job並且其它Job還在執行,則它將會和B的第一個Job共享B這個佇列的資源,也就是B的兩個Job會用於四分之一的叢集資源,而A的Job仍然用於叢集一半的資源,結果就是資源最終再兩個使用者之間平等的共享。
-
相關文章
- Hadoop框架:Yarn基本結構和執行原理Hadoop框架Yarn
- Flink 叢集執行原理兼部署及Yarn執行模式深入剖析-Flink牛刀小試Yarn模式
- MapReduce如何作為Yarn應用程式執行?Yarn
- SpringMVC執行原理SpringMVC
- CLR執行原理
- SpringBoot執行原理Spring Boot
- 解析HetuEngine實現On Yarn原理Yarn
- Hadoop Yarn框架原理解析HadoopYarn框架
- Locust 執行原理分析
- 《微機執行原理》
- 前端-JavaScript執行原理前端JavaScript
- MySQL 執行原理【表】MySql
- Spark的執行原理Spark
- Android Animation 執行原理Android
- spark執行原理、模型Spark模型
- Java併發(四)----執行緒執行原理Java執行緒
- 執行yarn報錯-node_modules\pngquant-bin: Command failedYarnAI
- Java執行緒池二:執行緒池原理Java執行緒
- eBPF 執行原理和流程eBPF
- [Spring]MyBatis的執行原理SpringMyBatis
- java多執行緒原理Java執行緒
- MySQL 執行原理【事務】MySql
- 執行緒池原理初探執行緒
- 【多執行緒】ThreadLocal原理執行緒thread
- kill 指令的執行原理
- Spark原理-物理執行圖Spark
- JavaScript執行原理解析JavaScript
- 瀏覽器執行原理瀏覽器
- 執行緒啟動原理執行緒
- spark-submit提交到yarn中執行的log怎麼看?SparkMITYarn
- java多執行緒:執行緒池原理、阻塞佇列Java執行緒佇列
- 從原始碼的角度解析執行緒池執行原理原始碼執行緒
- 【Spark】 Spark作業執行原理--獲取執行結果Spark
- MySQL(三):MySQL的執行原理MySql
- MySQL 執行原理【資料頁】MySql
- View Animation 執行原理解析View
- JMeter實戰(二) 執行原理JMeter
- 談談stream的執行原理