CDH叢集調優:記憶體、Vcores和DRF
吐槽
最近“閒”來無事,透過CM把vcores使用情況調出來看了一眼,發現不論叢集中有多少個任務在跑,已分配的VCores始終不會超過120。而叢集的可用Vcores是360(15臺機器×24虛擬核)。這就相當於CPU資源只用到了1/3,作為一個半強迫症患者絕對不能容忍這樣的事情發生。
分析的過程不表,其實很簡單就是幾個引數的問題。本以為CM能智慧的將這些東西配好,現在看來好像不行。以下記錄結論。
DRF和相關引數
DRF: Dominant Resource Fairness,根據CPU和記憶體公平排程資源。CDH動態資源池預設採用的DRF計劃策略。簡單的理解就是記憶體不夠的時候,多餘的CPU就不會分配任務了,就讓他空著;CPU不夠的時候,多出來的記憶體也不會再啟動任務了。
理解這個計劃策略後,再檢視Yarn啟動任務時資源相關的引數,發現有以下幾個引數可能會產生影響:
- mapreduce.map.memory.mb ,map任務記憶體,cdh預設1G
- mapreduce.map.cpu.vcores ,map任務虛擬CPU核數,cdh預設1
- mapreduce.reduce.memory.mb ,reduce任務記憶體,cdh預設1G
- mapreduce.reduce.cpu.vcores ,reduce任務虛擬CPU核數,cdh預設1
- yarn.nodemanager.resource.memory-mb ,容器記憶體,cdh預設8G
- yarn.nodemanager.resource.cpu-vcores ,容器虛擬CPU核數,cdh預設8,但CM會自動檢測核心數並修改,我這裡被自動改成了24。
可以看到預設配置下,CPU核數和記憶體是1:1G的比例來啟動任務的。
接著檢視了下分配給Yarn的記憶體,果然是8×15=120G,所以可用記憶體比可用vcores(360個)比起來就小太多了,導致按照1:1G的比例下最多隻能使用120個vcores。
以上只是猜想。
測試
為了證實我的猜想,將 yarn.nodemanager.resource.memory-mb 調成了16G(我們記憶體128G,管夠)。重啟yarn後,再次啟動MR,於是有了下圖:
可以看到引數調整前,Yarn可用記憶體為120G,調整後變成了240G;vcores由調整前的120變成了240。至此,證明猜想正確。
所以對於這個叢集來說,由於記憶體為128G,核心為24個,所以完全可以將 yarn.nodemanager.resource.memory-mb 引數調成24G,這樣就能將所有的CPU都利用起來了。
測試結果
yarn.nodemanager.resource.memory-mb 為8G時:
Time taken: 3794.17 secondsTotal MapReduce CPU Time Spent: 3 days 10 hours 43 minutes 22 seconds 640 msec
yarn.nodemanager.resource.memory-mb 為16G時:
Time taken: 2077.138 secondsTotal MapReduce CPU Time Spent: 3 days 12 hours 55 minutes 43 seconds 210 msec
可以看到確實快了很多很多。(ps:兩次跑的任務所用的資料不一樣,以免快取導致第二次跑相同的任務會速度比第一次快,但兩次任務所用的資料量差不多,都在650G左右)
其它
檢視VCores SQL
SELECT allocated_vcores_cumulative, available_vcores where category=YARN_POOL and serviceName="yarn" and queueName=root
檢視分配給Yarn的記憶體 SQL
SELECT allocated_memory_mb_cumulative, available_memory_mb where category=YARN_POOL and serviceName="yarn" and queueName=root
當然最簡單的檢視方式就是在CM的“動態資源池”頁面看。
轉: http://blog.selfup.cn/1631.html?utm_source=tuicool&utm_medium=referral
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30089851/viewspace-2062751/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JVM原理講解和調優,記憶體管理和垃圾回收,記憶體調優JVM記憶體
- oracle 記憶體分配和調優 總結Oracle記憶體
- Android記憶體分析和調優(上)Android記憶體
- Android記憶體分析和調優(中)Android記憶體
- Android記憶體分析和調優(下)Android記憶體
- 記憶體調優實戰記憶體
- 【Spark篇】---Spark調優之程式碼調優,資料本地化調優,記憶體調優,SparkShuffle調優,Executor的堆外記憶體調優Spark記憶體
- SAP ECC6.0記憶體引數調整和調優記憶體
- Oracle記憶體引數調優Oracle記憶體
- JVM效能調優,記憶體分析工具JVM記憶體
- Java虛擬機器學習 - 記憶體調優Java虛擬機機器學習記憶體
- SAP專家培訓之NetweaverABAP記憶體管理和記憶體調優最佳實踐記憶體
- Cloudera Manager安裝 & 搭建CDH叢集Cloud
- CDH安裝大資料叢集大資料
- 大資料之CDH叢集搭建大資料
- 【Spark篇】---Spark中記憶體管理和Shuffle引數調優Spark記憶體
- 效能調優(cpu/IO/JVM記憶體分析)JVM記憶體
- AIX記憶體效能調優(svmon sar vmo)AI記憶體
- 檢視Redis叢集所有節點記憶體工具Redis記憶體
- hadoop-叢集管理(2)——記憶體設定Hadoop記憶體
- SAP專家培訓之Netweaver ABAP記憶體管理和記憶體調優最佳實踐記憶體
- 【JVM】堆體系結構及其記憶體調優JVM記憶體
- hadoop-2.5.0-cdh5.3.6叢集搭建HadoopH5
- Presto記憶體調優及原理(基礎篇)REST記憶體
- Oracle調優-常用表KEEP到記憶體中Oracle記憶體
- 大資料叢集核心引數調優大資料
- 搭建hadoop2/CDH4叢集Hadoop
- JVM記憶體引數詳解及其配置調優JVM記憶體
- UIScrollView調優——節省超過50%記憶體UIView記憶體
- Oracle記憶體引數調優技術詳解Oracle記憶體
- KVM之十一:調整cpu和記憶體記憶體
- (2)Linux效能調優之Linux記憶體體系Linux記憶體
- MongoDB記憶體使用分析和優化MongoDB記憶體優化
- oracle例項記憶體(SGA和PGA)調整Oracle記憶體
- cdh 叢集安裝
- Hadoop叢集安裝-CDH5(5臺伺服器叢集)HadoopH5伺服器
- Hadoop叢集安裝-CDH5(3臺伺服器叢集)HadoopH5伺服器
- 關於redis記憶體分析,記憶體優化Redis記憶體優化