Hadoopシステム構築のノウハウ
前回までの記事では、Hadoopがどのような背景で登場したのか、どのような能力を持っているのか、リレーショナル・データベース管理システム(RDBMS)やKey-Value Store(KVS)型データベースとはどのように異なるのかを解説してきました。
今回は、Hadoopを実際にエンタープライズ(企業情報システム構築)用途に活用するにあたって、押さえておきたいポイントを解説します。
Hadoop活用の課題
Hadoopは、オープンソースとして開発されています。2006年にDoug Cutting氏によってHadoopプロジェクトが立ち上げられて以来、ほぼ4年が経過し、現在ではApache Software財団が支援するトップ・レベル・プロジェクトとして多数の開発者が参加しています。
プロジェクトが立ち上がった当時、Hadoopはわずか20ノードのクラスタで動作していました。現在では、米Yahoo!をはじめとして、数千ノード規模のクラスタでの動作が続々と報告されるようになってきています。
しかし、エンタープライズ用途でHadoopを活用するためには、いくつかの課題を解決する必要があります。
- ハードウエアの選択
- Hadoopクラスタを稼働させるためには、マスター・サーバーとスレーブ・サーバーを動作させサーバー機が必要です。しかし、どのようなスペックのサーバー機を選択すべきかは自明ではありません。
- サーバーの設定とネットワーク・インフラの構成
- Hadoopクラスタは多数のサーバーを使います。サーバーのインストールやメンテナンスにかかるコストを軽減するためには、できる限りセットアップ作業を自動化しておくことが重要です。また、Hadoopクラスタがパフォーマンスを発揮するためには、ネットワークがボトルネックにならない構成にすることが必要です。
- マスター・サーバーの冗長化
- Hadoopは、耐障害性を重視して開発されており、一部のスレーブ・サーバーが故障しても正常に稼働します。しかし、現時点では、マスター・サーバーの障害に対処する機能が実装されておらず、マスター・サーバーがHadoopの単一障害点となっています。
- ロジック開発コスト
- Hadoopは、MapReduceフレームワークによって分散バッチ処理を実現しています。MapReduceフレームワークを使うことで、分散バッチ処理にともなう面倒な手続きを意識することなく、スケール・アウト性が手に入ります。しかし、MapReduceフレームワークによる開発手法はまだ洗練されておらず、SQLなどによる既存の開発手法よりも開発コストがかさむ傾向があります。また、MapReduceフレームワークに習熟したエンジニアの確保も容易ではありません。
ハードウエアの選択
Hadoopは、スケール・アウト性を重視して設計されています。Hadoopが本領を発揮するためには、ある程度大きな規模のHadoopクラスタが必要です。果たして、最良のコスト・パフォーマンスを発揮するには、どのようなスペックのハードウエアを選択すべきでしょうか。
まずは、Hadoopクラスタの大部分を占めるスレーブ・サーバーについて考えましょう。第2回では、サーバー機の価格と性能は比例せず、性能が上がるほど価格は飛躍的に向上することを説明しました。よって、サーバー機単体で考えたときは、コスト・パフォーマンスは低価格帯のサーバーほど良いことになります。
しかし、極端に価格の安いサーバーは、障害発生率も高くなります。Hadoopはハードウエアの障害に対処する仕組みを備えていますが、障害発生率が高くなると、ハードウエアのメンテナンス・コストも上昇します。よって、スレーブ・サーバーのスペック選択にあたっては、サーバー単体としてのコスト・パフォーマンスと障害発生率のバランスを考慮すべきです。
多くの場合、このバランスが最も良くなるのは、多くのベンダーが数十万円台で販売している「コモディティ・クラス」のサーバーです。このクラスのサーバーは、生産開始からある程度経過したパーツ(CPU、マザー・ボード、ハード・ディスクなど)を採用しており、量産効果によりコスト・パフォーマンスに優れています。また、問題点が洗い出されているため、障害発生率も低くなります。
なお、スレーブ・サーバーのハード・ディスクには、RAIDは必要ありません。データの冗長性はHDFSによって確保されるため、RAIDによる冗長性の意味がないからです。
一方、マスター・サーバーは、後述するように現時点ではハードウエアの障害に対処する仕組みは備えていません。よって、ある程度信頼性の高いハードウエアを選択することが望ましいです。また、HDFSのメタデータを保護するために、RAIDを利用することが有効です。
Hadoopクラスタの構成
Hadoopクラスタを構成するサーバーをセットアップする際には、以下のような作業が発生します。
- Linuxのインストール
- Hadoopを動作させるアカウントの設定
- ネットワーク情報(ホスト名、IPアドレスなど)の設定
- SSHによるログインを可能にする設定
- 環境変数の設定
- Javaのインストール
- Hadoopのインストール
- Hadoopの設定ファイルの編集
数台規模のクラスタであれば、これらの作業を手作業で行っても、大した手間ではありません。しかし、数十台規模のクラスタでは、多くの手間がかかります。さらに、性能を増強するためにスレーブ・サーバーを追加したり、スレーブ・サーバーが故障した場合に入れ替えたりするために、膨大なメンテナンス・コストがかかってきます。よって、これらの作業を可能な限り自動化することが重要になります。
サーバーの設定を自動化するノウハウはさまざまです。ここでは、その一部を紹介します。
- Linuxのインストーラの利用
- たいていのLinuxディストリビューションには、自動インストールの仕組みが用意されています。例えば、Red Hat系のディストリビューション(FedoraやCent OSなど)には、Kickstartと呼ぶ自動インストーラが存在します。自動インストーラのスクリプトを編集することで、サーバーのセットアップ作業の大部分を自動化できます。
- DHCP、DNSによるネットワーク情報の集中管理
- Hadoopクラスタを構成するサーバー同士が正常に通信できるように、各サーバーにIPアドレスやホスト名を付与する必要があります。DHCPサービスを適切に設定することによって、IPアドレスを自動的に設定できます。また、DNSサービスを利用することで、ホスト名も自動的に設定できます。
- 設定ファイルの集中管理
- Hadoopクラスタを構成するサーバーには、Hadoopの各種設定ファイル(core-site.xml、mapred-site.xml、mapred-site.xmlなど)が存在します。設定項目を変更する場合は、すべてのサーバーの設定ファイルを更新する必要があります。Puppetなどの設定ファイル管理ツールを利用することで、設定ファイルの集中管理が可能になります。