S-JIS[2014-12-13/2017-04-30] 変更履歴

Asakusa Framework スモールジョブ実行エンジン

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]

build.gradle(AsakusaFW 0.7.1〜0.7.2):

〜
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'
    }
}

build.gradle(AsakusaFW 0.7.3〜0.8.2):

〜
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'
    }
}

build.gralde(AsakusaFW 0.9.0〜):

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に記述すればよい。

運用環境のASAKUSA_HOME/core/conf/asakusa-resources.xml:

	<!-- スモールジョブ実行エンジンを使用する入力データサイズ(10MB) -->
	<property>
		<name>com.asakusafw.inprocess.limit</name>
		<value>10485760</value>
	</property>
</configuration>

デフォルトでは「-1」、つまりスモールジョブ実行エンジンを使用しない設定になっている。

また、あまり大きな値を設定すると、ソート(シャッフル)用のバッファーが足りなくて、逆に遅くなる(落ちる)可能性がある。


AsakusaFW目次へ戻る / 技術メモへ戻る
メールの送信先:ひしだま