問(wèn)題描述:有個(gè)hadoop集群,跑hive任務(wù)的時(shí)候慢,而且經(jīng)常跑的跑的就掛了,報(bào)內(nèi)存不夠等等的相關(guān)異常,需要我們給解決,優(yōu)化一下配置
問(wèn)題解決:跑hive慢,一方面是hive語(yǔ)句的問(wèn)題,另一方面就是hadoop中mapreduce已經(jīng)yarn的相關(guān)配置沒(méi)有配置好,第一方面需要項(xiàng)目組開(kāi)發(fā)人員自己解決了,學(xué)習(xí)如何根據(jù)業(yè)務(wù)優(yōu)化一下sql
參數(shù)配置優(yōu)化就需要平衡集群中機(jī)器的內(nèi)存,處理器和磁盤的使用
Yarn和MapReduce的總的可用內(nèi)存應(yīng)考慮到保留的內(nèi)存
保留內(nèi)存=保留系統(tǒng)內(nèi)存+保留其它應(yīng)用所用內(nèi)存(比如hbase,spark等)
建議保留的內(nèi)存如下(以hbase為例):

下面的計(jì)算是確定每個(gè)節(jié)點(diǎn)的Container允許的最大數(shù)量:
#Container數(shù)量=min(2*CORES, 1.8*DISKS, (可用內(nèi)存)/最低Container的大小)
最低Container的大小這個(gè)值是依賴于可用的RAM數(shù)量——在較小的存儲(chǔ)節(jié)點(diǎn),最小的Container的大小也應(yīng)較小。下面的表列出了推薦值:

最后計(jì)算的每個(gè)Container的內(nèi)存大小是:
每個(gè)Container的內(nèi)存大小 = max(最小Container內(nèi)存大小, (總可用內(nèi)存) /Container數(shù)))
其中mapred-site.xml中的與性能有關(guān)的主要參數(shù)如下:

yarn-site.xml中與性能有關(guān)的參數(shù)如下:

參數(shù)的計(jì)算方式如下:

例如:集群節(jié)點(diǎn)擁有12個(gè)CPU核,48GB內(nèi)存和12塊磁盤
保留內(nèi)存(Reserved Memory)=6GB系統(tǒng)預(yù)留內(nèi)存+(如果有Hbase)8GB的Hbase內(nèi)存
最小的容器大小(Min container size)=2GB
容器數(shù)目(containers)=min(2*12,1.8*12,(48-6-8)/2)=min(24,21.6,17)=17
每個(gè)容器的RAM(RAM-per-container)=max(2,(48-6-8)/17)=max(2,2)=2

以下配置具體參數(shù)還是要根據(jù)給其它系統(tǒng)預(yù)留的內(nèi)存數(shù)而定