更新時(shí)間:2020年11月18日14時(shí)40分 來(lái)源:傳智播客 瀏覽次數(shù):
使用Hadoop進(jìn)行大數(shù)據(jù)運(yùn)算,當(dāng)數(shù)據(jù)量極其大時(shí),那么對(duì)MapReduce性能的調(diào)優(yōu)重要性不言而喻,尤其是Shuffle過(guò)程中的參數(shù)配置對(duì)作業(yè)的總執(zhí)行時(shí)間影響特別大。下面總結(jié)一些和MapReduce相關(guān)的性能調(diào)優(yōu)方法,主要從五個(gè)方面考慮:數(shù)據(jù)輸入、Map階段、Reduce階段、Shuffle階段和其他調(diào)優(yōu)屬性。
1.數(shù)據(jù)輸入
在執(zhí)行MapReduce任務(wù)前,將小文件進(jìn)行合并,大量的小文件會(huì)產(chǎn)生大量的map任務(wù),增大map任務(wù)裝載的次數(shù),而任務(wù)的裝載比較耗時(shí),從而導(dǎo)致MapReduce運(yùn)行速度較慢。因此我們采用CombineTextInputFormat來(lái)作為輸入,解決輸入端大量的小文件場(chǎng)景。
2.Map階段
(1)減少溢寫(xiě)(spill)次數(shù):通過(guò)調(diào)整io.sort.mb及sort.spill.percent參數(shù)值,增大觸發(fā)spill的內(nèi)存上限,減少spill次數(shù),從而減少磁盤(pán)IO。
(2)減少合并(merge)次數(shù):通過(guò)調(diào)整io.sort.factor參數(shù),增大merge的文件數(shù)目,減少merge的次數(shù),從而縮短mr處理時(shí)間。
(3)在map之后,不影響業(yè)務(wù)邏輯前提下,先進(jìn)行combine處理,減少 I/O。
我們?cè)谏厦嫣岬降哪切傩詤?shù),都是位于mapred-default.xml文件中,這些屬性參數(shù)的調(diào)優(yōu)方式如表1所示。
? 表1 Map階段調(diào)優(yōu)屬性
3.Reduce階段
(1)合理設(shè)置map和reduce數(shù):兩個(gè)都不能設(shè)置太少,也不能設(shè)置太多。太少,會(huì)導(dǎo)致task等待,延長(zhǎng)處理時(shí)間;太多,會(huì)導(dǎo)致 map、reduce任務(wù)間競(jìng)爭(zhēng)資源,造成處理超時(shí)等錯(cuò)誤。
(2)設(shè)置map、reduce共存:調(diào)整slowstart.completedmaps參數(shù),使map運(yùn)行到一定程度后,reduce也開(kāi)始運(yùn)行,減少reduce的等待時(shí)間。
(3)規(guī)避使用reduce:因?yàn)閞educe在用于連接數(shù)據(jù)集的時(shí)候?qū)?huì)產(chǎn)生大量的網(wǎng)絡(luò)消耗。通過(guò)將MapReduce參數(shù)setNumReduceTasks設(shè)置為0來(lái)創(chuàng)建一個(gè)只有map的作業(yè)。
(4)合理設(shè)置reduce端的buffer:默認(rèn)情況下,數(shù)據(jù)達(dá)到一個(gè)閾值的時(shí)候,buffer中的數(shù)據(jù)就會(huì)寫(xiě)入磁盤(pán),然后reduce會(huì)從磁盤(pán)中獲得所有的數(shù)據(jù)。也就是說(shuō),buffer和reduce是沒(méi)有直接關(guān)聯(lián)的,中間多一個(gè)寫(xiě)磁盤(pán)->讀磁盤(pán)的過(guò)程,既然有這個(gè)弊端,那么就可以通過(guò)參數(shù)來(lái)配置,使得buffer中的一部分?jǐn)?shù)據(jù)可以直接輸送到reduce,從而減少IO開(kāi)銷。這樣一來(lái),設(shè)置buffer需要內(nèi)存,讀取數(shù)據(jù)需要內(nèi)存,reduce計(jì)算也要內(nèi)存,所以要根據(jù)作業(yè)的運(yùn)行情況進(jìn)行調(diào)整。
我們?cè)谏厦嫣岬降膶傩詤?shù),都是位于mapred-default.xml文件中,這些屬性參數(shù)的調(diào)優(yōu)方式如表2所示。
? 表2 Reduce階段的調(diào)優(yōu)屬性
4.Shuffle階段
Shuffle階段的調(diào)優(yōu)就是給Shuffle過(guò)程盡量多地提供內(nèi)存空間,以防止出現(xiàn)內(nèi)存溢出現(xiàn)象,可以由參數(shù)mapred.child.java.opts來(lái)設(shè)置,任務(wù)節(jié)點(diǎn)上的內(nèi)存大小應(yīng)盡量大。
我們?cè)谏厦嫣岬降膶傩詤?shù),都是位于mapred-site.xml文件中,這些屬性參數(shù)的調(diào)優(yōu)方式如表3所示。
? 表3 shuffle階段的調(diào)優(yōu)屬性
5.其他調(diào)優(yōu)屬性
除此之外,MapReduce還有一些基本的資源屬性的配置,這些配置的相關(guān)參數(shù)都位于mapred-default.xml文件中,我們可以合理配置這些屬性提高M(jìn)apReduce性能,表4列舉了部分調(diào)優(yōu)屬性。
? 表4 MapReduce資源調(diào)優(yōu)屬性
猜你喜歡:
HBase表常見(jiàn)Shell命令及具體語(yǔ)法
Watch機(jī)制的顯著特點(diǎn)有哪些?Watch簡(jiǎn)介
2020-11-03Znode儲(chǔ)存結(jié)構(gòu)是怎樣的?節(jié)點(diǎn)類型有幾種?
2020-11-03簡(jiǎn)單介紹YARN資源管理框架的體系結(jié)構(gòu)【大數(shù)據(jù)文章】
2020-11-03Zookeeper分布式系統(tǒng)的集群架構(gòu)介紹
2020-11-03Spark的集群安裝與配置簡(jiǎn)介【大數(shù)據(jù)技術(shù)文章】
2020-10-29什么是Scala?Scala發(fā)展歷程簡(jiǎn)介
2020-10-28北京校區(qū)