ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

Flow DSL・インポーター・エクスポーター

2013-12-09 21:31:41 | PG(分散処理)

Asakusa Framework Advent Calendar 2013の9日目です。
今日はFlow DSLについてです。

Flow DSLは「ジョブフロー」や「フロー部品」を定義するDSLです。
内容としては、「演算子」をどういう順序で呼び出すかを記述します。「演算子」は、個別の処理を行うサブルーチン(つまりJavaのメソッド)だと思えばいいでしょう。

例えばWordCountを行うアプリケーションのジョブフローのFlow DSLは以下のようになります。

WordCountOperatorFactory operators = new WordCountOperatorFactory();
Split split = operators.split(this.in);
Count count = operators.count(split.out);
this.out.add(count.out);

this.inはフロー全体の入力ファイル、this.outは出力ファイルを表しています。
operators.split()とoperators.count()が演算子です。Operator DSLを書くとFactoryクラスが生成されるので、それを使います。
split.outやcount.outは各演算子からの出力データを表しています。
出力データを次の演算子に渡してゆき、最終的に出力ファイルに渡すことでアプリケーションを構築します。
見た目の形式はメソッド呼び出しなので、普通のJavaプログラミングと比べてもそんなに違和感は無いかと思います。
(が、『Asakusa DSLの裏側』でも書いた通り、これらはAsakusaFWのコンパイル時に呼ばれるものであり、実行時には呼ばれません) 


冒頭にも書いた通り、Flow DSLではジョブフローとフロー部品の2種類が記述できます。

ジョブフローは入出力ファイルまで指定した、完成したアプリケーションです。
フロー部品は複数の演算子の呼び出しを1つにまとめたサブルーチンです。
表面上の違いは、入出力ファイルが定義されているかどうかです。

AsakusaFWでは、この入出力ファイルのことをインポーター・エクスポーターと言います。
ここまで普通に「ファイル」と呼んできましたが、これはいわゆる論理ファイルの事であり、実体としてはHDFS・Amazon S3上のファイルやローカルファイル、あるいはRDBのテーブルを扱うことも出来ます。

Flow DSLの範疇には含まれませんが、インポーター・エクスポーターを記述するクラスもあります。これもいわばDSLだと思いますが、DSL名は付いていないようです^^;
「インポーター記述」とか「エクスポーター記述」と呼ばれます。ImporterDescriptionやExporterDescriptionといったインターフェースを実装したクラスを作るので、普通のクラス定義そのものだからかもしれませんね。
インポーター記述やエクスポーター記述の基本部分が書かれたクラスは、DMDLから生成することが出来ます。DMDLはまた後日紹介したいと思います。

ちなみにどうでもいい話ですが、インポーター(Importer)とエクスポーター(Exporter)をまとめて呼ぶ言い方は何か無いですかね^^;
Xxporterとか書くのも違和感あるしorz



最新の画像もっと見る

コメントを投稿