夢とガラクタの集積場

落ちこぼれ三流エンジニアである管理人の夢想=『夢』と、潰えた夢=『ガラクタ』の集積場です。

Hadoop YARNとApache Mesosの違いって何?

こんにちは。

CDH上でSparkがサポートされるという発表もあり、ニッチな領域をちょこちょこ調べていたはずが、
いきなりSparkがメジャーなステージに飛び出すのかなぁ・・と楽しみにしている今日この頃です。

ただ、CDH上でのSparkはリソースマネージャとしてHadoop YARNを使う模様。
Apache Mesosは使われないようです。
とはいえ、それ以前の問題として、Hadoop YARNとApache Mesosの違いがそもそもよくわかっていないという現状があります。
そのため、いい情報が無いかなぁ・・・と調べていたところ、丁度以下のスレッドが見つかりました。

How does YARN compare to Mesos?
http://www.quora.com/How-does-YARN-compare-to-Mesos

とりあえず、このスレッドに書かれている「差分」を訳してサマリしてみようと思います。

1.YARNとMesosの比較結果は?

まず前提として、
2つのシステムは「クラスタマシン群のリソースを複数フレームワーク間でシェア可能とする」
という同じゴールを持っている。

Hadoop MapReduceもより抽象化された「分散プロセス実行&リソーススケジュール基盤」の上で
動くアプリケーションとして実装される。
この「分散プロセス実行&リソーススケジュール基盤」がYARNである。

Mesosも学術研究の中で同じ目的を達成するために開発されたシステムで、
Hadoopのカスタムバージョンや、MPIといった分散処理をMesosの上で動作させることができる。
現在MesosはApacheプロジェクトとして開発がすすめられている。

これらの2つの違いは下記のようなものだと考えられる。
#まとめた方は実際に両方を使って比較したわけではない模様。

1.YARNは基本的にはJavaで書かれ、一部だけネイティブコードを用いている。
Mesosは主にC++で書かれている。
 #ただ、Mesosの機能は別言語から活用できますので解析という状態に突入しない限りあまり関係なさそう。

2.YARNは現状メモリの割り振りのみを行っている。(対象とするリソースを拡大する予定)
MesosはCPUリソースとメモリの両方の割り振りを行っている。

3.Mesosはリソースの割り振りをLinuxコンテナ(LXC)を用いて実現している。
YARNは単にLinuxのプロセスを制御しているのみ。

4.リソースの要求モデルはMesosの方が複雑となる。
YARNでは予めYARN側が提供した仕様内で一部設定を変えられるのみ。
だが、MesosではMesos側が通知するイベントに対してリソースを受け取るか拒否するかといった判定を
利用するアプリケーション側で記述する必要がある。
Mesosの方が非常に柔軟なリソース配分が可能だが、その分個々のアプリケーション側に委ねる度合いが大きい。

5.独自のWeb UI等まで含めるとYARNのコード量はMesosの3倍に達する。

6.YARNは既存のHadoopのスケジューラを取り込んでいるため問題こそあれど、その分堅牢。
現状Mesosのスケジューリング機構はそこまで至っていないと感じる。
 #そもそもMesosのスタンスがアプリケーション側に委ねる形なので、それは当然な気もしますが。
 #ただ、これについてはコメントで異論もあるので、あまりあてにはならなさそうです。

7.YARNはHadoopの持つKerberos認証を引き継いでいる。
対して、Mesosは現状認証機構を有していない。

8.YARNは自動的にデータ局所性をサポートする。Mesosは自前で実装する必要がある。

9.プロダクトとしてはMesos側の方がドキュメントも充実しており、成熟している。
YARNは現状発展途上でドキュメント整備も弱いが、その分開発の勢いがある。

10.YARNはMapReduceという実行基盤がまず基本にあり、
その上で他の並列実行に対応する方針を取っている。
対して、Mesosは汎用性を重視しており、より広範な領域に適用可能とされている。

・・・というのが現状の差分のようです。

2.まとめ

まとめると、全般的にMesosの方が開発アプリケーション側でやるべきことは多くなるものの、
リソースマネージャとしての機能は充実しており、汎用性も高い・・・といった感じでしょうか。
かつ、基礎理論がよりしっかりしているMesos側の方が性能効率も高いように見えます。

ただ、MesosはCDHに入るわけではないため、扱いやすさという意味ではやはりYARNと比べると劣りそうです。
とはいえ、MesosはStormのようなHadoop以外のアプリケーションを使う場合にはYARNより適しており、
Dockerといった要素とも親和性が高い・・・というアドバンテージもあるため、どちらを使うかは悩みどころですね。