shuffle的工作原理

2021-12-30 10:37:15 字數 3962 閱讀 9838

shuffle實現的功能

分割槽決定當前key交給那個reducer進行處理

相同的key必須在乙個reduce task中

預設:按照key的hashcode值對reduce的個數進行取餘

如果是自定義分割槽,預設是對key進行分割槽,但是我們也可以根據value進行分割槽

分組將相同的key的value進行合併,key相同的話,會分到同一組

在mapreduce階段

一行呼叫一次map方法

key相同的呼叫一次reduce方法

排序按照key對應的keyvalue進行排序,字典排序

shuffle的工作原理

map端的shufflespill:溢寫

每乙個map處理好的結果都會進入環形緩衝區(緩衝區記憶體為100m)當環形緩衝區使用超過80%以後開始溢寫

. 分割槽:確定每一條keyvalue交給哪個reduce處理(類似打標籤)

keyvalue

flag

hadoop

1 reduce0

hive

1 reduce1

hbase

1 reduce0

hadoop

1 reduce0

排序:將相同分割槽的資料進行分區內的排序

keyvalue

flag

hadoop

1 reduce0

hadoop

1 reduce0

hbase

1 reduce0

hive

1 reduce1

當整個還中區達到閾值的80%,開始溢寫

將當前分割槽排序後資料寫入到磁碟中,變成了乙個個小檔案,最終生成多個小檔案(假設生成的兩個檔案相同)

file1:

keyvalue

flag

hadoop

1 reduce0

hadoop

1 reduce0

hbase

1 reduce0

hive

1 reduce1

file2:

keyvalue

flag

hadoop

1 reduce0

hadoop

1 reduce0

hbase

1 reduce0

hive

1 reduce1

-merge合併

將生成的小檔案進行合併

keyvalue

flag

hadoop

1 reduce0

hadoop

1 reduce0

hbase

1 reduce0

hive

1 reduce1

hadoop

1 reduce0

hadoop

1 reduce0

hbase

1 reduce0

hive

1 reduce1

排序:將相同分割槽的資料進行分割槽排序

end_file(map task1)

keyvalue

flag

hadoop

1 reduce0

hadoop

1 reduce0

hadoop

1 reduce0

hadoop

1 reduce0

hbase

1 reduce0

hbase

1 reduce0

hive

1 reduce1

hive

1 reduce1

map task結束,通知appmaster,appmaster拉取資料

reduce端的shuffle

map task1

keyvalue

flag

hadoop

1 reduce0

hadoop

1 reduce0

hadoop

1 reduce0

hadoop

1 reduce0

hbase

1 reduce0

hbase

1 reduce0

hive

1 reduce1

hive

1 reduce1

map task2

keyvalue

flag

hadoop

1 reduce0

hadoop

1 reduce0

hadoop

1 reduce0

hadoop

1 reduce0

hbase

1 reduce0

hbase

1 reduce0

hive

1 reduce1

hive

1 reduce1

reduce啟動多執行緒通過http到每台機器上拉取屬於自己的分割槽資料

reduce1

keyvalue

flag

hadoop

1 reduce0

hadoop

1 reduce0

hadoop

1 reduce0

hadoop

1 reduce0

hadoop

1 reduce0

hadoop

1 reduce0

hadoop

1 reduce0

hadoop

1 reduce0

hbase

1 reduce0

hbase

1 reduce0

hbase

1 reduce0

hbase

1 reduce0

reduce2

keyvalue

flag

hadoop

1 reduce0

hadoop

1 reduce0

hadoop

1 reduce0

hadoop

1 reduce0

hadoop

1 reduce0

hadoop

1 reduce0

hadoop

1 reduce0

hadoop

1 reduce0

hbase

1 reduce0

hbase

1 reduce0

hbase

1 reduce0

hbase

1 reduce0

merge:合併,將每個map task的結果中資料自己分割槽的資料進行合併

排序:對整個屬於自己的分割槽資料進行排序

分組:將相同key的value進行合併

reduce0

keyvalue

hadoop

[1,1,1,1,1,1,1,1]

hbase

[1,1,1,1]

reduce1

keyvalue

hive

[1,1,1,1]

Shuffle機制流程原理

mapreduce確保每個reducer的輸入都是按鍵排序的。系統執行排序的過程 即將map輸出作為輸入傳給reducer 稱為shuffle。shuffle階段是從map方法輸出資料以後開始到reduce方法輸入資料之前結束。分割槽的數量 reducetask數量 結果檔案的數量 首先是由map方...

hadoop執行原理之shuffle

hadoop的核心思想是mapreduce,但shuffle又是mapreduce的核心。shuffle的主要工作是從map結束到reduce開始之間的過程。首先看下這張圖,就能了解shuffle所處的位置。圖中的partitions copy phase sort phase所代表的就是shuff...

Spark之Shuffle機制和原理

shuffle就是對資料進行重組,由於分布式計算的特性和要求,在實現細節上更加繁瑣和複雜 在mapreduce框架,shuffle是連線map和reduce之間的橋梁,map階段通過shuffle讀取資料並輸出到對應的reduce 而reduce階段負責從map端拉取資料並進行計算。在整個shuff...