Click here to load reader
Upload
huy-do
View
362
Download
1
Embed Size (px)
Citation preview
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)