整個shuffle的流程圖

Paste_Image.png
Map Shuffle的作用以及相應的設置
-
partition
- 過程:輸入的<key,value>對經過map()處理后輸出新的<key,value>對,它首先會被存儲到環形緩沖區中(字節數組實現)。該環形緩沖區的大小默認為100MB。並且會對每個<key,value>對hash一個partition值,相同partition值為同一個分區。
- 作用:由於map()處理后的數據量可能會非常大,所以如果由一個reduce()處理效率不高,為了解決這個問題可以用分布式的思想,一個reduce()解決不了,就用多個reduce節點。一般來說有幾類分區就對應有幾個reduce節點,把相同分區交給一個reduce節點處理。
- 設置
- 環形緩沖區大小:mapred-site.xml中設置mapreduce.task.io.sort.mb的值
- 環形緩沖區溢寫的閾值:mapred-site.xml中設置mapreduce.map.sort.spill.percent的值
-
partition:job.setPartitionerClass(cls)
Paste_Image.png
-
sort
- 過程:把環形緩沖區中的數據根據partition值和key值兩個關鍵字升序排序。同一partition內的按照key排序。
- 作用:一般來講mapreduce框架用來做各種排序操作,先在map端排序,減少reduce端排序的負擔。
- 設置:job.setSortComparatorClass(cls)
Paste_Image.png
- combiner
- 過程:將sort后的數據進行combiner操作
- 作用:可以理解為map端的預reduce操作,在數據量非常大的時候,這樣的優化可以節省很多網絡帶寬和本地磁盤IO流的讀寫。
- 設置:job.setCombinerClass(cls)
Paste_Image.png
-
compress
- 過程:壓縮combiner輸出后的數據
- 作用:減少本地磁盤的讀寫和減少reduce拷貝map端數據時的網絡帶寬
- 設置
-
Configuration對象用來解析XML文件,可以用set方法來設置屬性值。
Paste_Image.png -
尋找要設置的相關屬性
compress.png -
內置的三種壓縮算法
compresssuanfa.png -
配置key,value
peizhi.png
-
-
spill
- 過程:將排序后的內存數據spill到本地磁盤中
- 作用:因為數據量非常大,全部存放在內存中不太現實,所以最后還是會存到本地磁盤中
-
merge
- 過程:因為可能會有幾次spill,本身存放數據的out文件和存放數據偏移量索引index文件都會產生多個,把多個這樣的文件合並。
- 作用:方便reduce的一次性拷貝。
- 設置:
mapsort.png
Reduce Shuffle的作用以及相應的設置
-
merge
- 過程:reduce拷貝map()最終輸出的磁盤數據,一個reduce應該拷貝每個map節點的相同partition的數據。
- 作用:因為有多個map節點,拷貝后的數據文件不止一份,先進性合並操作,為后面的排序做准備。
-
sort
- 過程、作用:這里和map端的一樣。
-
group
- 過程:將排序好的<key,value>對進行分組,分組規則默認的是將相同key的value放在一起。
fenzu.png - 作用:為了reduce()更好的計算相同key值出現的次數。
- 設置:job.setGroupingComparatorClass(cls);
比較2.png
- 過程:將排序好的<key,value>對進行分組,分組規則默認的是將相同key的value放在一起。
shuffle階段中Comparator的理解和作用
- 被用來作為排序比較和分組比較的依據
-
排序比較和分組比較都是通過實現下圖中的接口方法
sort.png
比較2.png-
其中b1為第一個字節數組,s1為開始的index,l1為b1比較的長度,b2為第二個字節數組,s2為開始的index,l2為b2比較的長度
比較3.png -
底層用到了java.util.Comparator.compare(T o1, T o2)函數
比較4.png
-
MapReduce執行過程中中間數據的壓縮配置和其余的配置
- 壓縮配置見map過程
- 設置reduce的數目
job.setNumReduceTasks(tasks);其中tasks為int型整數。合理的設置reduce數目是一種性能調優,實際生產環境中最好用測試的方式來抉擇較好的reduce數目
作者:心_的方向
鏈接:https://www.jianshu.com/p/fc36464f4c6d
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。