22. バッチのコンパイル¶
このチュートリアルでは、Asakusa DSLのソースコードをコンパイルして実行可能なバッチアプリケーションを生成する方法を説明していきます。
22.1. Batch DSLコンパイラ¶
バッチの作成 で作成したバッチは Batch DSLコンパイラ を使ってコンパイルすることで、 Asakusa Frameworkが対応している各実行プラットフォーム上で実行可能なバッチアプリケーションを生成することができます。
Batch DSLコンパイラは各実行プラットフォーム向けにそれぞれ異なるコンパイラを提供しています。 現時点では以下のBatch DSLコンパイラを利用することができます。
Batch DSLコンパイラ | 説明 |
---|---|
MapReduce DSLコンパイラ | Hadoop MapReduce上で実行するバッチアプリケーションを生成する |
Spark DSLコンパイラ | Apache Spark上で実行するバッチアプリケーションを生成する |
M3BP DSLコンパイラ | M3BP上で実行するバッチアプリケーションを生成する |
プロジェクトに対してどのBatch DSLコンパイラを利用するかは、プロジェクトのビルド設定で指定します。
このチュートリアルの手順でプロジェクトを作成した状態では Spark DSLコンパイラ が利用可能になっています。
22.2. バッチアプリケーションをコンパイルする¶
それでは、Batch DSLコンパイラを実行して実行可能なバッチアプリケーションを生成してみましょう。
22.2.1. Eclipse上でバッチアプリケーションをコンパイル¶
Shafuを導入したEclipse環境では、Batch DSLコンパイラをコンテキストメニューから実行することができます。
- プロジェクトを選択してコンテキストメニュー(右クリックなどで表示されるメニュー)を表示します。
- コンテキストメニューの Jinrikisha (人力車) を選択し、サブメニューとして表示される Asakusaバッチアプリケーションを生成 を選択します。
22.2.2. コマンドライン上でバッチアプリケーションをコンパイル¶
コマンドライン上からBatch DSLコンパイラを実行するは、Gradleの compileBatchapp タスクを実行します。
./gradlew compileBatchapp
22.2.3. コンパイルエラーに対応する¶
コンパイル対象のDSLに問題があるなどの理由でバッチアプリケーションの生成に失敗した場合には、コンソールにエラーメッセージが表示されコンパイルが中断されます。
...
INFO compiling batch class: com.example.batch.SummarizeBatch
ERROR output port "out" of "CategorySummaryOperator#summarizeByCategory(@Summarize)" is not connected to the other input port nor jobflow output (com.example.flowpart.CategorySummaryFlowPart)
ERROR input port "port" of "N/A{name=categorySummary}" is not connected from the other output port nor jobflow input (com.example.flowpart.CategorySummaryFlowPart)
...
エラーメッセージにはコンパイルが失敗した原因と、該当のクラスが表示されます。
上記の例は、フロー部品 CategorySummaryFlowPart
において演算子 summarizeByCategory
の出力ポート out
をデータフローの出力 categorySummary
に接続する処理を記述し忘れていた場合のエラーです。
Flow DSLでは、演算子の出力は必ずいずれかの演算子への入力、もしくはジョブフローからの出力と接続されている必要があります。 またデータフローの入力や出力も同様に、他の要素と接続されていなければなりません。 このようにBatch DSLコンパイラはデータフローの接続に対する厳密なチェックを行います。
なおデータフロー内で演算子の出力を意図的に利用せず捨てたい場合は、停止演算子( CoreOperatorFactory.stop()
)を利用してその出力を利用しないことを明示的にコンパイラに指示する必要があります。
22.2.4. コンパイル結果を確認する¶
Batch DSLコンパイラが生成したバッチアプリケーションは、デフォルトではコンパイラの種類ごとに以下のディレクトリに出力されます。 各バッチアプリケーションはバッチクラスごとに、バッチIDに基づくサブディレクトリ配下に生成されます。
Asakusa DSLコンパイラ | 出力ディレクトリ |
---|---|
Spark DSLコンパイラ | build/spark-batchapps/spark.<batch-id> |
M3BP DSLコンパイラ | build/m3bp-batchapps/m3bp.<batch-id> |
MapReduce DSLコンパイラ | build/batchc/<batch-id> |
22.3. 関連ドキュメント¶
- [Asakusa Framework documentation] - Asakusa DSLユーザーガイド
- [Asakusa Framework documentation] - Asakusa Gradle Pluginユーザーガイド
22.3.1. 各コンパイラのリファレンス¶
Asakusa DSLコンパイラの各リファレンスドキュメントには、コンパイラオプションなどの詳細な情報が記載されています。