首頁技術(shù)文章正文

hadoop yarn中常見問題以及解決方案

更新時間:2019-01-10 來源:黑馬程序員 瀏覽量:

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

  (1) 默認情況下,各個節(jié)點的負載不均衡(任務(wù)數(shù)目不同),有的節(jié)點很多任務(wù)在跑,有的沒有任務(wù),怎樣讓各個節(jié)點任務(wù)數(shù)目盡可能均衡呢?

  答: 默認情況下,資源調(diào)度器處于批調(diào)度模式下,即一個心跳會盡可能多的分配任務(wù),這樣,優(yōu)先發(fā)送心跳過來的節(jié)點將會把任務(wù)領(lǐng)光(前提:任務(wù)數(shù)目遠小于集群可以同時運行的任務(wù)數(shù)量),為了避免該情況發(fā)生,可以按照以下說明配置參數(shù):

  如果采用的是fair scheduler,可在yarn-site.xml中,將參數(shù)yarn.scheduler.fair.max.assign設(shè)置為1(默認是-1)

  如果采用的是capacity scheduler(默認調(diào)度器),則不能配置,目前該調(diào)度器不帶負載均衡之類的功能。

  當然,從hadoop集群利用率角度看,該問題不算問題,因為一般情況下,用戶任務(wù)數(shù)目要遠遠大于集群的并發(fā)處理能力的,也就是說,通常情況下,集群時刻處于忙碌狀態(tài),沒有節(jié)點一直空閑著。

  (2)某個節(jié)點上任務(wù)數(shù)目太多,資源利用率太高,怎么控制一個節(jié)點上的任務(wù)數(shù)目?

  答:一個節(jié)點上運行的任務(wù)數(shù)目主要由兩個因素決定,一個是NodeManager可使用的資源總量,一個是單個任務(wù)的資源需求量,比如一個NodeManager上可用資源為8 GB內(nèi)存,8 cpu,單個任務(wù)資源需求量為1 GB內(nèi)存,1cpu,則該節(jié)點最多運行8個任務(wù)。

  NodeManager上可用資源是由管理員在配置文件yarn-site.xml中配置的,相關(guān)參數(shù)如下:

  yarn.nodemanager.resource.memory-mb:總的可用物理內(nèi)存量,默認是8096

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

  對于MapReduce而言,每個作業(yè)的任務(wù)資源量可通過以下參數(shù)設(shè)置:

  mapreduce.map.memory.mb:物理內(nèi)存量,默認是1024

  mapreduce.map.cpu.vcores:CPU數(shù)目,默認是1

  默認情況,各個調(diào)度器只會對內(nèi)存資源進行調(diào)度,不會考慮CPU資源,你需要在調(diào)度器配置文件中進行相關(guān)設(shè)置。

  (3)如何設(shè)置單個任務(wù)占用的內(nèi)存量和CPU數(shù)目?

  答:對于MapReduce而言,每個作業(yè)的任務(wù)資源量可通過以下參數(shù)設(shè)置:

  mapreduce.map.memory.mb:物理內(nèi)存量,默認是1024

  mapreduce.map.cpu.vcores:CPU數(shù)目,默認是1

  需要注意的是,默認情況,各個調(diào)度器只會對內(nèi)存資源進行調(diào)度,不會考慮CPU資源,你需要在調(diào)度器配置文件中進行相關(guān)設(shè)置。

  (4) 用戶給任務(wù)設(shè)置的內(nèi)存量為1000MB,為何最終分配的內(nèi)存卻是1024MB?

  答:為了易于管理資源和調(diào)度資源,Hadoop YARN內(nèi)置了資源規(guī)整化算法,它規(guī)定了最小可申請資源量、最大可申請資源量和資源規(guī)整化因子,如果應(yīng)用程序申請的資源量小于最小可申請資源量,則YARN會將其大小改為最小可申請量,也就是說,應(yīng)用程序獲得資源不會小于自己申請的資源,但也不一定相等;如果應(yīng)用程序申請的資源量大于最大可申請資源量,則會拋出異常,無法申請成功;規(guī)整化因子是用來規(guī)整化應(yīng)用程序資源的,應(yīng)用程序申請的資源如果不是該因子的整數(shù)倍,則將被修改為最小的整數(shù)倍對應(yīng)的值,公式為ceil(a/b)*b,其中a是應(yīng)用程序申請的資源,b為規(guī)整化因子。

  以上介紹的參數(shù)需在yarn-site.xml中設(shè)置,相關(guān)參數(shù)如下:

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

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

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

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

  對于規(guī)整化因子,不同調(diào)度器不同,具體如下:

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

  Fair Scheduler:規(guī)整化因子通過參數(shù)yarn.scheduler.increment-allocation-mb和yarn.scheduler.increment-allocation-vcores設(shè)置,默認是1024和1。

  通過以上介紹可知,應(yīng)用程序申請到資源量可能大于資源申請的資源量,比如YARN的最小可申請資源內(nèi)存量為1024,規(guī)整因子是1024,如果一個應(yīng)用程序申請1500內(nèi)存,則會得到2048內(nèi)存,如果規(guī)整因子是512,則得到1536內(nèi)存。

  (5)我們使用的是Fairscheduler,配置了多個隊列,當用戶提交一個作業(yè),指定的隊列不存在時,F(xiàn)air Scheduler會自動創(chuàng)建一個新隊列而不是報錯(比如報錯:隊列XXX不存在),如何避免這種情況發(fā)生?

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

  (6)使用Hadoop 2.0過程中,遇到了錯誤,怎樣排查錯誤?

  答:從hadoop 日志入手。



作者:黑馬程序員大數(shù)據(jù)培訓(xùn)學(xué)院
首發(fā):http://cloud.itheima.com

分享到:
在線咨詢 我要報名
和我們在線交談!