2018-03-07 16:20:55 2976瀏覽
2018年大數據逐漸進入并影響著人們的生活,因此如今不論是參加大數據培訓還是自學大數據的人都在不斷的增加,但是關于大數據的概念仍然有不少的人不是很清楚,本編文章扣丁學堂小編就和大家分享一下2018大數據概念及大數據Shuffle調優(yōu),參數調優(yōu)。
首先我們先來看一下大數據概念是什么:大數據概念一般指大數據(巨量數據集合(IT行業(yè)術語))。百科解釋為:大數據(big data),指無法在一定時間范圍內用常規(guī)軟件工具進行捕捉、管理和處理的數據集合,是需要新處理模式才能具有更強的決策力、洞察發(fā)現(xiàn)力和流程優(yōu)化能力的海量、高增長率和多樣化的信息資產。在維克托·邁爾-舍恩伯格及肯尼斯·庫克耶編寫的《大數據時代》中大數據指不用隨機分析法(抽樣調查)這樣捷徑,而采用所有數據進行分析處理。大數據的5V特點(IBM提出):Volume(大量)、Velocity(高速)、Variety(多樣)、Value(低價值密度)、Veracity(真實性)。
下面我們來說一下數據Shuffle調優(yōu),參數調優(yōu):
該參數用于設置shuffle write task的BufferedOutputStream的buffer緩沖大小。將數據寫到磁盤文件之前,會先寫入buffer緩沖中,待緩沖寫滿之后,才會溢寫到磁盤。
調優(yōu)建議:如果作業(yè)可用的內存資源較為充足的話,可以適當增加這個參數的大小(比如64k),從而減少shuffle write過程中溢寫磁盤文件的次數,也就可以減少磁盤IO次數,進而提升性能。在實踐中發(fā)現(xiàn),合理調節(jié)該參數,性能會有1%~5%的提升。
spark.reducer.maxSizeInFlight
默認值:48m
該參數用于設置shuffle read task的buffer緩沖大小,而這個buffer緩沖決定了每次能夠拉取多少數據。
調優(yōu)建議:如果作業(yè)可用的內存資源較為充足的話,可以適當增加這個參數的大小(比如96m),從而減少拉取數據的次數,也就可以減少網絡傳輸的次數,進而提升性能。在實踐中發(fā)現(xiàn),合理調節(jié)該參數,性能會有1%~5%的提升。
spark.shuffle.io.maxRetries
默認值:3
shuffle read task從shuffle write task所在節(jié)點拉取屬于自己的數據時,如果因為網絡異常導致拉取失敗,是會自動進行重試的。該參數就代表了可以重試的最大次數。如果在指定次數之內拉取還是沒有成功,就可能會導致作業(yè)執(zhí)行失敗。
調優(yōu)建議:對于那些包含了特別耗時的shuffle操作的作業(yè),建議增加重試最大次數(比如10次),以避免由于JVM的full gc或者網絡不穩(wěn)定等因素導致的數據拉取失敗。在實踐中發(fā)現(xiàn),對于針對超大數據量(數十億~上百億)的shuffle過程,調節(jié)該參數可以大幅度提升穩(wěn)定性。
spark.shuffle.io.retryWait
默認值:5s
具體解釋同上,該參數代表了每次重試拉取數據的等待間隔,默認是5s。
調優(yōu)建議:建議加大間隔時長(比如60s),以增加shuffle操作的穩(wěn)定性。
spark.shuffle.memoryFraction
默認值:0.2
該參數代表了Executor內存中,分配給shuffle read task進行聚合操作的內存比例,默認是20%。
調優(yōu)建議:在資源參數調優(yōu)中講解過這個參數。如果內存充足,而且很少使用持久化操作,建議調高這個比例,給shuffle read的聚合操作更多內存,以避免由于內存不足導致聚合過程中頻繁讀寫磁盤。在實踐中發(fā)現(xiàn),合理調節(jié)該參數可以將性能提升10%左右。
spark.shuffle.manager
默認值:sort
該參數用于設置ShuffleManager的類型。Spark 1.5以后,有三個可選項:hash、sort和tungsten-sort。HashShuffleManager是Spark 1.2以前的默認選項,但是Spark 1.2以及之后的版本默認都是SortShuffleManager了。tungsten-sort與sort類似,但是使用了tungsten計劃中的堆外內存管理機制,內存使用效率更高。
調優(yōu)建議:由于SortShuffleManager默認會對數據進行排序,因此如果你的業(yè)務邏輯中需要該排序機制的話,則使用默認的SortShuffleManager就可以;而如果你的業(yè)務邏輯不需要對數據進行排序,那么建議參考后面的幾個參數調優(yōu),通過bypass機制或優(yōu)化的HashShuffleManager來避免排序操作,同時提供較好的磁盤讀寫性能。這里要注意的是,tungsten-sort要慎用,因為之前發(fā)現(xiàn)了一些相應的bug。
spark.shuffle.sort.bypassMergeThreshold
默認值:200
當ShuffleManager為SortShuffleManager時,如果shuffle read task的數量小于這個閾值(默認是200),則shuffle write過程中不會進行排序操作,而是直接按照未經優(yōu)化的HashShuffleManager的方式去寫數據,但是最后會將每個task產生的所有臨時磁盤文件都合并成一個文件,并會創(chuàng)建單獨的索引文件。
調優(yōu)建議:當你使用SortShuffleManager時,如果的確不需要排序操作,那么建議將這個參數調大一些,大于shuffle read task的數量。那么此時就會自動啟用bypass機制,map-side就不會進行排序了,減少了排序的性能開銷。但是這種方式下,依然會產生大量的磁盤文件,因此shuffle write性能有待提高。
spark.shuffle.consolidateFiles
默認值:false
如果使用HashShuffleManager,該參數有效。如果設置為true,那么就會開啟consolidate機制,會大幅度合并shuffle write的輸出文件,對于shuffle read task數量特別多的情況下,這種方法可以極大地減少磁盤IO開銷,提升性能。
調優(yōu)建議:如果的確不需要SortShuffleManager的排序機制,那么除了使用bypass機制,還可以嘗試將spark.shffle.manager參數手動指定為hash,使用HashShuffleManager,同時開啟consolidate機制。在實踐中嘗試過,發(fā)現(xiàn)其性能比開啟了bypass機制的SortShuffleManager要高出10%~30%。
好了,關于2018大數據概念及大數據Shuffle調優(yōu),參數調優(yōu)就先為大家說到這,喜歡大數據想要學習的小伙伴可以選擇扣丁學堂進行學習。扣丁學堂不僅有專業(yè)的老師和與時俱進的課程體系,還有大量的大數據視頻教程供學員觀看學習,心動的小伙伴快快行動吧??鄱W堂大數據學習群:209080834。
【關注微信公眾號獲取更多學習資料】