ひしだまの変更履歴

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

Asakusa on Sparkのコーディング上の注意点

2015-12-05 09:21:53 | PG(分散処理)

Asakusa Framework Advent Calendar 2015およびApache Spark Advent Calendar 2015の5日目です。

アドベントカレンダー4日目で、Asakusaアプリケーションをリコンパイルするだけで、Hadoop版とSpark版の実行用バイナリー(jarファイル等)が生成できる(Asakusa on Spark)という話をしました。
特筆すべきは、Hadoop用とAsakusa用でAsakusaアプリケーション(Javaソース)を変更する必要は無い、という事です。

が、さすがに全くの無条件というわけにはいきません^^;
Asakusaアプリケーション(特にOperator DSL)の書き方が、AsakusaFWの仕様をきちんと満たしている必要はあります。
と言っても、おおざっぱに言って、MTセーフであるように記述する、という程度のことですが。

Hadoopは(基本的には)分散されたタスク毎にJavaVMを立てるので、各タスクはシングルスレッドで動きます。したがって、MapReduceアプリケーションがMTセーフでなくても動きます。
が、Sparkは各タスクを実行するマシン上で、さらにマルチスレッドで動きます。したがって、MTセーフである必要があります。

また、順序依存のコーディングがされていると、Hadoop版とSpark版の実行結果が完全には一致しないことがありえます。
Hadoopはソートベースのシャッフル、Sparkはハッシュベースのシャッフルを行うので、順序は全く変わると思った方がいいです。
例えばSummarize演算子でDOUBLE型の集計をすると小数点以下の微小なずれが出ることがありますし、Fold演算子で未初期化の項目を残して集約すると(先頭レコードの値が生き残るので)その項目の値が異なる可能性があります。


それにしても、リコンパイルのみで実行基盤が切り替えられるというのはすごいことだと思います。

例えばHadoopが流行したからMapReduceでアプリケーションを書き、次にSparkが流行したのでSparkに移行したいと重いっても、アプリケーションの書き直し(移植)が発生します。
次にまた新しいものが出たら、また書き直し…?

AsakusaFWは、公開された当初はHadoopのみがターゲットでしたが、当時から、他に良い実行基盤が出れば対応すると言っていました。
とはいえ、そういう事を謳うソフトは色々あり、実際として対応するものは滅多に無いので、個人的には懐疑的でした。
しかしAsakusaFWは、今までHadoop上で動いていたものが、実際にSpark上でも動かせるようになった。これは本当にすごいと思います。


以下MSX Advent Calendar 2015の5日目になりますがw、個人的にアプリケーションの移植というものに昔から興味がありました。
知人が作ったPC9801のゲームをX68000Windowsに移植したこともあります。(あ、MSXにも移植してたw)
X68000のゲームをWindowsに移植したこともあったな…)

自分はMSXユーザーだったのですが、時代が経つにつれ、X68000、Windows95…に移りました。
X68000やWindowsのハードウェアは、MSXから見るととてつもない高性能です。MSXで普通の速度で動いていたソフトなら、Windowsだとそれ以上の速度で動かせるはずですが、OSが違うので、MSXのソフトはそのままでは動きません。動かす為には移植するしかないですが、当然かなりの手間がかかるはずです。
MSXエミュレーターというものも出ていましたが、Windows95の時代のハードウェアだと、やはり動きは遅かったです。(エミュレーターが動くだけでも画期的ですが!)
速度を出すためには移植しかないが、手動だとやってられないので、自動化できるといいなぁなんて夢見てました^^; 

ついでに言うと、大学の卒業研究はC言語でアプリケーションを作ったんですが、基本的にはX68000上で書いていたんですが、大学のPC(UNIX)だと最初はコンパイルすら通らなかったです(苦笑)
printfの戻り値の型とか、BSD系?とそれ以外で違ったりするんですよね…orz

そういう経緯があるので、リコンパイルのみでアプリケーションが動くというはすごいなぁと思うわけです(笑)
(そういう意味では、Java自体が「どこでコンパイルしてもどのOS上のJavaVMでも動く」というのはすごいし、Windows95のアプリがWindows7でも動くというのもすごい)

SIerにとっても、バッチに興味が無い人(ウェブやらリアクティブやらの方に興味がある人)にとっても、何か実行基盤が新しくなる度にアプリケーションを書き直したりしたくないでしょうから、AsakusaFWは理想的なんじゃないかと思いますw


コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« Asakusa on Sparkのコンパイル | トップ | AsakusaFWが苦手な処理 »
最新の画像もっと見る

コメントを投稿

PG(分散処理)」カテゴリの最新記事