22. バッチのコンパイル

このチュートリアルでは、Asakusa DSLのソースコードをコンパイルして実行可能なバッチアプリケーションを生成する方法を説明していきます。

22.1. Batch DSLコンパイラ

バッチの作成 で作成したバッチは Batch DSLコンパイラ を使ってコンパイルすることで、 Asakusa Frameworkが対応している各実行プラットフォーム上で実行可能なバッチアプリケーションを生成することができます。

Batch DSLコンパイラは各実行プラットフォーム向けにそれぞれ異なるコンパイラを提供しています。 現時点では以下のBatch DSLコンパイラを利用することができます。

Batch DSLコンパイラ
Batch DSLコンパイラ 説明
MapReduce DSLコンパイラ Hadoop MapReduce上で実行するバッチアプリケーションを生成する
Spark DSLコンパイラ Apache Spark上で実行するバッチアプリケーションを生成する
M3BP DSLコンパイラ M3BP上で実行するバッチアプリケーションを生成する
_images/dsl-compiler.png

プロジェクトに対してどのBatch DSLコンパイラを利用するかは、プロジェクトのビルド設定で指定します。

このチュートリアルの手順でプロジェクトを作成した状態では MapReduce DSLコンパイラ および Spark DSLコンパイラ の2つが利用可能になっています。

22.2. バッチアプリケーションをコンパイルする

それでは、Batch DSLコンパイラを実行して実行可能なバッチアプリケーションを生成してみましょう。

22.2.1. Eclipse上でバッチアプリケーションをコンパイル

Shafuを導入したEclipse環境では、Batch DSLコンパイラをコンテキストメニューから実行することができます。

  1. プロジェクトを選択してコンテキストメニュー(右クリックなどで表示されるメニュー)を表示します。
  2. コンテキストメニューの Jinrikisha (人力車) を選択し、サブメニューとして表示される Asakusaバッチアプリケーションを生成 を選択します。
_images/shafu-compile-batchapp.png

22.2.2. コマンドライン上でバッチアプリケーションをコンパイル

コマンドライン上からBatch DSLコンパイラを実行するは、Gradleの compileBatchapp タスクを実行します。

./gradlew compileBatchapp

22.2.3. コンパイルエラーに対応する

コンパイル対象のDSLに問題があるなどの理由でバッチアプリケーションの生成に失敗した場合には、コンソールにエラーメッセージが表示されコンパイルが中断されます。

...
INFO  バッチクラスをコンパイルします: com.example.batch.SummarizeBatch
ERROR CategorySummaryOperator#summarizeByCategory(@Summarize)の出力outが他の演算子への入力、もしくはジョブフローの出力に接続されていません (at com.example.flowpart.CategorySummaryFlowPart)
ERROR N/A{name=categorySummary}の入力portが他の演算子からの出力、もしくはジョブフローの入力に接続されていません (at com.example.flowpart.CategorySummaryFlowPart)
ERROR コンパイルはエラーにより中断しました (com.example.batch.SummarizeBatch)
...

エラーメッセージにはコンパイルが失敗した原因と、該当のクラスが表示されます。

上記の例は、フロー部品 CategorySummaryFlowPart において演算子 summarizeByCategory の出力ポート out をデータフローの出力 categorySummary に接続する処理を記述し忘れていた場合のエラーです。

Flow DSLでは、演算子の出力は必ずいずれかの演算子への入力、もしくはジョブフローからの出力と接続されている必要があります。 またデータフローの入力や出力も同様に、他の要素と接続されていなければなりません。 このようにBatch DSLコンパイラはデータフローの接続に対する厳密なチェックを行います。

なおデータフロー内で演算子の出力を意図的に利用せず捨てたい場合は、停止演算子( CoreOperatorFactory.stop() )を利用してその出力を利用しないことを明示的にコンパイラに指示する必要があります。

22.2.4. コンパイル結果を確認する

Batch DSLコンパイラが生成したバッチアプリケーションは、デフォルトではコンパイラの種類ごとに以下のディレクトリに出力されます。 各バッチアプリケーションはバッチクラスごとに、バッチIDに基づくサブディレクトリ配下に生成されます。

バッチアプリケーションの出力先
Asakusa DSLコンパイラ 出力ディレクトリ
MapReduce DSLコンパイラ build/batch/<batch-id>
Spark DSLコンパイラ build/spark-batchapps/spark.<batch-id>
M3BP DSLコンパイラ build/m3bp-batchapps/m3bp.<batch-id>