Hadoop YARN常見問題以及解決方案

本文彙總了幾個hadoop yarn中常見問題以及解決方案,注意,本文介紹解決方案適用於hadoop 2.2.0以及以上版本。node

(1) 默認狀況下,各個節點的負載不均衡(任務數目不一樣),有的節點不少任務在跑,有的沒有任務,怎樣讓各個節點任務數目儘量均衡呢?算法

答: 默認狀況下,資源調度器處於批調度模式下,即一個心跳會盡量多的分配任務,這樣,優先發送心跳過來的節點將會把任務領光(前提:任務數目遠小於集羣能夠同時運行的任務數量),爲了不該狀況發生,能夠按照如下說明配置參數:併發

若是採用的是fair scheduler,可在yarn-site.xml中,將參數yarn.scheduler.fair.max.assign設置爲1(默認是-1,)負載均衡

若是採用的是capacity scheduler(默認調度器),則不能配置,目前該調度器不帶負載均衡之類的功能。oop

固然,從hadoop集羣利用率角度看,該問題不算問題,由於通常狀況下,用戶任務數目要遠遠大於集羣的併發處理能力的,也就是說,一般狀況下,集羣時刻處於忙碌狀態,沒有節點一直空閒着。xml

 

(2)某個節點上任務數目太多,資源利用率過高,怎麼控制一個節點上的任務數目?隊列

答:一個節點上運行的任務數目主要由兩個因素決定,一個是NodeManager可以使用的資源總量,一個是單個任務的資源需求量,好比一個NodeManager上可用資源爲8 GB內存,8 cpu,單個任務資源需求量爲1 GB內存,1cpu,則該節點最多運行8個任務。內存

NodeManager上可用資源是由管理員在配置文件yarn-site.xml中配置的,相關參數以下:hadoop

yarn.nodemanager.resource.memory-mb:總的可用物理內存量,默認是8096ci

yarn.nodemanager.resource.cpu-vcores:總的可用CPU數目,默認是8

對於MapReduce而言,每一個做業的任務資源量可經過如下參數設置:

mapreduce.map.memory.mb:物理內存量,默認是1024

mapreduce.map.cpu.vcores:CPU數目,默認是1

注:以上這些配置屬性的詳細介紹可參考文章:Hadoop YARN配置參數剖析(1)—RM與NM相關參數

默認狀況,各個調度器只會對內存資源進行調度,不會考慮CPU資源,你須要在調度器配置文件中進行相關設置,具體可參考文章:Hadoop YARN配置參數剖析(4)—Fair Scheduler相關參數Hadoop YARN配置參數剖析(5)—Capacity Scheduler相關參數

 

(3)如何設置單個任務佔用的內存量和CPU數目?

答:對於MapReduce而言,每一個做業的任務資源量可經過如下參數設置:

mapreduce.map.memory.mb:物理內存量,默認是1024

mapreduce.map.cpu.vcores:CPU數目,默認是1

須要注意的是,默認狀況,各個調度器只會對內存資源進行調度,不會考慮CPU資源,你須要在調度器配置文件中進行相關設置。

 

(4) 用戶給任務設置的內存量爲1000MB,爲什麼最終分配的內存倒是1024MB?

答:爲了易於管理資源和調度資源,Hadoop YARN內置了資源規整化算法,它規定了最小可申請資源量、最大可申請資源量和資源規整化因子,若是應用程序申請的資源量小於最小可申請資源量,則YARN會將其大小改成最小可申請量,也就是說,應用程序得到資源不會小於本身申請的資源,但也不必定相等;若是應用程序申請的資源量大於最大可申請資源量,則會拋出異常,沒法申請成功;規整化因子是用來規整化應用程序資源的,應用程序申請的資源若是不是該因子的整數倍,則將被修改成最小的整數倍對應的值,公式爲ceil(a/b)*b,其中a是應用程序申請的資源,b爲規整化因子。

以上介紹的參數需在yarn-site.xml中設置,相關參數以下:

yarn.scheduler.minimum-allocation-mb:最小可申請內存量,默認是1024

yarn.scheduler.minimum-allocation-vcores:最小可申請CPU數,默認是1

yarn.scheduler.maximum-allocation-mb:最大可申請內存量,默認是8096

yarn.scheduler.maximum-allocation-vcores:最大可申請CPU數,默認是4

對於規整化因子,不一樣調度器不一樣,具體以下:

FIFO和Capacity Scheduler,規整化因子等於最小可申請資源量,不可單獨配置。

Fair Scheduler:規整化因子經過參數yarn.scheduler.increment-allocation-mb和yarn.scheduler.increment-allocation-vcores設置,默認是1024和1。

經過以上介紹可知,應用程序申請到資源量可能大於資源申請的資源量,好比YARN的最小可申請資源內存量爲1024,規整因子是1024,若是一個應用程序申請1500內存,則會獲得2048內存,若是規整因子是512,則獲得1536內存。

 

(5)咱們使用的是Fairscheduler,配置了多個隊列,當用戶提交一個做業,指定的隊列不存在時,Fair Scheduler會自動建立一個新隊列而不是報錯(好比報錯:隊列XXX不存在),如何避免這種狀況發生?

答:在yarn-site.xml中設置yarn.scheduler.fair.allow-undeclared-pools,將它的值配置爲false(默認是true)。

相關文章
相關標籤/搜索