CDH集群之YARN性能調優


本文主要討論CDH集群的YARN調優配置,關於YARN的調優配置,主要關注CPU和內存的調優,其中CPU是指物理CPU個數乘以CPU核數,即Vcores = CPU數量*CPU核數。YARN是以container容器的形式封裝資源的,task在container內部執行。

集群配置

集群的配置主要包括三步,第一是先規划集群的工作主機以及每台主機的配置,第二是規划每台主機的安裝的組件及其資源分配,第三是規划集群的規模大小。

工作主機的配置

如下表所示:主機的內存為256G,4個6核CPU,CPU支持超線程,網絡帶寬為2G
主機     組件 數量   大小 總計   描述
RAM 256G
256G 內存大小
CPU 4 6 48 總CPU核數
HyperThreading CPU YES

超線程CPU,使操作系統認為處理器的核心數是實際核心數的2倍,因此如果有24個核心的處理器,操作系統會認為處理器有48個核心
網絡 2 1G 2G 網絡帶寬


工作主機安裝組件配置

第一步已經明確每台主機的內存和CPU配置,下面為每台節點的服務分配資源,主要分配CPU和內存。
服務 類別 CPU核數 內存(MB) 描述
操作系統 Overhead 1 8192 為操作系統分配1核8G內存,一般4~8G
其它服務 Overhead 0 0 非CDH集群、非操作系統占用的資源
Cloudera Manager agent Overhead 1 1024 分配1核1G
HDFS DataNode CDH 1 1024 默認1核1G
YARN NodeManager CDH 1 1024 默認1核1G
Impala daemon CDH 0 0 可選的服務,建議至少為impala demon分配16G內存
Hbase RegionServer CDH 0 0 可選的服務,建議12~16G內存
Solr Server CDH 0 0 可選的服務,最低1G內存
Kudu Server CDH 0 0 可選的服務,kudu Tablet server最低1G內存
Available Container Resources
44 250880 剩余分配給yarn的container

container資源分配Physical Cores to Vcores Multiplier:每個container的cpu core的並發線程數,本文設置為1


YARN Available Vcores:YARN可用的CPU核數=Available Container  Resources * Physical Cores to Vcores Multiplier,即為44

YARN Available Memory:250880

集群大小

集群的工作節點個數:10

YARN配置

YARN NodeManager配置屬性

配置參數 描述
yarn.nodemanager.resource.cpu-vcores 44 yarn 的nodemanager分配44核,每台節點剩余的CPU
yarn.nodemanager.resource.memory-mb 250800 分配的內存大小,每台節點剩余的內存


驗證YARN的配置

登錄YARN的resourcemanager的WEBUI: http://<ResourceManagerIP>:8088/ ,驗證'Memory Total'與'Vcores Total',如果節點都正常,那么Vcores Total應該為440,Memory應該為2450G,即250800/1024*10

YARN的container配置

YARN的container的Vcore配置
配置參數 描述
yarn.scheduler.minimum-allocation-vcores 1 分配給container的最小vcore個數
yarn.scheduler.maximum-allocation-vcores 44 分配給container的最大vcore數
yarn.scheduler.increment-allocation-vcores 1 容器虛擬CPU內核增量


YARN的container內存配置
配置參數 描述
yarn.scheduler.minimum-allocation-mb 1024 分配給container的最小內存大小,為1G
yarn.scheduler.maximum-allocation-mb 250880 分配給container的最大內存,等於245G,即為每台節點剩余的最大內存
yarn.scheduler.increment-allocation-mb 512 容器內存增量,默認512M


集群資源分配估計

描述 最小值 最大值
根據每個container的最小內存分配,集群最大的container數量為
2450
根據每個container的最小Vcore分配,集群最大的container數量為
440
根據每個container的最大內存分配,集群的最小container數為 10
根據每個container的最大Vcores分配,集群的最小container數為 10


container合理配置檢查

配置約束 描述
最大的Vcore數量必須大於等於分配的最小Vcore數 yarn.scheduler.maximum-allocation-vcores >= yarn.scheduler.minimum-allocation-vcores
分配的最大內存數必須大於等於分配的最小內存數 yarn.scheduler.maximum-allocation-mb >= yarn.scheduler.minimum-allocation-mb
分配的最小核數必須大於等於0 yarn.scheduler.minimum-allocation-vcores >= 0
分配的最大Vcore數必須大於等於1 yarn.scheduler.maximum-allocation-vcores >= 1
每台主機分配給nodemanaer的vcore總數必須大於分配的最小vcore數 yarn.nodemanager.resource.cpu-vcores >= yarn.scheduler.minimum-allocation-vcores
每台主機分配給nodemanaer的vcore總數必須大於分配的最大vcore數 yarn.nodemanager.resource.cpu-vcores >= yarn.scheduler.maximum-allocation-vcores
每台主機分配給nodemanaer的內存必須大於調度分配的最小內存 yarn.nodemanager.resource.memory-mb >= yarn.scheduler.maximum-allocation-mb
每台主機分配給nodemanaer的內存必須大於調度分配的最大內存 yarn.nodemanager.resource.memory-mb >= yarn.scheduler.minimum-allocation-mb
container最小配置 如果yarn.scheduler.minimum-allocation-mb小於1GB,container可能會被YARN殺死,因為會出現OutOfMemory內存溢出的現象


MapReduce配置

ApplicationMaster配置

配置參數 取   值 描述
yarn.app.mapreduce.am.resource.cpu-vcores 1 ApplicationMaster 的虛擬CPU內核數
yarn.app.mapreduce.am.resource.mb 1024 ApplicationMaster的物理內存要求(MiB)
yarn.app.mapreduce.am.command-opts 800 傳遞到 MapReduce ApplicationMaster 的 Java 命令行參數,AM Java heap 大小,為800M


堆與容器大小之比

配置參數 取值   描述
task自動堆大小 yes
mapreduce.job.heap.memory-mb.ratio 0.8 Map 和 Reduce 任務的堆大小與容器大小之比。堆大小應小於容器大小,以允許 JVM 的某些開銷,默認為0.8


map task配置

配置參數 描述
mapreduce.map.cpu.vcores 1 分配給map task的vcore數
mapreduce.map.memory.mb 1024 分配給map task的內存數,1G
mapreduce.task.io.sort.mb 400 I/O 排序內存緩沖 (MiB),默認256M,一般不用修改


reduce task配置

配置參數 描述
mapreduce.reduce.cpu.vcores 1 分配給reduce task的vcore數
mapreduce.reduce.memory.mb 1024 分配給reduce task的內存數,1G


MapReduce配置合理性檢查

  • Application Master配置的合理性檢查

yarn.scheduler.minimum-allocation-vcores <=  yarn.app.mapreduce.am.resource.cpu-vcores<= yarn-scheduler.maximum-allocation-vcores

yarn.scheduler.minimum-allocation-mb <= yarn.app.mapreduce.am.resource.cpu-vcores <= yarn.scheduler.maximum-allocation-mb  

Java Heap大小是container大小的75%~90%: 太低會造成資源浪費, 太高會造成OOMMap Task配置的合理性檢查

  • Reduce Task配置的合理性檢查

yarn.scheduler.minimum-allocation-vcores <= mapreduce.map.cpu.vcores <= yarn-scheduler.maximum-allocation-vcores

yarn.scheduler.minimum-allocation-mb <= mapreduce.map.memory.mb <= yarn.scheduler.maximum-allocation-mb

Spill/Sort內存為每個task堆內存的40%~60%

  • Reduce Task配置的合理性檢查

yarn.scheduler.minimum-allocation-vcores <= mapreduce.reduce.cpu.vcores <= yarn-scheduler.maximum-allocation-vcores  

yarn.scheduler.minimum-allocation-mb <= mapreduce.reduce.memory.mb <= yarn.scheduler.maximum-allocation-mb

YARN和MapReduce配置參數總結


YARN/MapReduce參數配置 描述
yarn.nodemanager.resource.cpu-vcores 分配給container的虛擬cpu數
yarn.nodemanager.resource.memory-mb 分配給container的內存大小
yarn.scheduler.minimum-allocation-vcores 分配給container的最小虛擬cpu數
yarn.scheduler.maximum-allocation-vcores 分配給container的最大虛擬cpu數
yarn.scheduler.increment-allocation-vcores 分配給container的遞增虛擬cpu數
yarn.scheduler.minimum-allocation-mb 分配給container的最小內存大小
yarn.scheduler.maximum-allocation-mb 分配給container的最大內存
yarn.scheduler.increment-allocation-mb 分配給container的遞增內存大小
yarn.app.mapreduce.am.resource.cpu-vcores ApplicationMaste的虛擬cpu數
yarn.app.mapreduce.am.resource.mb ApplicationMaste的內存大小
mapreduce.map.cpu.vcores map task的虛擬CPU數
mapreduce.map.memory.mb map task的內存大小
mapreduce.reduce.cpu.vcores reduce task的虛擬cpu數
mapreduce.reduce.memory.mb reduce task的內存大小
mapreduce.task.io.sort.mb I/O排序內存大小


note:在CDH5.5或者更高版本中,參數mapreduce.map.java.opts, mapreduce.reduce.java.opts, yarn.app.mapreduce.am.command-opts 會基於container堆內存的比例進行自動配置
END




“閱讀原文”一起來充電吧!                   

本文分享自微信公眾號 - 大數據技術與數倉(gh_95306769522d)。
如有侵權,請聯系 support@oschina.cn 刪除。
本文參與“OSC源創計划”,歡迎正在閱讀的你也加入,一起分享。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM