Hadoop のコモディティはローエンドという意味ではない
Hadoop に関するよくある勘違いの一つとして、「古いマシンを有効活用できる」というものがあります。
その根拠となるのが、公式サイトを含めあちこちで書かれる「コモディティサーバの上で動く」という一文です。
The Hadoop Distributed File System (HDFS) is a distributed file system designed to run on commodity hardware.
404 Not Found
しかし Hadoop本9章などにも書かれている通り、コモディティサーバとはローエンドサーバという意味ではありません。
あくまで「複数のベンダから入手可能なサーバ」という意味であって、決して安いサーバを意味しているわけではないのです。
メモリだけあれば古いマシンが蘇る memcached とかとは訳が違います。
例えば2010年3月時点でのClouderaの推奨スペックを見ると、以下のようになっています。
CPU | 2-2.5GHz クアッドコア×2 |
メモリ | 16-24GB |
ディスク | 1TB×4 |
ネットワーク | Gbit |
退役した古いマシンを再利用など到底できないことがわかります。
また、FaceBook で稼働している Hadoop クラスタのノードも結構なスペックです。
Facebook の Dhruba Borthakur が書いた記事によると、以下のようなスペックだそうです。
CPU | 8-16コア |
メモリ | 32GB |
ディスク | 12-24TB |
これが2000台動いているというのですから、「安いマシン並べてお金をかけずに……」なんていうのが夢物語だということがわかります。
そもそも、Hadoopがデフォルトでどのくらいメモリを使うのかもあまり知られてません。
Hadoop本9章にはデフォルトの消費メモリが以下のように書かれています。
マスター(NameNode,SecondaryNameNode,JobTracker) | 3GB |
ワーカー(DataNode,TaskTracker) | 2.8GB |
これらは全て java の -Xmx で割り当てられた量なので実際には起動後いきなりここまで消費することはありませんが、メモリが足りないと簡単にswapするでしょう。
ただし、大規模クラスタを想定すればマスターで動いてるサービスは別サーバにするので、データ量がPBクラスになるまではメモリに関してそこまで気にする必要はないと思います。
(データセット1PBあたり NameNode のメモリは大体1GB必要と言われています。この辺の話はYahoo!の調査記事を参照のこと)
「じゃあ割り当てメモリ減らせばいい」と思うかもしれません。
確かにそれでも動きます。ちんまい処理だったらそれくらいのメモリ量でも処理は可能です。(手元の環境では割り当てメモリ100MBとかでも動いた)
おそらく実行時間を見たらHadoopなんて使うのやめたくなるでしょうが。
というわけで、まともに Hadoop クラスタを組もうと思ったら決して安くないので、月に1回とか年に数回の処理とかだったら EC2 並べて処理させた方がいいんじゃないかと思います。
ただし真面目にコスト比較したわけじゃないので具体的なコストパフォーマンスの違いについてはわかりません。
- 作者: Tom White,玉川竜司,兼田聖士
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/01/25
- メディア: 大型本
- 購入: 9人 クリック: 449回
- この商品を含むブログ (74件) を見る