Hadoop0.23.0が出たので、噂のMapReduce2.0であるYARNの最小限サンプルを書いてみた。
いやー、しかしYARNを甘く見てた^^;
YARNはもうMapReduceとは(直接は)関係ないので、MapReduce2.0とは呼ばない方がいいね。
従来のHadoopなら、「MapReduceのプログラムを書くよ」と言ったら、MapperやReducerを実装するのをイメージすると思う。
そして、JobTrackerやTaskTrackerが自動的にタスク分割して実行してくれる。障害が発生したら別ノードで再実行してくれるし。
しかし「YARNのプログラムを書くよ」というのは、JobTrackerやTaskTrackerや障害対応をコーディングする事に相当する!
今回作ってみたのが“最小限”サンプルなのも、JobTracker相当(ApplicationMaster)の実行までしか出来ず、TaskTracker相当(Container)まで辿り着けなかったからだし(爆)
まぁそこまででもコーディングしてみたことによって、アプリケーションの実行方法は理解できたけど。
タスク分割や障害対応を自前でコーディングしなければならないとすると、じゃあHadoopさんは何をやってくれるのかという話になるが。
リソースの空き状態に応じてどのノードで実行するかを決めるのと、そのノード上でのアプリケーションの起動まではやってくれる。また、進捗状況の通知・監視の仕組みは用意されている。
okachimachiorzさんが分散リソース管理OSと言っていたのはこういう意味だったんだなぁと実感。
今までのHadoopでも、直接MapReduceをプログラミングするのは大変なのでラッパーのツールを使おうという流れだったけど、YARNはなおさら普通の人がコーディングするものじゃないなぁ。
これはまさしく分散フレームワークを作る人向け。MapReduce以外のアルゴリズムでも何でも対応できるのは確かなので、色々なアルゴリズムのYARNラッパー(フレームワーク)が作られることになると思う。
普通の人は、自分がやりたい処理に一番向いているフレームワークを選択して、(今までのMapReduceの様に)部分的なプログラミングをするだけになる…かな?