- 一 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 之間。