ひしだまの変更履歴

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

AsakusaFW0.7.1 スモールジョブ実行エンジン

2014-11-21 02:29:38 | PG(分散処理)

Asakusa Framework0.7.1が出た!
リリースノート

今回の目玉は「スモールジョブ実行エンジン」のみだが、この影響はすごく大きい。

Asakusaアプリケーションは複数のHadoopジョブとして実行されるが、ジョブの入力データ量が少ない場合に「スモールジョブ実行エンジン」で実行することにより、通常のHadoopジョブより速く実行できる。
スモールジョブ実行エンジンにはHadoopジョブの起動時間(いわゆるHadoop税)が無いので、実行が速い。(JavaVMの起動時間、いわばJavaVM税はかかるけど^^;)
スモールジョブ実行エンジンと通常のHadoopとの切り替えは、各ジョブ毎に、実行時のデータ量に応じて自動的に行われる。

Asakusaアプリケーションを作成すると いくつかの小さいジョブが生成されることがあり、小さなジョブは実行時間のほとんどがHadoop税となって、無駄が大きかった。
こういった「スモールジョブ問題」への対処として、今までにもYAESS JobQueue等があったが、環境構築が大変だった。

スモールジョブ実行エンジンを有効にするには、実行環境のASAKUSA_HOME/core/conf/asakusa-resources.xmlに以下のような設定を追加するだけでよい。
(『Hadoopタスクの最適化設定』を参照)

    <property>
        <name>com.asakusafw.inprocess.limit</name>
        <value>10485760</value>
    </property>

ジョブの入力ファイルの合計サイズがこの指定(10485760=10MB)以下の場合はスモールジョブ実行エンジンで実行される。
(なお、このサイズを大きくし過ぎても逆効果で、OutOfMemoryErrorになったり、Hadoopで分散した方が速くなったりする)

実際、スモールジョブ実行エンジンを使用するだけで、実行時間が短縮されたバッチがあった。

未使用使用総ジョブ数スモールジョブ数
約50分 約15分 約184 約180
約8分 約3分 約20 約17
約65分 約52分 約60 約10

上2つはかなり極端な例で、ほとんどがスモールジョブ^^;なので、3倍くらい速くなっている。
一番下のバッチはほとんどが大きなジョブだが、それでも20%くらい速くなっている。特にこの環境はAmazon EMRなので、1時間を切ると嬉しいらしいw(課金が1時間単位なので)

バッチ全体でなくスモールジョブだけで見ると、だいたい5倍くらい速くなりそうとのこと。 


それと、スモールジョブ実行エンジンをフローのテストの実行にも使用することにより、テストの実行時間も短縮できる。
(テストデータはたいてい小さいだろうから、効果覿面w) 

フローのテストでスモールジョブ実行エンジンを使うには、build.gradleのdependenciesにasakusa-test-inprocess-extの設定を追加する。
(『スモールジョブ実行エンジンを利用したエミュレーションモードの有効化』を参照) 

dependencies {
~
    testRuntime group: 'com.asakusafw', name: 'asakusa-test-inprocess-ext', version: asakusafw.asakusafwVersion
~ }

(build.gradleを修正したら、念のため「./gradlew installAsakusafw」(ASAKUSA_HOMEの下に実行環境を構築するコマンド)を実行しておこう)


実行時のデータ量に応じてHadoopクラスターとそれ以外(スモールジョブ実行エンジン)をAsakusaFWが自動的に切り替えてくれるといいなーと思っていたので、今回の対応はとても嬉しい(笑)


コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« Asakusa Framework 勉強会 20... | トップ | DQ10 スキル上限140到達(ネ... »
最新の画像もっと見る

コメントを投稿

PG(分散処理)」カテゴリの最新記事