Hadoop yarn資源排程——YARN中的排程
現實中,由於資源是有限的,在一個繁忙的叢集中,YARN應用發出的資源請求無法立刻滿足,實際上一個應用經常需要等待才能得到所需的資源。YARN排程器的工作就是根據既定策略,為應用分配資源。
排程通常是一個難題,並且沒有一個所謂最好的策略。於是YARN提供了多種排程器和可配置策略供我們選擇使用。
排程選項
YARN中,提供了三種排程器供我們選擇。
FIFO Scheduler (佇列排程器)
佇列排程器把應用按提交的順序排成一個佇列,這是一個先進先出佇列,在進行資源分配的時候,先給佇列中最頭上的應用進行分配資源,待最頭上的應用需求滿足後再給下一個分配,以此類推。
佇列排程器是最簡單的排程器,不需要任何配置,但它並不適用於共享叢集。大的應用可能會佔用所有叢集資源,使用佇列排程器就會導致其它應用被阻塞。在共享叢集中,更適合採用Capacity Scheduler或Fair Scheduler,這兩個排程器都允許大任務和小任務在提交的同時獲得一定的系統資源。
capacity scheduler(容量排程器)
容量排程器,是apache版本預設使用的排程器。
它允許多個組織共享整個叢集,每個組織可以獲得叢集的一部分計算能力。通過為每個組織分配專門的佇列,然後再為每個佇列分配一定的叢集資源,這樣整個叢集就可以通過設定多個佇列的方式給多個組織提供服務了。除此之外,佇列內部又可以垂直劃分,這樣一個組織內部的多個成員就可以共享這個佇列資源了,在一個佇列內部,資源的排程是採用的是先進先出(FIFO)策略。
Fair Scheduler(公平排程器)
CDH版本的hadoop預設使用的排程器是公平排程器。
它的設計目標是為所有的應用分配公平的資源(對公平的定義可以通過引數來設定)。公平排程在也可以在多個佇列間工作。舉個例子,假設有兩個使用者A和B,他們分別擁有一個佇列。當A啟動一個job而B沒有任務時,A會獲得全部叢集資源;當B啟動一個job後,A的job會繼續執行,不過一會兒之後兩個任務會各自獲得一半的叢集資源。如果此時B再啟動第二個job並且其它job還在執行,則它將會和B的第一個job共享B這個佇列的資源,也就是B的兩個job會用於四分之一的叢集資源,而A的job仍然用於叢集一半的資源,結果就是資源最終在兩個使用者之間平等的共享。
常用引數配置
使用哪種排程器需要配置yarn-site.xml當中的
yarn.resourcemanager.scheduler.class 這個屬性的配置
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