Hadoopを用いたクラスタコンピューティング環境の構築Leverage OSS(1/2 ページ)

ペタバイト規模のデータを格納させる分散コンピューティング用プラットフォームを探しているのであれば、安価かつ効率的でスケーラビリティと信頼性を兼ね備えたプラットフォームであるHadoopの使用を検討すべきだろう。

» 2008年11月05日 00時00分 公開
[Amit Kumar Saha,SourceForge.JP Magazine]
SourceForge.JP Magazine

 ペタバイト規模のデータを格納させる分散コンピューティング用プラットフォームを探しているのであれば、そのフレームワークとしてHadoopの使用を検討すべきだろう。HadoopはJavaベースで作成されており、Linux、Windows、Solaris、BSD、Mac OS Xで使用できる。こうしたHadoopを実際に採用している組織に共通するのは、安価(特殊なハードウェアが不要)かつ効率的でスケーラビリティと信頼性を兼ね備えたプラットフォームによる、膨大な量のデータ処理を必要としているという点だ。

 Hadoopでは、こうした膨大な量のデータを格納するために、Hadoop Distributed File System(HDFS)を採用している。実際、HDFSのマスタ/スレーブアーキテクチャは、Hadoopのクラスタ機能の中核を成している。ここでサポートされているのは、ファイルシステムのメタデータ管理用マスタサーバとして機能する1つのNameNodeおよび、実際のデータ群を格納する多数のDataNodesという基本構成だ。

 ただしNameNodeは単一点障害(single point of failure)となる危険性があるため、HadoopではSecondary NameNodeを用意し、名前空間の定期チェックをさせると同時に、NameNodeに保持させるHDFSの変更ログファイルを一定サイズ以下にするようにしている。こうしたHDFSのアーキテクチャは、ダイヤグラムを用いた解説ドキュメントが公開されており、また「HDFS User Guide」というユーザーの視点に立った包括的なHDFSの導入ガイドも参考になるだろう。

 Hadoopにおけるデータ分散処理のベースとなっているのは、Googleにより提唱されたMapReduceというプログラミングモデルだ。このモデルをHadoopの場合は、各ノードにおけるJobTrackerプロセスが、クラスタのジョブスケジューラおよびアロケータとして機能し、個々のクラスタノードにおけるTaskTrackerへのジョブ割り当てを行うという方式で実装している。つまりJobTrackerとTaskTrackerの関係は、前者がMapReduceマスタで、後者がMapReduceスレーブという位置づけと見ればいいだろう。

 Hadoopクラスタの機能ユニットである、NameNode、DataNodes、JobTracker、TaskTrackerは、いずれもデーモンとして実装される。そしてすべてのノードには、クラスタの状態をチェックするためのWebサーバが組み込まれる。NameNodeにおけるこうしたWebサーバの役割は、DataNodesのステータス情報をリポートすることであり、これにより、ライブおよびデッド状態のノード、分散ファイルシステムの容量など、さまざまな情報を確認できる。TaskTrackerおよびその上で実行中のタスクに関するステータス情報は、JobTrackerにて動作するWebサーバで監視できる。

 本来Hadoopは、Nutchプロジェクト用のインフラストラクチャとして作成されたもので、これはインターネット上のWebページ群を巡回して検索エンジン用のインデックスを構築する、クローラとしての用途が意図されていた。このような背景を有しているHadoopにとって、膨大な量のデータを対象に同様のプロセスを実施するというタスクは、非常に親和性の高い分野なのである。

 Hadoopは、3つの動作モードが用意されており、その1つであるデフォルト状態のHadoopでは、分散型モデルではなく単一のJavaプロセスとして動作するように設定されている。これは実用には適さない設定だが、複数のコンピュータを準備する必要がないため、Hadoopの操作法を学習するのには役立つはずだ。またこれと同様の目的で、Hadoopのデーモン群を1つのノード内で動作させつつ、Javaプロセスとしては各デーモンが個別に動作するという、疑似分散モードも用意されている。最後に残された完全分散モードの場合、当然ながらHadoopを実行するノード群では、NameNode、JobTracker、DataNodes、TaskTrackerを実際に分散させた形で使用することになる。なお、こうした分散モードによるHadoopのセットアップには、最低3つのノードが必要だ。

Hadoopクラスタの完全分散モードでのセットアップ

 今回わたしはHadoopを試用するに当たって、Debian “Lenny”β2、Sun JDK 1.6Hadoop 0.17.2.1をインストールした3台の標準的なLinuxマシンを用いて、3ノードクラスタをセットアップした。そのほかに必要なソフトウェアとしては、SSHクライアントおよびサーバを用意して個々のノードで実行させなくてはならない。

 まず、gunzipを使ってHadoopのtarボールを展開するが、書き込み権限さえ有していれば、展開先は任意のディレクトリで構わない。ここでのディストリビューションのルートは、HADOOP_HOMEとして参照される。通常、クラスタ上で使われるすべてのコンピュータは、同一のHADOOP_HOMEパスを共有するので、例えば.bashrcなどのログインスクリプトにHADOOP_HOMEをエクスポートしておくと便利なはずだ。

 Hadoopの設定情報は、HADOOP_HOME/conf/ディレクトリに格納された2つの設定ファイルによって管理される。このうちhadoop-default.xmlは、デフォルト設定を保持する読み取り専用のファイルで、一方のhadoop-site.xmlは、ノード固有の設定情報を保持するという役割分担になっている。後者のファイルに具体的に何が記載されるかは、クラスタ内で果たすべきノードの役割によって変わってくるが、いずれにせよここに指定されたプロパティ設定は、デフォルト設定用ファイルでの指定よりも優先して適用される。なお配布用のtarボールには、空欄状態のdefault-site.xmlが用意されているので、これを基に各自のニーズに則した変更を施せばいいだろう。

 同様に重要なファイルがconf/slavesである。このファイルはJobTrackerで、TaskTrackerデーモンを始動させる必要のあるホストの一覧として機能する。同じくNameNodeでは、DataNodesデーモンを始動させる必要のあるホストの一覧として機能する。ただしこのファイルの管理作業は、多数のノードを扱うようにスケーリングさせた場合であっても、すべて手作業で行わなくてはならない。

 そのほか、JAVA_HOMEを始めログやプロセスID群の保管先といった、各種の設定オプションを格納するconf/chadoop-env.shも重要なファイルである。

 今回用いた試験用のセットアップでは、NameNodeおよびJobTrackerを1つ目と2つ目のノードに個別にインストールし、DataNodesおよびTaskTrackerは、まとめて3つ目のノードにインストールした。最初の2つのノードに置かれたconf/slavesファイルには、3番目のノードのIPアドレスが登録してあり、これら4つのデーモンが使用するconf/hadoop-site.xmlは共通化してある(サンプルはここからダウンロード可能)。conf/hadoop-site.xmlには各種のプロパティ設定を施すことになるが、その詳細はオンラインドキュメントにまとめて解説されているので、そちらを参照してほしい。

 そのほかに必要となるのが、ノード間におけるpassphraseless SSHのセットアップである。またノード参照をホスト名で行う場合は、各ノードの/etc/hostsファイルに対して、用いるホスト名とIPアドレスとのマッピング情報に関する設定をしなくてはならない。

       1|2 次のページへ

Copyright © 2010 OSDN Corporation, All Rights Reserved.

注目のテーマ