集群配置
工作主機的配置
| 主機 組件 | 數量 | 大小 | 總計 | 描述 |
| RAM | 256G | 256G | 內存大小 | |
| CPU | 4 | 6 | 48 | 總CPU核數 |
| HyperThreading CPU | YES | 超線程CPU,使操作系統認為處理器的核心數是實際核心數的2倍,因此如果有24個核心的處理器,操作系統會認為處理器有48個核心 | ||
| 網絡 | 2 | 1G | 2G | 網絡帶寬 |
工作主機安裝組件配置
| 服務 | 類別 | 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配置
YARN NodeManager配置屬性
| 配置參數 | 值 | 描述 |
| yarn.nodemanager.resource.cpu-vcores | 44 | yarn 的nodemanager分配44核,每台節點剩余的CPU |
| yarn.nodemanager.resource.memory-mb | 250800 | 分配的內存大小,每台節點剩余的內存 |
驗證YARN的配置
YARN的container配置
| 配置參數 | 值 | 描述 |
| yarn.scheduler.minimum-allocation-vcores | 1 | 分配給container的最小vcore個數 |
| yarn.scheduler.maximum-allocation-vcores | 44 | 分配給container的最大vcore數 |
| yarn.scheduler.increment-allocation-vcores | 1 | 容器虛擬CPU內核增量 |
| 配置參數 | 值 | 描述 |
| 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排序內存大小 |
本文分享自微信公眾號 - 大數據技術與數倉(gh_95306769522d)。
如有侵權,請聯系 support@oschina.cn 刪除。
本文參與“OSC源創計划”,歡迎正在閱讀的你也加入,一起分享。
