hadoop和spark的shuffle異同點

2021-09-28 16:02:49 字數 1845 閱讀 1468

spark

裡是shufflemaptask

)的輸出進行

partition

,不同的

partition

送到不同的

reducer

(spark

裡reducer

可能是下乙個

stage

裡的shufflemaptask

,也可能是

resulttask

)。reducer

以記憶體作緩衝區,邊

shuffle

邊aggregate

資料,等到資料

aggregate

好以後進行

reduce()

(spark

裡可能是後續的一系列操作)。

hadoop mapreduce

是sort-based

,進入combine()

和reduce()

的records

必須先sort

。這樣的好處在於

combine/reduce()

可以處理大規模的資料,因為其輸入資料可以通過外排得到(

對每段資料先做排序,

reducer

的shuffle

對排好序的每段資料做歸併)。目前的

spark

預設選擇的是

hash-based

,通常使用

hashmap

來對shuffle

來的資料進行

aggregate

,不會對資料進行提前排序。如果使用者需要經過排序的資料,那麼需要自己呼叫類似

sortbykey()

的操作;如果你是

spark 1.1

的使用者,可以將

spark.shuffle.manager

設定為sort

,則會對資料進行排序。在

spark 1.2

中,sort

將作為預設的

shuffle

實現。hadoop mapreduce

將處理流程劃分出明顯的幾個階段:

map(), spill, merge, shuffle, sort, reduce()

等。每個階段各司其職,可以按照過程式的程式設計思想來逐一實現每個階段的功能。在

spark

中,沒有這樣功能明確的階段,只有不同的

stage

和一系列的

transformation()

,所以spill, merge, aggregate

等操作需要蘊含在

transformation() 中。

如果我們將

map

端劃分資料、持久化資料的過程稱為

shuffle write

,而將reducer

讀入資料、

aggregate

資料的過程稱為

shuffle read

。那麼在

spark

中,問題就變為怎麼在

job

的邏輯或者物理執行圖中加入

shuffle write

和shuffle read

的處理邏輯?以及兩個處理邏輯應該怎麼高效實現?

shuffle write

由於不要求資料有序,

shuffle write

的任務很簡單:將資料

partition

好,並持久化。

之所以要持久化,一方面是要減少記憶體儲存空間壓力,另一方面也是為了 fault-tolerance。

Hadoop 和 Spark 的異同

談到大資料,相信大家對hadoop和apache spark這兩個名字並不陌生。但我們往往對它們的理解只是提留在字面上,並沒有對它們進行深入的思考,下面不妨跟我一塊看下它們究竟有什麼異同。首先,hadoop和apache spark兩者都是大資料框架,但是各自存在的目的不盡相同。hadoop實質上更...

hadoop和spark的異同

解決問題的層面不一樣 首先,hadoop和apache spark兩者都是大資料框架,但是各自存在的目的不盡相同。hadoop實質上更多是乙個分布式資料基礎設施 它將巨大的資料集分派到乙個由普通計算機組成的集群中的多個節點進行儲存,意味著您不需要購買和維護昂貴的伺服器硬體。同時,hadoop還會索引...

Hadoop和Spark的異同

談到大資料,相信大家對hadoop和apache spark這兩個名字並不陌生。但我們往往對它們的理解只是提留在字面上,並沒有對它們進行深入的思考,下面不妨跟我一塊看下它們究竟有什麼異同。解決問題的層面不一樣 首先,hadoop和apache spark兩者都是大資料框架,但是各自存在的目的不盡相同...