Asakusa Framework概観

Asakusa Frameworkのコンセプト

Asakusa Frameworkは、バッチアプリケーションを開発するための包括的なフレームワークです。 複雑なデータフローやデータ構造、高い実行性能が要求される適用領域に対して、開発効率や信頼性、実行効率の優れたバッチアプリケーションを開発することを目的としています。

Asakusa Frameworkでは、JavaをベースにしたDSL(Domain Specific Language)を使ってバッチアプリケーションを記述します。 このDSLはバッチアプリケーションを効率的に記述するための様々なインターフェースやテンプレートを提供し、規模や複雑性の増加に対して適切な粒度でコンポーネントを管理するソフトウェア構造を導入します。 これによりシンプルで再利用性が高く、テストが記述しやすいバッチアプリケーションを開発することが可能です。

Asakusa Frameworkは、Hadoop [1] やSpark [2] , M3 for Batch Processing [3] といった様々な並列分散処理系のプラットフォームをバッチ処理基盤として利用することができます。 これにより、バッチアプリケーションの特性やワークロードなどに応じて柔軟にプラットフォーム構成を選択することができます。 各処理系に対応したDSLコンパイラは、バッチ処理を記述したDSLに対して様々な最適化を行い、高いパフォーマンスを発揮するバッチアプリケーションを生成します。

またDSLとそのコンパイラは、バッチ処理に付随する外部システムとのデータ連携やワークフローに関する動作を管理し、一貫性の高い安定したバッチ運用環境を提供します。 その他の特徴として、Asakusa Frameworkはバージョン間、プラットフォーム間の互換性や相互運用性を重視しており、テクノロジーの進化やワークロードの変更といった環境の変化に対して、より優れたプラットフォームへの移行を容易にします。

Asakusa Frameworkは長いライフサイクルをもつバッチアプリケーションに対して、プラットフォームの改善を促進しつつ、優れた開発生産性、運用性を導入することで、堅牢で持続力のあるバッチ処理基盤を構築することを支援します。

[1]http://hadoop.apache.org/
[2]http://spark.apache.org/
[3]https://github.com/fixstars/m3bp

Asakusa Frameworkの構成

Asakusa Frameworkは、 Asakusa DSL を中心としたフレームワークです。 Asakusa DSLはデータフロー形式のバッチ処理を記述することに特化した言語で、次のような特徴があります。

  • データフロー内のそれぞれの処理をJavaプログラムとして記述できる
  • データフローをデータフロー図と似た形式でそのまま記述できる

上記のような特徴を持つAsakusa DSLや、その他バッチ処理内で利用するデータモデルを定義するためのDSLを作成し、それぞれのDSLを処理するコンパイラに渡します。 このコンパイラは、DSLの内容を解析して、以下のような情報を出力します。

ワークフロー定義
作成したバッチアプリケーション全体の処理の流れを表す情報です。 ワークフローエンジンにこの情報を渡すことで、Asakusa Frameworkが生成する複雑なバッチの構造もワークフローエンジンで処理できるようになります。 詳しくは バッチ実行ツール などを参照してください。
外部システム連携情報
バッチ処理内で利用するデータや、バッチ処理の結果データを外部システムとやり取りするための情報です。 Asakusa Frameworkでは外部システムとシームレスに連携して、バッチ処理を作成するための仕組みが用意されています。 詳しくは 外部システム連携 などを参照してください。
データフロー処理を行うプログラム
入力されたデータをHadoopやSparkなどの各処理系で処理するためのプログラムです。 Asakusa DSLで記述されたデータフロー構造のプログラムは、コンパイラによって各処理系のプログラム群に変換されます。 詳しくは Asakusa DSL などを参照してください。
データモデルプログラム
外部システム連携やデータフロー処理を行うプログラム内で利用されるデータモデルを表すプログラムです。 Hadoopや外部システム内では別々の方式で処理が行われますが、それらをつなぐのがこのデータモデルです。 詳しくは データモデル定義DSL などを参照してください。

以下は、上記の内容を俯瞰する図です。

../_images/overview-develop.png

また、実行時にはそれぞれのコンポーネントに対し、DSLから生成されたそれぞれの情報を渡します。 それぞれのコンポーネントは、これらの情報を元にバッチアプリケーションを分散システム上で協調しながら処理を進めていきます。

../_images/overview-execute.png

Asakusa Frameworkのコンポーネント

Asakusa Frameworkは主に以下のようなコンポーネントの組み合わせで成り立っています。

Asakusa DSL

Asakusa DSLは基幹向けのバッチ処理アプリケーションを作成するために開発されたDSLで、Asakusa Frameworkの中心を担っています。 それぞれのバッチアプリケーションは、Asakusa DSLが提供する「語彙」を拡張したり組み合わせたりしてプログラムを記述し、最後に記述したプログラムをコンパイラに渡して、実行に必要なさまざまな情報を生成します。

Asakusa DSLについての詳しい情報は、 アプリケーションの実装 - Asakusa DSL を参照してください。

データモデル定義DSL

データモデル定義DSL (Data Model Definition Language: DMDL)はAsakusa DSL内で利用するデータモデルプログラムを作成するための言語です。 データモデルが持つ構造を単純な方法で記述でき、そこから以下のような情報を生成します。

データモデル定義DSLについての詳しい情報は、 アプリケーションの実装 - Asakusa Data Model を参照してください。

外部システム連携

外部システム連携は基幹システムでのバッチアプリケーションの肝ともなる部分で、Asakusa Frameworkでは以下のツールや機能を提供しています。

Direct I/O

Asakusa Frameworkの外でHadoopやその周辺に取り込んだデータを直接読み書きする機能。

詳しくは データの直接入出力 - Direct I/O を参照してください。

WindGate

ローカルファイルシステム上のフラットファイルや、JDBC経由でのデータベースアクセスなど、単純なデータソースとの連携を前提としたツール。

詳しくは 外部システムとの連携 - WindGate を参照してください。

なお、これらのツールとの連携はAsakusa DSLから記述できます。

自動テストサポート

Asakusa Frameworkには、Asakusa DSLで記述したアプリケーションの自動テストツールが含まれています。

バッチアプリケーションでは、通常、外部システム連携と複雑な業務ロジックを組み合わせて一連の処理を行います。 そのようなアプリケーションに対し、この自動テストツールは以下のような処理を行います。

  • バッチアプリケーションをビルドする
  • 定義されたテストデータを外部システムに流し込む
  • バッチアプリケーション全体を実行する
  • 外部システムから結果データを取り出す
  • 結果データを検証してレポートする

さらに、このテストツールは統合開発環境(IDE)やビルドツール内からも利用できます。 そのため、開発の早い時期から積極的にテストを行え、また自動ビルドの環境も無理なく用意できるようになっています。

自動テストサポートについての詳しい情報は、 アプリケーションのテスト - TestDriver を参照してください。

バッチ実行ツール

Asakusa Frameworkが生成する情報は、外部システム連携やデータフローを処理を行うプログラムなど様々なもので、さらにそれらはジョブネットの構造を持っています。 そのようなバッチを統一された方法で実行する手段として、以下のツールを提供しています。

Asakusa CLI

Asakusa CLI ( asakusa コマンド ) はバッチアプリケーションの開発支援ツール、および運用ツールを提供するコマンドラインインターフェースです。 このサブコマンド asakusa run は、簡易的なバッチアプリケーション実行ツールを提供します。

詳しくは、 コマンドラインインターフェース - Asakusa CLI を参照してください。

YAESS

YAESSはAsakusa Frameworkで開発したバッチを実行するためのツールです。 このツールは、バッチを実行する様々な環境にあわせて、自由に実行方法をカスタマイズできるように作成されています。

詳しくは、 アプリケーションの実行 - YAESS を参照してください。