2017-04-27 130 views
0

我需要了解Spark如何洗牌。無序洗牌是BYKEY操作中的性能開銷。一般來說,對於RDD來說,如何進行混洗以及配對RDD或加入混洗將會發生。如果你可以用RDD和RDD中的例子來解釋,那就太好了。火花洗牌

+1

你可以通過以下文章:https://0x0fff.com/spark-architecture-shuffle/ –

回答

0

Shuffling發生在ByKey Operations中是一個開銷,它碰巧帶來了一組特定的工作節點處理的密鑰。

當你執行一個groupByKey()和rdd.toDebugString時,你會看到RDD的階段,在'groupByKey'的情況下你會看到混亂的RDD。

因此,例如,假設你有3個節點:(假設數據是對RDD形式)

Node 1 -> Contains -> ("California", "San Francisco"), ("Texas", "Dallas") 

Node 2 -> Contains -> ("Utah", "Salt Lake City"), ("California", "San Jose") 

Node 3 -> Contains -> ("Texas", "Austin"), ("Utah", "St.George") 

現在,如果你執行一個RDD一個groupByKey由這個數據會帶來下1所有類似鑰匙節點。所以在Shuffling之後你的數據看起來就像

Node 1 -> Contains -> ("California", Iterable(("San Francisco", "SanJose")))   

Node 2 -> Contains -> ("Utah", Iterable(("Salt Lake City", "St.George"))) 

Node 3 -> Contains -> ("Texas", Iterable(("Austin"), ("Dallas")))