hadoop常見問題彙總

2021-08-17 08:36:56 字數 2416 閱讀 4533

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

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

答: 預設情況下,資源排程器處於批排程模式下,即乙個心跳會盡可能多的分配任務,這樣,優先傳送心跳過來的節點將會把任務領光(前提:任務數目遠小於集群可以同時執行的任務數量),為了避免該情況發生,可以按照以下說明配置引數:

如果採用的是fair scheduler,可在yarn-site.xml中,將引數yarn.scheduler.fair.max.assign設定為1(預設是-1,)

如果採用的是capacity scheduler(預設排程器),則不能配置,目前該排程器不帶負載均衡之類的功能。

當然,從hadoop集群利用率角度看,該問題不算問題,因為一般情況下,使用者任務數目要遠遠大於集群的併發處理能力的,也就是說,通常情況下,集群時刻處於忙碌狀態,沒有節點一直空閒著。

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

答:乙個節點上執行的任務數目主要由兩個因素決定,乙個是nodemanager可使用的資源總量,乙個是單個任務的資源需求量,比如乙個nodemanager上可用資源為8 gb記憶體,8 cpu,單個任務資源需求量為1 gb記憶體,1cpu,則該節點最多執行8個任務。

yarn.nodemanager.resource.memory-mb:總的可用物理記憶體量,預設是8096

yarn.nodemanager.resource.cpu-vcores:總的可用cpu數目,預設是8

對於mapreduce而言,每個作業的任務資源量可通過以下引數設定:

mapreduce.map.memory.mb:物理記憶體量,預設是1024

mapreduce.map.cpu.vcores:cpu數目,預設是1

預設情況,各個排程器只會對記憶體資源進行排程,不會考慮cpu資源,你需要在排程器配置檔案中進行相關設定。

(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.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會自動建立乙個新佇列而不是報錯(比如報錯:佇列***不存在),如何避免這種情況發生?

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

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

答:從hadoop 日誌入手。

hadoop常見問題

1。執行mapreduce程式出錯,connection to resourcemanager retrying retrying 原因是沒有啟動yarn或者啟動失敗 2.hdfs namenode format 只是初始化了namenode的工作目錄 而datanode的工作目錄是在datanod...

Hadoop 學習筆記十 常見問題彙總

1 could only be replicated to 0 nodes instead of minreplication 1 執行hive時出現這個錯誤,在hadoop上執行jps,發現datanode沒有啟動起來,需要啟動datanode 81 9000.exiting.datanode日誌...

Oracle常見問題彙總

1 如果建立了多個oracle例項,那麼訪問em的時候預設訪問的是第乙個例項的,如何訪問第二個呢?看下這個檔案就會明白了 oracle home install portlist.ini enterprise manager console http 埠 shili1 1158 enterprise...