Asakusa Frameworkのスモールジョブ実行エンジンについて。
|
スモールジョブ実行エンジンは、Asakusa Framework 0.7.1で追加された実行基盤。0.7.3で正式版となった。[/2015-04-22]
入力データが小さい場合、Hadoopクラスターよりも高速に実行できる。
Hadoopのジョブの実行は起動にそれなりの時間がかかる(Hadoop税と呼ばれたりする)が、
スモールジョブ実行エンジンは単なるJavaアプリケーションなので、JavaVMの起動時間だけで済む。
(おおよそ5倍くらい速いらしい)
スモールジョブ実行エンジンは、フロー(JobFlowやFlowPart)のテストや運用環境で使用できる。
フローのテストは、通常(今まで)はHadoop(のスタンドアローンモード)を使って実行されるが、大抵の場合はテストデータは小さいので、スモールジョブ実行エンジンを使うと速くなる。
運用環境で使う場合、各ステージ(Hadoopジョブ)毎に、入力データサイズに応じて実行時に自動的にスモールジョブ実行エンジンとHadoopクラスターのどちらで実行されるかが切り替わる。
AsakusaFWで作成するようなバッチアプリケーションは、生成されるステージ数が多くなり、扱うデータが小さいステージも出てくる。そういったステージで非常に有効。
ただし、スモールジョブ実行エンジンはHadoopクライアントのJavaVM上で動作する(通常のHadoopタスクはスレーブノード上で動作する)ので、ログの出力のされ方が異なる。
スモールジョブ実行エンジンは実行自体にはHadoopを使わない。
なので、Windowsでもスモールジョブ実行エンジンを使うことが出来る。つまり、フローのテストをWindows上で実行することが出来る。
(0.7.1より前は、WindowsでHadoopが動かないので(動かすのが大変なので)、フローのテストをWindows上で実行することは困難だった)
フロー(JobFlowやFlowPart)のテストにスモールジョブ実行エンジンを使用する場合、build.gradleにasakusa-sdk-test-emulationの設定を追加する。[/2015-04-22]
(Eclipseからのテストだけであれば、Shafuの設定でテストを実行できるようにする方法でもよい。[2015-04-18])
〜 dependencies { compile group: 'com.asakusafw.sdk', name: 'asakusa-sdk-core', version: asakusafw.asakusafwVersion compile group: 'com.asakusafw.sdk', name: 'asakusa-sdk-directio', version: asakusafw.asakusafwVersion compile group: 'com.asakusafw.sdk', name: 'asakusa-sdk-windgate', version: asakusafw.asakusafwVersion testRuntime group: 'com.asakusafw', name: 'asakusa-test-inprocess-ext', version: asakusafw.asakusafwVersion provided (group: 'org.apache.hadoop', name: 'hadoop-client', version: '1.2.1') { exclude module: 'junit' exclude module: 'mockito-all' exclude module: 'slf4j-log4j12' } }
〜 dependencies { compile group: 'com.asakusafw.sdk', name: 'asakusa-sdk-core', version: asakusafw.asakusafwVersion compile group: 'com.asakusafw.sdk', name: 'asakusa-sdk-directio', version: asakusafw.asakusafwVersion compile group: 'com.asakusafw.sdk', name: 'asakusa-sdk-windgate', version: asakusafw.asakusafwVersion testRuntime group: 'com.asakusafw.sdk', name: 'asakusa-sdk-test-emulation', version: asakusafw.asakusafwVersion provided (group: 'org.apache.hadoop', name: 'hadoop-client', version: '1.2.1') { exclude module: 'junit' exclude module: 'mockito-all' exclude module: 'slf4j-log4j12' } }
AsakusaFW 0.9.0以降は、testRuntimeを特に指定する必要は無い。[2017-04-30]
Eclipseを使っている場合は、上記の設定を追加したらEclipseの設定を作り直す必要がある。
$ cd プロジェクト $ ./gradlew eclipse
※Shafuを使っている場合は、「Eclipseプロジェクト情報を再構成」を実行すればよい。
フローのテストを実行するにはAsakusaFWの実行環境が必要となるので、開発環境にAsakusaFWをインストールしておく必要がある。
(これは、Asakusaアプリケーションに対応するバージョンのAsakusaFWが入っていればよい。スモールジョブ実行エンジン特有の設定は無い)
環境変数ASAKUSA_HOMEにインストール場所(ディレクトリーのパス)を指定した上で、以下のコマンドを実行する。
$ cd プロジェクト $ ./gradlew installAsakusafw
※Shafuを使っている場合は、「Asakusa Frameworkのインストール」を実行すればよい。[/2015-04-18]
運用環境(Hadoopクラスターの分散環境)でスモールジョブ実行エンジンを使用する場合、Hadoopの設定にスモールジョブ実行エンジンの指定を追加する。
指定できる内容はいくつかあるが、基本的には、スモールデータと見なすサイズ(バイト数)だけ設定すればよい。
入力データサイズ(全ファイル(圧縮されている場合は圧縮後のサイズ)の合計)がこの指定以下だと スモールジョブ実行エンジンが使用される。
Asakusaアプリケーションが使用する為のHadoopの設定は、asakusa-resources.xmlに記述すればよい。
〜 <!-- スモールジョブ実行エンジンを使用する入力データサイズ(10MB) --> <property> <name>com.asakusafw.inprocess.limit</name> <value>10485760</value> </property> </configuration>
デフォルトでは「-1」、つまりスモールジョブ実行エンジンを使用しない設定になっている。
また、あまり大きな値を設定すると、ソート(シャッフル)用のバッファーが足りなくて、逆に遅くなる(落ちる)可能性がある。