Hadoop Yarn 生產(chǎn)資源配置

我司生產(chǎn)環(huán)境的大數(shù)據(jù)集群是用CDH部署的 版本有5.11.1? ? 5.14.1? ? 5.16.1 這三個版本.

這里主要是講一下生產(chǎn)上面 Hadoop的資源配置情況

一、DataNode配置

為了計算時保證數(shù)據(jù)本地化,DataNode進程所在的節(jié)點上也會部署NodeManager進程,做到存儲計算一體

DataNode的內(nèi)存資源配置 2G內(nèi)存,如果數(shù)據(jù)量比較大 可以設(shè)置3G 甚至4G。我司生產(chǎn)上配了2G


二、NodeManager配置

NodeManager的內(nèi)存資源配置為4G,一般4G已經(jīng)夠用了


三、Container配置說明

相關(guān)參數(shù)文檔參見:http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.16.1/hadoop-yarn/hadoop-yarn-common/yarn-default.xml

生產(chǎn)上的機器內(nèi)存是96G 12個核 我們一般預(yù)留了20%的內(nèi)存作為系統(tǒng)預(yù)留,用來支撐系統(tǒng)運行、CM的agent的運行、其他非CDH的組件的運行及將來可能部署的組件預(yù)留

96*(1-20%)=76.8G

大約算成76G內(nèi)存 除去DataNode和NodeManager的內(nèi)存,留給Container的最大可用內(nèi)存為70G

相關(guān)參數(shù)(在CM的web界面上修改配置):

yarn.nodemanager.resource.memory-mb 該參數(shù)是用來指定可以給Container用的物理內(nèi)存 默認8192MB ,需要修改

yarn.scheduler.minimum-allocation-mb 該參數(shù)指定一個Container最小需要的內(nèi)存 默認1024MB,一般不需要修改

yarn.scheduler.maximum-allocation-mb 該參數(shù)指定一個Container最大可以申請的內(nèi)存 默認8192MB,需要修改

yarn.scheduler.increment-allocation-mb 該參數(shù)是容器內(nèi)存增量,表示內(nèi)存會自動增加,在CDH官方文檔上沒有這個參數(shù),但CM的web頁面上有,一般不調(diào)整 我們生產(chǎn)上默認是512MB,表示容器內(nèi)存不夠時默認以512MB的大小增加Container內(nèi)存


四、Container vcore配置說明

虛擬core ,是yarn自己設(shè)計引入的概念,設(shè)計初衷是考慮不同的機器的CPU的性能不一樣。比如某個服務(wù)器的CPU的性能是另外一臺CPU的2倍,那么可以設(shè)置第一臺服務(wù)器的虛擬core為2,另外CPU弱一點的那臺的虛擬core為1,盡量保證每臺服務(wù)器的虛擬core的性能差不多。

計算的時候,并發(fā)任務(wù)是靠vcore來進行計算的,而不是物理core

相關(guān)參數(shù):

yarn.nodemanager.resource.cpu-vcores 該參數(shù)是指定這個NodeManager節(jié)點上總共可分配的vcore數(shù),默認為8個,要根據(jù)實際情況調(diào)整

yarn.scheduler.minimum-allocation-vcores 該參數(shù)指定一個Container最少需要的vcore數(shù),默認為1個

yarn.scheduler.maximum-allocation-vcores 該參數(shù)指定一個Container最多可以分配的vcore數(shù),默認為4個

yarn.nodemanager.resource.pcores-vcores-multiplier 該參數(shù)文檔要參考apache hadoop官方文檔,表示當yarn.nodemanager.resource.cpu-vcores參數(shù)設(shè)置為-1且yarn.nodemanager.resource.detect-hardware-capabilities為true的情況下,需要根據(jù)物理core來進行vcore的計算,即物理core數(shù) * yarn.nodemanager.resource.pcores-vcores-multiplier。實際生產(chǎn)中,該參數(shù)統(tǒng)一設(shè)置為2,即一個物理core計算為2個vcore。該參數(shù)參考:https://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-common/yarn-default.xml

五、生產(chǎn)上如何計算CPU、內(nèi)存配置

生產(chǎn)上服務(wù)器配置為96G 內(nèi)存 12個物理核

計算CPU配置:

cloudera公司推薦:一個Container最大的vcore個數(shù)不要超過5個(實踐經(jīng)驗值)

所以?yarn.scheduler.maximum-allocation-vcores參數(shù)可以設(shè)置為4? ? yarn.scheduler.minimum-allocation-vcores默認為1即可

線上12個物理core,按照?yarn.nodemanager.resource.pcores-vcores-multiplier為2進行計算,總共有24個vcore 即 :

yarn.nodemanager.resource.cpu-vcores 為24

yarn.scheduler.increment-allocation-vcores 為1 表示申請vcore以該值遞增

如果只考慮NodeManager ,不考慮HBase的ResourceManager等其它組件的話,極限情況下可以申請 24/4 = 6 個Container?

注意:CPU一般不做系統(tǒng)預(yù)留

計算內(nèi)存配置:

既然我極限情況下可以申請6個Container,而內(nèi)存最大可用70G內(nèi)存

那么參數(shù):

yarn.scheduler.maximum-allocation-mb 設(shè)置為 70/6 = 11G

yarn.scheduler.minimum-allocation-mb 默認1G即可

注意:

以上計算配置的方式中是通過確定cpu的配置,然后再來配置內(nèi)存的配置,從而確定一個Container最大可申請多少內(nèi)存。如果一些Spark任務(wù)需要申請的內(nèi)存比較大,那么相應(yīng)的配置就應(yīng)該以內(nèi)存為主要配置項。

假設(shè)最大的Spark任務(wù)需要申請一個Container的內(nèi)存為14G,那么參數(shù)配置如下:

yarn.nodemanager.resource.pcores-vcores-multiplier為 2

yarn.nodemanager.resource.cpu-vcores 為 24

yarn.scheduler.maximum-allocation-vcores 為 4

?yarn.scheduler.minimum-allocation-vcores 為 1

yarn.scheduler.minimum-allocation-mb 為 1G

yarn.scheduler.maximum-allocation-mb 為 14G

如此配置下,申請內(nèi)存極限情況下可以申請5個Container,用到 5* 4個vcore

六、生產(chǎn)上其他配置項

yarn.nodemanager.pmem-check-enabled 檢查一個Container的內(nèi)存是否超過物理內(nèi)存 默認為true? 需要修改為false

yarn.nodemanager.vmem-check-enabled 檢查一個Container的內(nèi)存是否超過虛擬內(nèi)存 默認為false? 保持默認

yarn.nodemanager.vmem-pmem-ratio 該參數(shù)表示虛擬內(nèi)存與物理內(nèi)存的比值 默認為2.1 一般不做改動


七、CDH提供的yarn配置Excel

參見:

http://tiny.cloudera.com/yarn-tuning-guide

https://docs.cloudera.com/documentation/enterprise/5-16-x/topics/cdh_ig_yarn_tuning.html

CDH官網(wǎng)的這個文檔很有意思 ,通過一個Excel的形式 ,讓我們一步一步的做yarn的配置和MapReduce的配置,在集群配置沒有思路的時候可以參考

八、集群中還有別的組件時的配置

假如服務(wù)器是256G內(nèi)存,32個物理核,而我們要部署Yarn、HBase Region Server組件,此時,該如何配置

內(nèi)存:

????系統(tǒng)預(yù)留:因服務(wù)器內(nèi)存較大,可以考慮預(yù)留比較縮小,比如預(yù)留10%到15%之間,這里我們考慮預(yù)留12.5%? 即預(yù)留32G內(nèi)存

????DataNode:2G內(nèi)存

????NodeManager:4G內(nèi)存

????HBase Region Server:30G內(nèi)存(視數(shù)據(jù)量而定,但JVM有個神奇的32G定律,包括Elasticsearch也推薦一個JVM內(nèi)存不要超過32G。如果數(shù)據(jù)量較大 ,可以考慮設(shè)置64G內(nèi)存給HBase Region Server)

????Container總共可用內(nèi)存:256 - 32 - 2 - 4 - 30 =188G內(nèi)存

CPU:

? ??yarn.nodemanager.resource.pcores-vcores-multiplier 為2 個

????yarn.nodemanager.resource.cpu-vcores為 32 * 2=64 個

? ??yarn.scheduler.maximum-allocation-vcores 為4 個

? ??yarn.scheduler.minimum-allocation-vcores 為1 個

????yarn.scheduler.increment-allocation-vcores 為1個

? ? 所以 極限情況下 我們可以申請到16個Container

內(nèi)存:

? ??yarn.scheduler.minimum-allocation-mb 為 1G

? ??yarn.scheduler.maximum-allocation-mb 為 188*1024/16 約為11G

? ??yarn.scheduler.increment-allocation-mb 為默認512MB



九、HDP的配置計算方式

詳見:https://docs.cloudera.com/HDPDocuments/HDP2/HDP-2.1.1/bk_installing_manually_book/content/rpm-chap1-11.html

雖然我們生產(chǎn)都是使用CDH來部署大數(shù)據(jù)集群,不過HDP的這種計算思路,也可以參考一下


十、參考文檔

https://docs.cloudera.com/documentation/enterprise/5-16-x/topics/cdh_ig_yarn_tuning.html

http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.16.1/hadoop-yarn/hadoop-yarn-common/yarn-default.xml

https://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-common/yarn-default.xml

https://docs.cloudera.com/HDPDocuments/HDP2/HDP-2.1.1/bk_installing_manually_book/content/rpm-chap1-11.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容