ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

Asakusa on Sparkあるある

2016-12-16 00:00:00 | PG(分散処理)

Asakusa Framework Advent Calendar 2016の16日目です。

Asakusa on SparkApache Spark上で稼動します。
デフォルトの設定のままで動けば楽なのですが、扱うデータ量が多いとやはりそういうわけにもいきません^^;
GCが頻発して遅くなるとかOutOfMemoryErrorになるといった事が起きます。
こうした場合、Spark自体のチューニングも考えますが、AsakusaFW側としてもチューニングAsakusa on Sparkの最適化設定に書かれているものを設定)することになります。

特にcom.asakusafw.spark.fragment.bufferSizeを真っ先に設定しています。
bufferSizeというプロパティー名ですが、単位はバイト数ではなく、オブジェクトの個数です。経験上、256にしておけばとりあえず大丈夫ですね。
このプロパティーを設定していない場合、演算子から出力されるデータモデルオブジェクトは全て(という言い方をすると語弊がありそうですが)メモリー上に保持されるらしいです。つまりメモリーに乗り切るならこれが一番速いわけですが、メモリーが足りなくなるとGCが頑張ってしまうというわけです。
このプロパティーを設定すると、メモリー上で保持するオブジェクト数がその設定数を超えたらファイルに退避するそうです。それでGCは発生しなくなりますが、ファイルに退避するので速度は低下するらしいです。とはいえ経験上、GCの頻発よりはこっちの方が断然ましですね。
(あと、退避するファイルはjava.io.tmpdirが指す場所、つまり/tmpに出力されるようです。大量に出力されるようなら、/tmpのディスク容量も重要になってきます) 

あとはcom.asakusafw.spark.parallelismですかね。
SparkのExecutorに割り当てた全コア数の1~4倍程度を指定するとのことなので、クラスターの大きさによって設定すべき値は異なると思われます。
 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする