Distributed computing Advent Calendar 2016(およびAsakusa Framework Advent Calendar 2016)の6日目です。
Asakusa Frameworkは、分散処理するバッチアプリケーションを記述・実行する為のバッチフレームワークです。
ASF(Apacheソフトウェア財団)のプロジェクトではありませんが、OSSです。(アドベントカレンダーに例示されているプロダクトはASFばっかりだったので、敢えて書いてみましたw)
Asakusa DSL(実態はJava)でアプリケーションを記述し、コンパイルすることで、様々な実行基盤、すなわちHadoopやSpark・M3BPで動くバイナリー(jarファイル)を生成できます。
AsakusaFWが初めて登場したとき(2011年3月)は、実行基盤としてサポートしているのはHadoopのみでした。
つまり自分としては、HiveやPigと同じような、Hadoop(MapReduce)を隠蔽するフレームワークという認識でした。(しかしながら、Hadoopエコシステムの一員としてAsakusaFWを出してくれる人は稀でしたが^^;)
しかし去年はSparkに対応し、今年はM3BPに対応しました。
アプリケーションを変えずに、リコンパイルするだけで実行基盤を切り替えることが出来るのです。
HadoopやSparkは、複数サーバーで分散して処理するフレームワークであり、1台のサーバーで処理しきれない量のデータ(ビッグデータ)を扱う為のものです。
しかし時代は流れ、最近の(高性能)サーバーなら、1台で数百GB~TB級のメモリーを持ち、CPUのコアも数十~100以上持つよう(メニーコア)になっています。(CPUのクロック数は頭打ちになっていますが)
つまり、200GB程度のデータなら今は1台のサーバーで処理できるわけで、こうしたサイズのデータをHadoopやSparkで処理するのはオーバーヘッドが(相対的に)大きくなります。
そこでM3BPが登場しました。
M3BPは、1台のサーバーに特化した、マルチスレッド(OSネイティブのスレッド)で分散処理するフレームワークです。
自分が扱っているバッチは、今のところ全てM3BPで動かせるデータサイズで、バッチの実行速度もM3BP版が最速です。(→実行時間の例)
ただし、M3BPは1台のサーバーのメモリーに乗り切るサイズのデータしか処理できないので、データ量が増えたら実行できなくなります。ただ、その場合でも、AsakusaFWはリコンパイルのみでSpark用のバイナリーを生成できるので、Sparkで実行するという方策が採れるのが強みです(笑)
(なお、Sparkもメニーコアマシンに対応しようという話があるようですが、1年ほど前に指摘したら却下されたのでM3BPを作ったとか? そして、M3BPの方が速いらしい?です)