1. 程式人生 > >YARN的排程器

YARN的排程器

一:yarn的組成

yarn主要就是為了排程資源,管理任務等。

ResourceManager:yarn上主節點,接收客戶端提交的任務,對資源進行分配

NodeManager:yarn上從節點,主要進行任務計算

ApplicationMaster:ResourceManager接收到任務,會在某個NodeManager上啟動一個ApplicationMaster程序,負責任務執行的資源分配,任務生命週期的監控等。

Container:資源分配的單位,ApplicationMaster向ResourceManager申請資源的單位

JobHistoryServer:檢視已經完成的任務歷史日誌記錄的服務

TimeLineServer:hadoop2.4後新特性,監控yarn上正在執行的所有任務

二:排程器

使用哪種排程器取決於yarn-site.xml當中的

yarn.resourcemanager.scheduler.class  這個屬性的配置

1)佇列排程器(FIFO Scheduler)

按照應用提交順序,排成佇列,一個一個進行資源分配,當第一個資源滿足後進行下一個資源分配。

2)容量排程器(capacity  scheduler)apache預設使用

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

3)公平排程器(Fair Scheduler)CDH預設使用

Fair排程器的設計目標是為所有的應用分配公平的資源(對公平的定義可以通過引數來設定)。公平排程在也可以在多個佇列間工作。舉個例子,假設有兩個使用者A和B,他們分別擁有一個佇列。當A啟動一個job而B沒有任務時,A會獲得全部叢集資源;當B啟動一個job後,A的job會繼續執行,不過一會兒之後兩個任務會各自獲得一半的叢集資源。如果此時B再啟動第二個job並且其它job還在執行,則它將會和B的第一個job共享B這個佇列的資源,也就是B的兩個job會用於四分之一的叢集資源,而A的job仍然用於叢集一半的資源,結果就是資源最終在兩個使用者之間平等的共享

三:常用引數設定

第一個引數:container分配最小記憶體

 yarn.scheduler.minimum-allocation-mb   1024   給應用程式container分配的最小記憶體

 

第二個引數:container分配最大記憶體

 yarn.scheduler.maximum-allocation-mb   8192 給應用程式container分配的最大記憶體

 

第三個引數:每個container的最小虛擬核心個數

yarn.scheduler.minimum-allocation-vcores   1   每個container預設給分配的最小的虛擬核心個數

第四個引數:每個container的最大虛擬核心個數

yarn.scheduler.maximum-allocation-vcores   32  每個container可以分配的最大的虛擬核心的個數

第五個引數:nodeManager可以分配的記憶體大小

yarn.nodemanager.resource.memory-mb   8192  nodemanager可以分配的最大記憶體大小,預設8192Mb