系統執行排序的過程稱為什麼
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脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

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

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Java錯誤:Hadoop錯誤,如何處理和避免使用Hadoop處理大數據時,常常會遇到一些Java異常錯誤,這些錯誤可能會影響任務的執行,導致資料處理失敗。本文將介紹一些常見的Hadoop錯誤,並提供處理和避免這些錯誤的方法。 Java.lang.OutOfMemoryErrorOutOfMemoryError是Java虛擬機器記憶體不足的錯誤。當Hadoop任

Java利用Collections類的shuffle()函數打亂集合中元素的順序在Java程式語言中,Collections類是一個工具類,提供了各種靜態方法,用於操作集合。其中之一是shuffle()函數,它可以用來打亂集合中元素的順序。本篇文章將示範如何使用該函數,並提供對應的程式碼範例。首先,我們需要導入java.util套件中的Collections類,

隨著大數據時代的到來,資料處理和儲存變得越來越重要,如何有效率地管理和分析大量的資料也成為企業面臨的挑戰。 Hadoop和HBase作為Apache基金會的兩個項目,為大數據儲存和分析提供了一個解決方案。本文將介紹如何在Beego中使用Hadoop和HBase進行大數據儲存和查詢。一、Hadoop和HBase簡介Hadoop是一個開源的分散式儲存和運算系統,它可

隨著資料量的不斷增大,傳統的資料處理方式已經無法處理大數據時代所帶來的挑戰。 Hadoop是開源的分散式運算框架,它透過分散式儲存和處理大量的數據,解決了單節點伺服器在大數據處理中帶來的效能瓶頸問題。 PHP是一種腳本語言,廣泛應用於Web開發,而且具有快速開發、易於維護等優點。本文將介紹如何使用PHP和Hadoop進行大數據處理。什麼是HadoopHadoop是

Java大數據技術堆疊:了解Java在大數據領域的應用,如Hadoop、Spark、Kafka等隨著資料量不斷增加,大數據技術成為了當今網路時代的熱門話題。在大數據領域,我們常聽到Hadoop、Spark、Kafka等技術的名字。這些技術起到了至關重要的作用,而Java作為一門廣泛應用的程式語言,也在大數據領域發揮著巨大的作用。本文將重點放在Java在大

一:安裝JDK1.執行以下指令,下載JDK1.8安裝套件。 wget--no-check-certificatehttps://repo.huaweicloud.com/java/jdk/8u151-b12/jdk-8u151-linux-x64.tar.gz2.執行以下命令,解壓縮下載的JDK1.8安裝包。 tar-zxvfjdk-8u151-linux-x64.tar.gz3.移動並重新命名JDK包。 mvjdk1.8.0_151//usr/java84.配置Java環境變數。 echo'

隨著資料量的不斷增加,大規模資料處理已經成為了企業必須面對和解決的問題。傳統的關聯式資料庫已經無法滿足這種需求,而對於大規模資料的儲存與分析,Hadoop、Spark、Flink等分散式運算平台成為了最佳選擇。在資料處理工具的選擇過程中,PHP作為一種易於開發和維護的語言,越來越受到開發者的歡迎。在本文中,我們將探討如何利用PHP來實現大規模資料處理,以及如

PHP中有以下函數可以隨機洗牌數組:shuffle()直接改變數組元素順序。 array_rand()傳回隨機鍵,可依鍵重新排列數組順序。