S-JIS[2011-07-24/2016-07-31] 変更履歴

Asakusa Frameworkメモ

Asakusa Frameworkは、複数マシンで分散処理するバッチアプリケーションを開発する為のフレームワーク。
実行基盤としてHadoopSpark等を使用する。
(公開当初はウルシステムズ社が開発していたが、ノーチラス・テクノロジーズ社に移った)


Asakusa Frameworkの概要

AsakusaFWは、複数のマシンで分散して処理を行うバッチアプリケーションを開発する為のフレームワーク。[/2015-07-04]
AsakusaFWの独自言語(AsakusaDSL)で処理を記述し、コンパイルすることで、実行用のバイナリーを生成する。


AsakusaFWを使って開発する/開発したアプリケーションのことを「Asakusaアプリケーション」と呼ぶ。
AsakusaアプリケーションはAsakusaFW独自の言語(AsakusaDSL)で記述する。

ただ、独自言語と言っても、ベースはJava。つまり、Javaをホスト言語とする内部DSLである。

“独自言語”と言うよりはライブラリーと言ってもいいんじゃないかと思う。
(ライブラリーの使い方(どのクラスを使ってどのメソッドを呼び出せばいいか)を覚えるのと大差ない)

また、Javaのコンパイラーの機能を用いて独自のチェックをしたり(Eclipseを使っている場合、EclipseのJavaエディター上でエラーが表示される)、一部のクラスを自動生成したりする。


AsakusaFWは、実行基盤としてHadoopApache SparkM3BPを使用する。[/2016-04-12]
ソース(AsakusaDSL)をコンパイルすることで、それぞれの環境で実行する為のバイナリー(主にjarファイル)が生成される。(各環境向けに ソース(AsakusaDSL)を修正する必要は無い)

M3BPは単一ノードで動作するので、小さめ(数十GB)のデータの処理に適している。[2016-04-12]
それより大きい場合はほとんどのケースでSparkが適している。
単純な集計処理で集計キーの種類が多いような場合はMapReduceが適している。


Asakusaアプリケーションの開発手法には、CI(継続的インテグレーション)の考え方が取り入れられている。
その一環として、単体テストを実行する方法が提供されている。

AsakusaFWのテストドライバーというクラスを使って単体テストを実行するのだが、単体テスト用の入力データと検証データをExcelで書けるのも面白い。
(Excelファイルの雛形もデータ定義から自動生成される)
単体テスト(JUnit)実行時にExcelファイルからデータが読まれ、出力結果をExcelファイル上の検証データと比較する。


Asakusaアプリケーションの開発手順

AsakusaFWを使って開発する/開発したアプリケーションのことを「Asakusaアプリケーション」と呼ぶ。[2015-07-04]
Asakusaアプリケーションは概ね以下のような手順で開発する。

  1. 開発環境の構築
  2. プログラミング(DSLの記述)
  3. コンパイル
  4. 運用環境の構築

開発環境の構築

まずは、Asakusaアプリケーションの開発環境(Asakusaプロジェクト)を構築する必要がある。
Asakusaプロジェクトは(AsakusaFWのライブラリーを含んだ)普通のJavaプロジェクトである。

AsakusaアプリケーションはEclipseで開発することが想定されているが、別のIDEを使うことも可能。
(EclipseプラグインのShafuでAsakusaFWに必要なほとんど全ての作業が行えるので、Eclipseの方が便利だと思うが)

AsakusaFWのインストール方法(開発環境の構築)


プログラミング

Asakusaアプリケーションの作成は、DSLを記述することで行う。
AsakusaDSLはバッチDSL・フローDSL・オペレーターDSLの三層に分かれている。
また、それとは別にDMDLというものがある。

DMDL
AsakusaFWでは、処理対象のデータの形式(テーブルレイアウトやレコード定義)を「データモデル」と呼ぶ。
DMDLはデータモデルを記述する言語。(これは本当にAsakusaFW独自の言語(外部DSL))
DMDLをコンパイルするとJavaのクラス(POJO相当(実際はHadoopのWritable))やテストデータ用のExcelファイルの雛形が生成される。
DMDL
オペレーターDSL
具体的な処理を記述するDSL。
これはほぼ普通のJavaプログラム(メソッド)としてプログラミングする。
オペレーターDSLとして記述したメソッドは、AsakusaFWでは「演算子(オペレーター)」と呼ぶ。
Operator DSL
フローDSL
フロー(オペレーターDSLで作成した演算子を呼び出す順序)を記述するDSL。
フロー部品(FlowPart:演算子として使用するサブルーチン的なフロー)と、ジョブ(JobFlow:入出力ファイルまで含めて記述するフロー)の2種類がある。
Flow DSL
インポーター/エクスポーター(入出力ファイルを表すもの)
バッチDSL
バッチを記述するDSL。
バッチは、アプリケーションを実行する単位となる。いわば1つのシェルが1つのバッチである。
バッチの中に複数のジョブ(フローDSLで記述したJobFLow)を含めることが出来る。
Batch DSL

コンパイル

データモデルを定義したら、DMDLのコンパイルを行う。
ここで生成したJavaクラスを、オペレーターDSLやジョブフローを記述するフローDSLで使用する。

バッチDSLまで記述が終わったら、バッチのコンパイルを行う。
これにより、実行に必要なjarファイル類が生成される。

コンパイルは、コマンドライン(シェル)ならGradle、EclipseならShafuを使って行う。


運用環境の構築

コンパイルして生成されたバイナリー(jarファイル等)を運用環境に配置(デプロイ)して実行する。
運用環境の構築

Asakusaアプリケーションを実行する為のシェルも提供されている。
YAESS


Asakusa Framework関連用語・クラス


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