Hadoop YARN配置參數剖析

  • 一 ResourceManager 相關配置參數
    • 1 通信配置參數
    • 2 調度器配置參數
    • 3 內存和 CPU 配置參數
  • 二 NodeManager 相關配置參數
    • 1 內存與 CPU 配置參數
    • 1 日誌配置參數
    • 3 運行配置參數
  • 三 Hadoop YARN 中內存的設置詳解
    • 1 nodemanager 屬性配置
    • 2 動態設置內存大小
    • 3 總結內存配置

注意,配置這些參數前,應充分理解這幾個參數的含義,以防止誤配給集羣帶來的隱患。另外,這些參數均需要在 yarn-site.xml 中配置。


一. ResourceManager 相關配置參數

1.1 通信配置參數

1. yarn.resourcemanager.address

  • 參數解釋:ResourceManager 對客戶端暴露的地址。客戶端通過該地址向 RM 提交應用程序,殺死應用程序等
  • 默認值:${yarn.resourcemanager.hostname}:8032

2. yarn.resourcemanager.scheduler.address

  • 參數解釋:ResourceManager 對 ApplicationMaster 暴露的訪問地址。ApplicationMaster 通過該地址向 RM 申請資源、釋放資源等
  • 默認值:${yarn.resourcemanager.hostname}:8030

3. yarn.resourcemanager.resource-tracker.address

  • 參數解釋:ResourceManager 對 NodeManager 暴露的地址.。NodeManager 通過該地址向 RM 彙報心跳,領取任務等
  • 默認值:${yarn.resourcemanager.hostname}:8031

4. yarn.resourcemanager.admin.address

  • 參數解釋:ResourceManager 對管理員暴露的訪問地址。管理員通過該地址向 RM 發送管理命令等。
  • 默認值:${yarn.resourcemanager.hostname}:8033

5. yarn.resourcemanager.webapp.address

  • 參數解釋:ResourceManager 對外 web ui 地址。用戶可通過該地址在瀏覽器中查看集羣各類信息
  • 默認值:${yarn.resourcemanager.hostname}:8088

1.2 調度器配置參數

1. yarn.resourcemanager.scheduler.class

  • 參數解釋:啓用的資源調度器主類。目前可用的有 FIFO、Capacity Scheduler 和 Fair Scheduler。
  • 默認值:Fair Scheduler (hadoop 2.5)

2. yarn.resourcemanager.resource-tracker.client.thread-count

  • 參數解釋:處理來自 NodeManager 的 RPC 請求的 Handler 數目
  • 默認值:50

3. yarn.resourcemanager.scheduler.client.thread-count

  • 參數解釋:處理來自 ApplicationMaster 的 RPC 請求的 Handler 數目
  • 默認值:50

4. yarn.resourcemanager.nodes.include-path /yarn.resourcemanager.nodes.exclude-path

  • 參數解釋:NodeManager 黑白名單。如果發現若干個 NodeManager 存在問題,比如故障率很高,任務運行失敗率高,則可以將之加入黑名單中。注意,這兩個配置參數可以動態生效。(調用一個 refresh 命令即可)

  • 默認值:“”


5. yarn.resourcemanager.nodemanagers.heartbeat-interval-ms

  • 參數解釋:NodeManager 心跳間隔
  • 默認值:1000(毫秒)

1.3 內存和 CPU 配置參數

1. yarn.scheduler.minimum-allocation-mb/ yarn.scheduler.maximum-allocation-mb

  • 參數解釋:單個可申請的最小/最大內存資源量。比如設置爲 1024 和 3072,則運行 MapRedce 作業時,每個 Task 最少可申請 1024MB 內存,最多可申請 3072MB 內存
  • 默認值:1024/8192

2. yarn.scheduler.minimum-allocation-vcores / yarn.scheduler.maximum-allocation-vcores

  • 參數解釋:單個可申請的最小/最大虛擬 CPU 個數。比如設置爲 1 和 4,則運行 MapRedce 作業時,每個 Task 最少可申請 1 個虛擬 CPU,最多可申請 4 個虛擬 CPU
  • 默認值:1/32



二. NodeManager 相關配置參數

2.1 內存與 CPU 配置參數

1. yarn.nodemanager.resource.memory-mb

  • 參數解釋:NodeManager 總的可用物理內存。注意,該參數是不可修改的,一旦設置,整個運行過程中不 可動態修改。另外,該參數的默認值是 8192 MB,即使你的機器內存不夠 8192 MB,YARN 也會按照這些內存來使用,因此,這個值通過一 定要配置。不過,Apache 已經正在嘗試將該參數做成可動態修改的
  • 默認值:8192

2. yarn.nodemanager.vmem-pmem-ratio

  • 參數解釋:每使用 1MB 物理內存,最多可用的虛擬內存數
  • 默認值:2.1

3. yarn.nodemanager.resource.cpu-vcores

  • 參數解釋:NodeManager總的可用虛擬CPU個數
  • 默認值:8

2.1 日誌配置參數

1. yarn.nodemanager.local-dirs

  • 參數解釋:中間結果存放位置,類似於 1.0 中的 mapred.local.dir。注意,這個參數通常會配置多個目錄,已分攤磁盤IO負載
  • 默認值:${hadoop.tmp.dir}/nm-local-dir

2. yarn.nodemanager.log-dirs

  • 參數解釋:日誌存放地址(可配置多個目錄)。
  • 默認值:${yarn.log.dir}/userlogs

3. yarn.nodemanager.log.retain-seconds

  • 參數解釋:NodeManager上日誌最多存放時間(不啓用日誌聚集功能時有效)。
  • 默認值:10800(3小時)

2.3 運行配置參數

1. yarn.nodemanager.aux-services

  • 參數解釋:NodeManager上運行的附屬服務。需配置成mapreduce_shuffle,纔可運行MapReduce程序
  • 默認值:“”



三. Hadoop YARN 中內存的設置詳解

在 YARN 中,資源管理由 ResourceManager 和 NodeManager 共同完成,其中,ResourceManager 中的調度器負責資源的分配,而 NodeManager 則負責資源的供給和隔離。ResourceManager 將某個 NodeManager 上資源分配給任務(這就是所謂的“資源調度”)後,NodeManager 需按照要求爲任務提供相應的資源,甚至保證這些資源應具有獨佔性,爲任務運行提供基礎的保證,這就是所謂的資源隔離。


3.1 nodemanager 屬性配置

基於以上考慮,YARN 允許用戶配置每個節點上可用的物理內存資源,注意,這裏是“可用的”,因爲一個節點上的內存會被若干個服務共享,比如一部分給 YARN,一部分給 HDFS,一部分給 HBase等,YARN 配置的只是自己可以使用的,配置參數如下:

1. yarn.nodemanager.resource.memory-mb

表示該節點上 YARN 可使用的物理內存總量,默認是 8192(MB),注意,如果你的節點內存資源不夠 8GB,則需要調減小這個值,而 YARN 不會智能的探測節點的物理內存總量。


2. yarn.nodemanager.vmem-pmem-ratio

任務每使用 1MB 物理內存,最多可使用虛擬內存量,默認是2.1。

這裏寫圖片描述


3. yarn.nodemanager.pmem-check-enabled

是否啓動一個線程檢查每個任務正使用的物理內存量,如果任務超出分配值,則直接將其殺掉,默認是true。


4. yarn.nodemanager.vmem-check-enabled

是否啓動一個線程檢查每個任務正使用的虛擬內存量,如果任務超出分配值,則直接將其殺掉,默認是true。


5. yarn.scheduler.minimum-allocation-mb

單個任務可申請的最少物理內存量,默認是1024(MB),如果一個任務申請的物理內存量少於該值,則該對應的值改爲這個數。


6. yarn.scheduler.maximum-allocation-mb

單個任務可申請的最多物理內存量,默認是8192(MB)。

默認情況下,YARN 採用了線程監控的方法判斷任務是否超量使用內存,一旦發現超量,則直接將其殺死。由於 Cgroups 對內存的控制缺乏靈活性(即任務任何時刻不能超過內存上限,如果超過,則直接將其殺死或者報 OOM),而 Java 進程在創建瞬間內存將翻倍,之後驟降到正常值,這種情況下,採用線程監控的方式更加靈活(當發現進程樹內存瞬間翻倍超過設定值時,可認爲是正常現象,不會將任務殺死),因此 YARN 未提供 Cgroups 內存隔離機制。


3.2 動態設置內存大小

可以使用如下命令在提交任務時動態設置:

hadoop jar <jarName> -D mapreduce.map.memory.mb=5120
hadoop jar <jarName> -D mapreduce.reduce.memory.mb=5120

例如如下,其中後面的 1024 及兩個 1 均爲 jar 的輸入參數。

./bin/hadoop jar /home/hadoop/jar-output/TestLoop-1024M.jar -D mapreduce.map.memory.mb=5120 AESEnTest 1024 1 1
或者
 ./bin/hadoop jar /home/hadoop/jar-output/TestLoop-1024M.jar -D mapreduce.map.memory.mb=5120 AESEnTest 1024 1 1

3.3 總結內存配置

當發生如下錯誤

Container [pid=24156,containerID=container_1427332071311_0019_01_000002] is running beyond physical memory limits. Current usage: 2.1 GB of 2 GB physical memory used; 2.7 GB of 4.2 GB virtual memory used. Killing container.

1. 在 RM 內存資源配置——兩個參數(yarn-site.xml)

  • yarn.scheduler.minimum-allocation-mb
  • yarn.scheduler.maximum-allocation-mb

它們表示單個容器可以申請的最小與最大內存


2. 在 NM 內存資源配置(yarn-site.xml)

  • yarn.nodemanager.resource.memory-mb
  • yarn.nodemanager.vmem-pmem-ratio

前者表示單個節點可用的最大內存,RM 中的兩個值都不應該超過該值。 
後者表示虛擬內存率,即佔 task 所用內存的百分比,默認爲 2.1。


3. 在 AM 配置(mapred-site.xml)

  • mapreduce.map.memory.mb
  • mapreduce.reduce.memory.mb

指定 map 和 reduce task 的內存大小,該值應該在 RM 的最大最小 container 之間。如果不設置,則默認用以下規則進行計算:max{MIN_Container_Size,(Total Available RAM/containers)}

一般地,reduce 設置爲 map 的兩倍。

  • mapreduce.map.java.opts
  • mapreduce.reduce.java.opts

這兩個參數是爲需要運行 JVM 程序(java,scala等)準備,通過這兩個參數可以向 JVM 中傳遞參數,與內存有關的是 -Xmx-Xms 等選項,數值的大小應該要在 AM 中的 map.mb 和 reduce.mb 之間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章