在執行MapReduce任務之前,對小文件進行合並,大量的小文件會產生大量的地圖任務,會增加加載地圖任務的次數,任務的加載比較耗時,導致MapReduce運行速度較慢。所以我們使用CombineTextInputFormat作為輸入,解決輸入端大量的小文件場景。
(1)減少溢出次數:通過調整io.sort.mb和sort.spill.percent的值,增加觸發溢出的內存上限,減少溢出次數,從而減少磁盤io。
(2)減少合並次數:通過調整io.sort.factor參數,增加合並文件的數量,減少合並次數,從而縮短mr處理時間。
(3)映射後,在不影響業務邏輯的前提下,先進行合並處理,減少I/O..
上面我們提到的屬性參數都位於mapred-default.xml文件中,這些屬性參數的調優方法如表1所示。
表1映射階段調整屬性
(1)設置地圖,合理減少數字:既不能設置太少,也不能設置太多。太少會導致任務等待,延長處理時間;過多的任務會導致map和reduce任務之間的資源競爭,導致處理超時等錯誤。
(2)設置map和reduce***內存:調整slowstart.completedmaps的參數,使map運行到壹定程度後,減少reduce的等待時間。
(3)避免使用reduce:因為reduce用於連接數據集時會產生大量的網絡消耗。通過將MapReduce參數setNumReduceTasks設置為0來創建僅地圖作業。
(4)合理設置reduce端的緩沖區:默認情況下,當數據達到壹個閾值時,緩沖區中的數據會被寫入磁盤,然後reduce會從磁盤中獲取所有數據。換句話說,buffer和reduce不是直接相關的,中間多了壹個寫盤-->;既然讀盤的過程有這個缺點,那麽可以通過參數配置,讓緩沖區的部分數據直接轉移,減少IO開銷。這樣設置緩沖區需要內存,讀取數據需要內存,減少計算也需要內存,所以要根據作業的操作來調整。
上面提到的屬性參數都位於mapred-default.xml文件中,這些屬性參數的調優方法如表2所示。
表2 Reduce階段的調整屬性
Shuffle階段的調優是為Shuffle進程提供盡可能多的內存空間,防止內存溢出,可以通過參數mapred.child.java.opts設置,任務節點上的內存大小要盡可能大。
上面提到的屬性參數都位於mapred-site.xml文件中,這些屬性參數的調優方法如表3所示。
表3洗牌階段的調整特性
此外,MapReduce還有壹些基本的資源屬性配置,這些配置的相關參數位於mapred-default.xml文件中。我們可以合理配置這些屬性來提高MapReduce的性能。表4列出了壹些調優屬性。
表4 MapReduce資源調整屬性
來自:/news/20201118/143040 . html。