SparkのShuffle周り
@huydx
Shuffleについて
• Map - Reduce モデル
• Map段階からReduce段階への中間レイヤーは
「Shuffle」と呼ぶ
• Shuffleでは
• SparkがPullモデル(まずディスクに結果書い
て、Reduceジョブが取りに行く)
• SparkはReduceジョブに必要なデータはメモリ
フィットしないといけない
いつShuffleが発生する
• Join
• Cogroup
• *ByKeyオペレーション
Shuffleの問題
• Shuffleファイル数
• Mapの数がM、Reduceの数がRとしたらディスクに書く
ファイル数が M * R (M = 5000, R = 1024 だと 500万ファ
イル!)
• Reduceするときにソートアルゴリズムが必要
• 並列にソートする必要ができるもの
• 通信が重い
Shuffleの問題解決
• Shuffleファイル数:
• O(M * R) じゃなくて O(R)まで抑えられる
• Hashed base shuffle(一つのRひとつのファイル)じゃなくて
Sort base shuffle
• 参考:https://issues.apache.org/jira/secure/attachment/
12637642/Consolidating%20Shuffle%20Files%20in
%20Spark.pdf
• https://issues.apache.org/jira/browse/SPARK-2045
Shuffleの問題解決
• Sortのアルゴリズム選択
• https://databricks.com/blog/2014/10/10/spark-
petabyte-sort.html
• Timsortを実装する
• 色々なソートアルゴリズムの組む合わせで平
均Worst Caseパーフォマンスを減らす
Shuffleの問題解決
• ネットワークモジュールを改善
• https://issues.apache.org/jira/browse/
SPARK-2468
• Netty ベースデータ転送の実装
(FileChannel.transferToでzero copy)

[Scalameetup]spark shuffle