Asakusa Framework は基幹バッチ開発のためのものなのか?
この記事は、以下ふたつのAdventCalendarの20日目の記事として書いています。
ここ1、2ヶ月でAsakusa Frameworkの記事はこれで10本目となりますが、私がこうしてこのAsakusaを推しているのは、Asakusaが基幹バッチ開発だけのためのものであると狭い認識をされていることを是正し、Hadoop上でバッチアプリ開発をする様々な場面で使われるようになって欲しいという想いからです。
自分が使うオープンソースである以上、広く使われているものである必要がありますからね。
Asakusa Framework とは
あらためて、AsakusaのWebサイトを確認してみると、トップに以下のように書かれています。
基幹バッチとわざわざ書いているのは、ターゲットをフォーカスするための戦略なのでしょうが、わざわざこんなに用途を狭める必要は無いと思います。Asakusaは基幹であろとなかろうと、Hadoopで稼働するバッチアプリケーションに広く適用できるフレームワークです。
基幹バッチをHadoopで動かすという違和感
実を言うと、私はAsakusaに対して当初かなりネガティブなイメージがありました。そもそも、基幹バッチをHadoopで動かすということ自体に違和感を感じていたのです。
確かに、夜間で処理が終わりきらず、朝の業務時間帯まで突き抜けそうなバッチ処理というのはよく聞きます。でもだからって、現状概ね安定して稼働しているバッチアプリケーションをAsakusaで作り直すでしょうか。DBMSに格納してあるデータをHDFSとやりとりするコストをどう考えるのか。そもそも、基幹業務に使われているデータがHadoopに乗せるような「ビッグデータ」なのか!?
もちろんAsakusaはバッチ処理開発を安定的かつ効率的なものにできる仕掛けや、DBMSとHDFSとのやりとりを効率化する仕掛けが用意されていて、真正面から基幹バッチ開発に取組んでいるフレームワークです。また「ビッグデータ」はデータサイズだけの問題ではなく、計算処理のために並列分散環境が必要な場面もあります。実際に基幹バッチでAsakusaが利用されている事例も多いようです。
でもだいぶ壁を感じていました。
まともなバッチアプリケーションとしては唯一
基幹バッチでなくても、Hadoopで動かしたいバッチ処理はいくらでもあります。
分析用途に使うログなどの半非構造なデータを、分析しやすい構造化されたデータに変換するための処理や、複数のテーブルに正規化されているデータを分析のために非正規化する処理など。
こうしたバッチ処理をHadoop上でどうやって開発するのでしょうか。
素のMapReduce?結構しんどいと思います。
Hive?Hiveはクエリだけです。アプリケーションロジックはHadoopの外側で実装せねばならず、並列分散処理環境の恩恵を受けられません。バカデカいクエリは書きたく無いですし。
Pig?Asakusa以外では一番現実的でしょうか。でも専用言語を学習する必要があります。且つ、ほぼデータ操作に限られたもので、ロジックはUDF(ユーザ定義関数)として別途開発が必要です。そもそもアドホックな分析用途を想定して作られたものです。
つまり、データ操作だけでなくデータを使った計算処理を、MapReduceを意識せず実装できて、且つ、ユニットテストだけでなく、データフローまで含めたテストまで実装できる仕組みは、実質Asakusa Frameworkだけだと思います。
結論
Asakusa Frameworkは基幹バッチ開発のためだけのものではありません。Hadoop上でバッチアプリケーションを開発する場面があったら、利用を検討してみましょう。
勉強会開催します!
ということで、Asakusa Framework にちょっとでも興味のある皆さんの力になれたらと思い、勉強会を開催することにしました。
入門向けなので、是非、遠慮なくご参加ください。
Asakusa Framework 勉強会 2014冬 - connpass
残り一枠となっていますが、繰り上がることも十分ありえるので、遠慮なくお申し込みください。