分散処理ミドルウエアの「Hadoop」を基幹バッチ処理に適用するためのフレームワーク「Asakusa」。第2回では、その構成要素を紹介しよう。

 Asakusaは、MapReduceアプリケーションの入出力データのクラスファイルを生成する「Model Generator」、独自のDSL(Domain Specific Language)用コンパイラである「Ashigel Compiler」、実行ライブラリの「Rumtime Library」、データ入出力管理フレームワークの「ThunderGate(雷門)」という四つを提供している。

 まず、ThunderGate以外の三つについて紹介しよう(図1)。

図1●AsakusaによるMapReduce アプリケーションの生成
図1●AsakusaによるMapReduce アプリケーションの生成
[画像のクリックで拡大表示]

Model Generator

 Model Generatorは、開発者が定義した、MapReduceアプリケーションの入出力データ形式をインプットとし、Hadoop独自の「Writable」というインタフェースを実装したJavaのクラスファイルを生成する。入出力データの形式は、MySQLのテーブルまたはビューとして定義する。このため開発者はHadoopの知識がなくても、データ形式を定義できる。

 そもそもHadoopにおいて、MapReduceアプリケーションの入出力インタフェースであるWritableを定義するのは煩雑であり、バグが混入しやすい。Asakusaでは、Model Generatorでこれを自動生成することで、開発効率を高めている。Model Generatorで生成したクラスを、以降「Model Class」と呼ぶ。

Ashigel CompilerとRuntime Library

 Ashigel Compilerは、後述する三つのDSL(「Operator DSL」「Flow DSL」「Batch DSL」)で記述したコードと、Model Generatorが生成したModel Classを基に、MapReduceのJavaソースコードを生成し、MapReduceのJARファイルを生成する。

 このJARファイルには、自動生成したロジック、Model Class、Asakusaの実行ライブラリであるRuntime Libraryなどが含まれる。Ashigel Compilerが入力とする三つのDSLを利用することで、開発者が分担して開発することが可能となる。三つのうちの二つ(Flow DSLおよびBatch DSL)はHadoopの知識がなくても利用することが可能であり、このためAsakusaでは、多数のチームに分かれた大規模開発が可能になっている。

データの入出力を高速化

 次にAsakusaの四つ目の構成要素であるThunderGateについて紹介する。Asakusaでは、後述するジョブフロー(トランザクション)ごとにデータを永続化するため、都度、RDBMSとHadoopクラスター間でデータをやり取りしている。このやり取りに時間がかかると、全体の処理性能を下がってしまう。

 このやり取りを高速化するのが、ThunderGateである。データのやり取りや、障害時にリカバリーを行う機能を備える。図2に、イーシー・ワンのワークフローエンジン「monkey magic」と組み合わせて使う場合の仕組みを示した。ThunderGateは、DBサーバーとHDFS上の不要になったファイルを削除する機能も備えている。

図2●入出力管理フレームワーク「ThunderGate」の仕組み<br>ワークフローエンジンとしてイーシー・ワンの「monkey magic」を使った場合を示した。
図2●入出力管理フレームワーク「ThunderGate」の仕組み
ワークフローエンジンとしてイーシー・ワンの「monkey magic」を使った場合を示した。
[画像のクリックで拡大表示]

 データをHadoopクラスターに入力するImporterでは、読み出し対象となったデータに対してロックを取ることが可能である。データをDBサーバーに書き戻すExporterは、出力データの重複チェックを行う機能がある。

 アプリケーション開発者は通常、ThunderGateの存在を意識しなくてよい。DSLで入出力データに関する処理を記述すれば、ThunderGateがバックエンドで動作する。