Hadoopの管理者に求められるもの
前編で紹介したように、Hadoopでは一台から数千台規模のクラスタを構築することが可能であり、必要に応じてスケールアウトさせることができます。Hadoopは非常に強力ですが、管理するのはそれほど簡単ではありません。言い換えると、正しい知識を持たずに運用すると、大きなトラブルが生じる可能性があると言うことです。
少し脚色していますが実際のトラブルの例をご紹介しましょう。
【トラブルの例】
前編で紹介したHadoopの分散ファイルシステムであるHDFS(Hadoop Distributed File System)には、分散したデータの配置情報(データがどのマシンに記録されているのかを表す管理情報:以降メタ情報と呼びます)などを管理するノード(ネームノード)と、実際に分散されたデータを管理するノード(データノード)群とがあります。前者のメタ情報は非常に重要で、この情報が消えてしまうと、分散しているデータの置き場所がわからなくなってしまいます。つまり、バラバラになったデータを組み立てられなくなってしまうのです。
このメタ情報はサーバーの起動時に読み込むためディスクにも記録されるのですが、あるトラブルではマシンのディスク障害によりメタ情報が失われてしまったというものでした。定期的にバックアップをするという運用方法もあるのですが、バックアップ間の更新分が全て失われてしまうリスクが生じます。また、バックアップのタイミングによってはファイルの整合性の問題が生じる場合があるのです(中途半端にファイルが破損してしまうなど)。
これは正しく管理すれば防げる問題です。メタ情報の保存先は複数指定ができるので、管理者が正しく複数のディスクやNFS上のディレクトリを指定することで回避できるのです。
MapReduceにおいても、単一の目的での利用や一人のユーザーが利用しているような場合には問題がなくても、ビジネスが拡大して複数のユーザーまたは複数のジョブを実行するようになると、ジョブの実行順序の制御が必要になります。共用環境においてはセキュリティの問題も生じてくるでしょう。Hadoopに限った話ではありませんが、運用管理は重要なのです。
コラム:HDFSの信頼性はどうなの?
Hadoopに詳しい方は「Hadoopはネームノードが単一障害点だから使えない」とおっしゃるかもしれません。それは確かにある条件では正しいのですが、ClouderaのCDH4のような最近のバージョンのHadoopではネームノードが高可用性に対応しているので、単一障害点を回避できます。
また、後ほど紹介するHadoop Summit 2012というイベントでは、HDFS High Availabirity というセッションで高可用性の話がありました。一部抜粋して紹介します。
米Yahoo!では2009年に、2万ノード/10クラスタのHDFS環境において、3.29億ブロックに対して19ブロックのデータロストが発生しました。これは1700万ブロックに対して1ブロック相当となり、1ブロックが128MBと仮定すると、2ペタバイトに対して128MBのデータロストにしかなりません。こういったバグは既に修正されていますし、HDFSではデフォルトでブロックを3カ所に複製して管理しているので、同時にブロックが失われる確率はゼロに近いといえます。HDFSの信頼性は十分高いと言っても過言ではないでしょう。