Sparkのパフォーマンスチューニング
- 効果があった順で
テーブルのキャッシュ
- To Cache or Not to Cache, that’s the Million Dollar Question
- Sparkにはdataframeをcache(キャッシュ)または persist(永続化)する機能がある
- 2つの違いはcacheがメモリにデータを載せるのに対して、persistは指定されたオプションでディスクにデータを載せる
ファイル出力アルゴリズム設定
- Spark2.0でジョブのアウトプットを高速にS3に書き出す
- "spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version 2" を設定
- ちなみにCSVファイルではなくPerquestファイルならばもっと高速に書き出しできるそうだ
JOINの方法
- Apache Spark Shuffle hash join vs Broadcast hash join
- データがメモリに十分乗る場合はデフォルトのshuffle hash joinではなくbroadcast hash joinを使うほうが早い
BroadcastJoinをテーブルサイズごとに設定する方法
- SparkでJOINするときの注意点
- SparkでJOINをする際、Shuffle JoinだとLEFTにあるテーブルをすべてのノードに配りに行く(←これが遅い)なので、共用されるテーブルをbroadcastしとけば早くなる?
- Does spark.sql.autoBroadcastJoinThreshold work for joins using Dataset's join operator?
基盤を変える
- SnappyData https://www.snappydata.io/
- お金はけっこうかかるが、SparkSQLより20倍早いとの売り文句 https://medium.com/@snappydata/749fe81c92f7