MapReduce中的排序

2022-07-15 12:51:09 字數 768 閱讀 8131

hadoop的計算模型就是map/reduce,每乙個計算任務會被分割成很多互不依賴的map/reduce計算單元,將所有的計算單元執行完畢後整個計算任務就完成了。因為計算單元之間互不依賴所以計算單元可以分配到不同的計算機上執行,這樣就可以將計算壓力平攤到多個機器上面。當然效能線性提高是有條件的,前提是計算任務所採用的演算法必須能夠適應map/reduce模式。例如對於海量資料排序任務來說,絕大多數的排序演算法都是不適應map/reduce模式的,如堆排序,插入排序,氣泡排序都是不適用於map/reduce的,因為這些演算法都需要維護乙個全域性有序佇列,這會導致資料與資料之間嚴重依賴而導致計算任務不能分解。而桶排序演算法(bucket sort)是可以適應map/reduce演算法的。桶排序過程是這樣的,首先對資料分段,段內是無序的,段間是有序的,後段的任何乙個資料大於前段任何乙個資料。此時可以把每一段劃分成乙個計算單元,這樣就可以適用map/reduce模式了,每乙個段有序後,排序任務就完成了。

map主要是將乙個大的任務分為多個小任務分攤到分布式機器上,而每個機器進行的任務是相同的。reduce是對處理後的資料進行合併操作,通過reduce函式來將結果彙總。mapreduce就是分而治之。但效能線性提高是有條件的,前提是計算任務所採用的演算法必須能夠適應map/reduce模式,如桶排,這樣如果計算任務可以分成n個計算單元,每個計算單元執行時間為t,m臺機器的計算時間就是t*(n/m)。

但如果不用桶排,比如像map是隨機的(不像桶排後每大塊間是有序的),map排序後每塊有序,塊間無序,這樣reduce的工作就不是彙總/合併了,要在進行一次排序,就不適合mapreduce了 。

mapReduce排序 筆記

final string splited value.tostring split t final newk2 k2 new newk2 long.parselong splited 0 long.parselong splited 1 final longwritable v2 new longw...

MapReduce中的 分割槽,分組,排序(區別)

2020 7 26 功能 按照條件將結果輸入到不同的檔案中 實現步驟 自定義排序規則繼承partitioner類,重寫getpartition 方法 在job驅動driver中設定自定義排序規則 在driver中根據分割槽數,設定reducetask數 分割槽數和reducetask關係 如果red...

MapReduce二次排序

預設情況下,map輸出的結果會對key進行預設的排序,但個別需求要求對key排序的同時還需要對value進行排序 這時候就要用到二次排序了。本章以hadoop權威指南中計算每年最大氣溫值為例,原始資料雜亂無章 2008 33 2008 23 2008 43 2008 24 2008 25 2008 ...