MapReduce確保每個reducer的輸入都是按鍵排序的,系統執行排序的過程稱為shuffle。 shuffle階段主要包括map階段的combine、group、sort、partition以及reducer階段的合併排序。
本教學操作環境:windows7系統,Dell G3電腦。
MapReduce確保每個reducer的輸入都是按鍵排序的,系統執行排序的過程稱為shuffle。 我們可以理解為map產生輸出到reduce的消化輸入的整個工程。
Map端:每個mapperTask有一個環形記憶體緩衝區,用於儲存map任務的輸出,一旦達到閾值,一個後台執行緒把內容寫到磁碟的指定目錄下的新建的一個溢出寫文件,寫磁碟前要經過partition、sort、Combiner。等最後記錄寫完,合併全部溢出寫檔案為一個分區且排序的檔案。
Reduce端:可以分為複製階段、排序階段、reduce階段
複製階段:map輸出檔位於執行map任務的tasktracker的本機磁碟上,reduce透過http的方式取得輸出檔案的分區,tasktracker為分區檔案執行reduce任務,只要有一個map任務完成,reduce任務就開始複製輸出。
排序階段:更恰當的說法是合併階段,因為排序是在map端進行的。這個階段將合併map輸出,維持其順序排序,循環進行。
最後階段就是reduce階段,對已排序輸出中的每個鍵呼叫reduce函數,此階段的輸出直接寫到輸出檔系統,一般為hdfs。 、
Shuffle階段說明
shuffle階段主要包含map階段的combine、group、sort、partition以及reducer階段的合併排序。 Map階段通過shuffle後會將輸出資料依照reduce的分區分檔案的保存,檔案內容是依照定義的sort進行排序好的。 Map階段完成後會通知ApplicationMaster,然後AM會通知Reduce進行資料的拉取,在拉取過程中進行reduce端的shuffle過程。
注意:Map階段的輸出資料是存在運行Map節點的磁碟上,是個臨時文件,不是存在HDFS上,在Reduce拉取資料後,那個臨時文件會刪除,若是存在hdfs上,會造成儲存空間的浪費(會產生三個副本)。
-
用戶自訂Combiner
Combiner可以減少Map階段的中間輸出結果數,降低網路開銷。預設是沒有Combiner的。使用者自訂的Combiner要求是Reducer的子類,以Map的輸出
作為Combiner的輸入 和輸出 ,也就是說Combiner的輸入和輸出必須是一樣的。 可以透過job.setCombinerClass設定combiner的處理類,MapReduce框架不保證一定會呼叫該類別的方法。
注意:如果reduce的輸入和輸出一樣,則可以直接用reduce類別作為combiner
-
用戶自訂Partitioner
Partitioner是用於確定map輸出的
對應的處理reducer就是那個節點。預設MapReduce任務reduce個數為1個,此時Partitioner其實沒有什麼效果,但是當我們將reduce個數修改為多個的時候,partitioner就會決定key所對應reduce的節點序號(從0開始)。 可以透過job.setPartitionerClass方法指定Partitioner類,預設使用HashPartitioner(預設呼叫key的hashCode方法)。
-
使用者自訂Group
GroupingComparator是用來將Map輸出的
進行分組組合成 >的關鍵類,直白來講就是用來確定key1和key2是否屬於同一組,如果是同一組,就將map的輸出value進行組合。 要求我們自訂的類別實作自介面RawComparator,可以透過job.setGroupingComparatorClass方法指定比較類別。預設使用WritableComparator,但最終呼叫key的compareTo方法進行比較。
-
用戶自訂Sort
SortComparator是用於將Map輸出的
進行key排序的關鍵類, 直白來講就是用於確定key1所屬組和key2所屬組那個在前,那個在後。 要求我們自訂的類別實作自介面RawComparator,可以透過job.setSortComparatorClass方法指定比較類別。預設使用WritableComparator,但最終呼叫key的compareTo方法進行比較。
-
用戶自訂Reducer的Shuffle
在reduce端拉取map的輸出資料的時候,會進行shuffle(合併排序),MapReduce框架以插件模式提供了一個自訂的方式,我們可以透過實作介面ShuffleConsumerPlugin,並指定參數mapreduce.job.reduce.shuffle.consumer.plugin.class來指定自訂的shuffle規則,但是一般情況下,直接採用預設的類別org. apache.hadoop.mapreduce.task.reduce.Shuffle。
更多程式相關知識,請造訪:程式設計影片! !
以上是系統執行排序的過程稱為什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

記事本++7.3.1
好用且免費的程式碼編輯器

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

Dreamweaver CS6
視覺化網頁開發工具