ひしだまの変更履歴

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

Asakusa Frameworkの使いどころ

2013-12-03 21:03:58 | PG(分散処理)

Asakusa Framework Advent Calendar 2013の3日目です。

今日はAsakusaFWの使いどころについて書いてみたいと思います。


自分はHadoopの勉強をしていてAsakusaFWを知ったので、当初はHivePigCascading等と同様の“Hadoopをラップ(隠蔽)するフレームワーク(ツール)”という認識でした。
しかし、AsakusaFWのコンセプトはバッチアプリケーションを作成するフレームワークであり、実行基盤としてHadoopを利用しているという位置付けです。
(そのせいか、Hadoopエコシステムの仲間としてAsakusaFWが紹介される事はあまりありません^^;(ロゴの方向性もHadoopやHiveとは違うしw(こんな絵もあったけど(爆))))

そういうわけで、「どういう時にAsakusaFWを採用すべきか?」と言うと、「Hadoop上で動くバッチアプリケーションを作りたいとき」という事になるでしょう。何のひねりも無いですが(苦笑)


Hadoopを使ってプログラミングする為の言語と言うと、日本ではHiveが一番多いのではないかと思います。
自分も素のMapReduceを試して、その次に勉強したのはHiveでした。
HiveはSQLに似ているので、SQLを知っている自分にとっては学習コストが低いと思ったからですね。コンソールがあるので実際にHiveQLを実行しながら試すことが出来ますし。
(Pigも関数型言語に似ていて面白いですけどね) 

一方、AsakusaFWはAsakusa DSLを勉強する必要があります。
最小限のアプリケーションを作ってみようと思っても、DMDLOperator DSLFlow DSLを書く必要があります。
学習の初期コストは、HiveよりもAsakusaFWの方が高いのは否定しづらいです^^;

しかし、今までのバッチ処理でも、SQLだけで構築していたでしょうか?
自分はJavaでバッチアプリケーションを作ることが多かったです。その中でSQLを実行して、値に応じて色々な処理を行っていました。ある程度複雑な処理を記述しようとすると、SQLだけでバッチを作るのは無理だと思います。
AsakusaFWでプログラミングする際には、最小粒度の部分は普通にJavaでのコーディングなので、今までのJavaアプリケーションと同様です。

そういう訳で、Hadoopでバッチアプリケーションを作るなら、HiveよりもAsakusaFWの方が良いと思います。
特に、Hiveで複雑な処理をしようとしてUDFを作ったりCASE-WHENを多用したりするのだったら、AsakusaFWにした方が良いんじゃないかと思います。
(もちろん、(バッチ処理でなく)対話型の処理や、HiveQLのクエリー数個で済む処理だったらHiveの方が良いです)
(あと、SQLとHiveQLは結局似て非なるものなので、SQLの感覚でHiveQLを書こうとして逆にハマる可能性も無きにしも非ず) 

CascadingもJavaをホスト言語とするDSLみたいな感じなので、概念的にはAsakusaFWと似ている部分があるかもしれません。
ただ、Cascadingは、関数の出力結果がどういうフィールドになるのかがコーディング時に分かりにくいんですよね…。
AsakusaFWはデータモデルというもので入出力のレコードレイアウトをきっちり決めるので、そこが分かりにくいということはありません。


ちなみに、AsakusaFWの開発環境を作るのは最近ではすごく簡単になりました。
UNIXならJinrikishaで一発ですし、WindowsでもGradleプラグインで一発で開発環境を構築できるようになりました。
(WindowsではBatch DSL・Flow DSLの単体テストが動かせないだけで、Asakusaアプリケーションの開発を行うことは出来ます。単体テストが通ってからでないとソースをコミットしちゃ駄目、という運用だと適合しませんが><)

開発環境を作るとAsakusaFWのサンプルアプリケーションのソースが入っていますので、どんなものか見てみるのは簡単です。
興味があったら是非見てみて下さい。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする