Hadoop.2.x_MR-Shuffle過程


1、map到reduce中間的一個過程

  洗牌,打亂(打亂我們傳遞的所有元素)(流程:input->map->reduce->output)

2、map()->shuffle->reduce()

map()接收數據,以wc為例,其中數據可是為<key,value>
在map()中獲取每一行文本內容使用String.split或其他分隔方法分隔文本內容,如<0,hadoop spark hdfs hadoop>
分隔之后:<hadoop,1><spark,1><hdfs,1><hadoop,1>
從map()輸出數據到reduce()接收數據進入shuffle階段
經過shuffle到達reduce()
數據格式與map()輸出格式一致
對數據value進行累加<hadoop,2><spark,1><hdfs,1>...
輸出格式key文本內容分隔體,value出現的次數
輸出到文本上的key與value以制表符\t分隔

3、shuffle過程

map()輸出結果->內存(環形緩沖區,當內存大小達到指定數值,如80%,開始溢寫到本地磁盤)
溢寫之前,進行了分區partition操作,分區的目的在於數據的reduce指向,分區后進行二次排序,第一次是對partitions進行排序,第二次對各個partition中的數據進行排序,之后如果設置了combine,就會執行類似reduce的合並操作,還可以再進行壓縮,因為reduce在拷貝文件時消耗的資源與文件大小成正比
內存在達到一定比例時,開始溢寫到磁盤上
當文件數據達到一定大小時,本地磁盤上會有很多溢寫文件,需要再進行合並merge成一個文件
reduce拷貝copy這些文件,然后進行歸並排序(再次merge),合並為一個文件作為reduce的輸入數據

  

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM