S-JIS[2016-04-12/2021-05-13] 変更履歴

Asakusa on M3BP

Asakusa Frameworkの実行環境としてM3 for Batch Processingを使う機能。


概要

AsakusaFW 0.8.0(2016/4/8)で、Asakusa Frameworkの実行環境としてM3 for Batch Processing(以下M3BP)を使う機能が加わった。

M3BPは、フィックスターズ社が開発した、単一ノード・マルチコア(マルチプロセッサー)で動作するデータ処理エンジン(OSS)。
Hadoopがコモディティーなサーバーを複数台使用してクラスターを組むのに対し、M3BPは高性能なサーバー1台(数十のCPU(コア)を持ち、メモリーも大量に積む(数十GB〜TB級))を対象とする。
要するにマルチスレッドの処理エンジンなのだが、これはJavaではなく、ネイティブな実行バイナリーで動くので、Javaより速い。

この機能は(Asakusa on Sparkと同様に)運用環境で実行するものであり、Asakusaアプリケーションの開発方法は従来のAsakusaFWと全く同じ。
(単体テストの実行にはM3BPを使用しない)

AsakusaDSLは従来のものと同じだが、ネイティブライブラリーを生成する為、コンパイルにはJavaだけでなくCMakeやg++が必要になる。(従来のHadoop版バッチやSpark版バッチと同時にコンパイルすることは出来る)
実行方法は、従来と同じくYAESSを使用する。(バッチ名にm3bpを付けるだけ)


M3BPが動作するサーバーは、数十のCPU(コア)を持ち、メモリーも大量に積んでいることを想定している。
つまりメモリーが数百GB以上あり、入出力データが数十GB程度というバッチ(自分が作っているバッチもほとんどはこのサイズ以下)なら、中間データまで含めてメモリーに乗り切るので処理できる。
もしデータがメモリーに収まらない場合は、(スピルアウト等はせず)落ちるらしい。
(M3BPで処理できないデータ量ならHadoopクラスター上のSparkで動かせばいい。AsakusaFWならアプリは同一でコンパイルのみで両方作れるので、切り替えは簡単(笑))

Asakusa on M3BPは(単一ノードで動くので)Hadoopは直接は関係ないが、従来のAsakusaFWと同じくDirect I/OでHDFS上のファイルにアクセスできるし、ローカルファイルにもアクセスできる。

M3BPはネイティブな実行バイナリーで動作するが、AsakusaDSLは従来通りJavaで記述する。
実行時の処理分担は以下のような感じになっているらしい。

  1. ファイルからデータを読み込む。(M3BPが確保したバッファーにJavaからnio(New I/O)で書き込む)
  2. M3BPがデータを分割して各スレッドに割り当て(スケジューリングし)、処理する。
    1. Comparator(AsakusaDSLからC++ソースを生成、コンパイルしてネイティブバイナリーになる)を使ってデータをソート(シャッフル)する。
    2. JNI経由でJavaを呼び出す。呼び出された側はメモリー上のデータをデシリアライズしてOperatorのメソッドを呼ぶ。
      (1レコードずつJNI呼び出しをするのではなく、ソートされたデータの塊を渡す。渡すと言ってもデータをコピーしているわけではなく、M3BPが確保したバッファーのアドレス(ポインター)を渡しているらしい)
  3. 結果をファイルに出力する。

つまりHadoopやSparkが行っているようなことをM3BPが行うのだろう。
M3BPは単一ノード・マルチスレッドに特化したHadoopやSparkというイメージ。

Javaもマルチスレッドを扱うことは出来るが、M3BPはCPUのコアを直接使うネイティブスレッドであり、Javaのスレッドはそういう意味では論理的なスレッドである。また、Javaのスレッドはメモリーバリアー(オブジェクトのスレッド間の同期?)があるが、M3BPはそれが起きないよう考慮されているので速いらしい。
また、バイト列の操作に関しても、Javaは範囲外へアクセスしないかどうかのチェックが入るので、ネイティブの方がやはり速いらしい。

あと、M3BPは単一ノードに特化しているので、複数サーバー間のデータ転送やハートビート確認のような処理が発生しない。
かつ、オンメモリーでの処理に特化しているので、入出力ファイル以外のファイルアクセスも発生しない。


M3BPはC++で書かれている。
アプリケーションもC++で書けば、AsakusaFW(Java)を使うよりも高速になるかもしれない。
が、サンプルのWordCountを見る限り、自分でM3BP用アプリを直接コーディングする気にはなれない^^;


AsakusaFW目次へ戻る / 技術メモへ戻る
メールの送信先:ひしだま