Hadoop >
これは、Apache Hadoopの安定版(0.20.2)のセットアップ手順です。
目次 †
他のバージョンのセットアップ †
- Hadoop2.0、Hadoop0.23 - YARN、次世代MapReduce?
- HadoopWithSecurity
- Hadoop1.0
- Hadoop0.20
- Hadoop0.20セットアップ(旧) - DEPRECATED
- Hadoop0.19まで - DEPRECATED
3つの動作モードとその設定 †
- Hadoopの動作モードには、スタンドアロン、疑似分散、完全分散という3つがあります。スタンドアロンが最も簡便ですが、動作を理解するためや開発には疑似分散を、もちろん商用には完全分散を使用するとよいでしょう。各モードの設定は以下の通りです。
スタンドアロンモード †
割愛します。
疑似分散モード(シングルノード) †
1機で分散処理環境を起動させます。以下のインスタンスを起動します。
- プライマリNameNode
- セカンダリNameNode
- DataNode
- JobTracker
- TaskTracker
共通 †
- ノードに起動ユーザを追加します。起動ユーザのSSHセットアップは煩雑なため行いません。リモートホストでの起動コマンドの実行には、分散シェルの pdsh や dsh を経由し、sudoコマンドによって行います。
$ sudo adduser --shell /bin/sh --uid 10001 --disabled-password hadoop
$ sudo adduser --shell /bin/sh --uid 10002 --disabled-password hdfs
$ sudo usermod -G hadoop hdfs
$ sudo adduser --shell /bin/sh --uid 10003 --disabled-password mapred
$ sudo usermod -G hadoop mapred
- アーカイブを適当な場所に展開します。
$ ls -la /grid/usr
...
lrwxrwxrwx 1 root root 14 2012-04-25 09:32 hadoop -> hadoop-0.20.2/
drwxr-xr-x 11 root root 4096 2012-04-27 14:19 hadoop-0.20.2
- ${HADOOP_HOME}/conf/hadoop-env.sh に以下の要領で環境にあわせた設定を追加します。特に、PIDファイルの格納などで、/tmp 以下の利用を避けるのは重要です。
- 設定ファイル ${HADOOP_HOME}/conf/core-site.xml を編集します。Hadoopはデフォルト設定状態でも動作するように(これは正しいことです)、hadoop.tmp.dir のデフォルト値である /tmp/hadoop-${user.name} 以下のディレクトリに、一時作業ファイルはもちろんのこと、ある程度永続化が必要なデータ(主にHDFS関連)までも格納します。文字通りテンポラリという意味での hadoop.tmp.dir 設定は必要ですので、デフォルト設定はそのままとし、以下のセットアップでは永続化が必要なデータの格納場所を適切に設定変更していきます。
- データなどを格納するディレクトリを用意します。
$ sudo mkdir /grid/vol/0/var
$ sudo mkdir /grid/vol/0/var/lib
$ sudo mkdir /grid/vol/0/var/log
$ sudo mkdir /grid/vol/0/var/run
$ sudo chown -R root:hadoop /grid/vol/0/var
$ sudo chmod -R 775 /grid/vol/0/var
HDFS †
- 設定ファイル(${HADOOP_HOME}/conf/hdfs-site.xml)を編集します。
- HDFSをフォーマットします。
$ cd ${HADOOP_HOME}
$ sudo -u hdfs ./bin/hadoop namenode -format
- 各デーモンを起動します。
$ sudo -u hdfs ./bin/hadoop-daemon.sh start namenode
$ sudo -u hdfs ./bin/hadoop-daemon.sh start secondarynamenode
$ sudo -u hdfs ./bin/hadoop-daemon.sh start datanode
- HDFS上に必要なディレクトリを作成します。クォータ管理できないため、/tmp は作成しません。
$ sudo -u hdfs ./bin/hadoop fs -chown hdfs:hdfs /
$ sudo -u hdfs ./bin/hadoop fs -chmod 755 /
$ sudo -u hdfs ./bin/hadoop fs -mkdir /user
- Web UIのアクセスURLは以下の通りです。
http://localhost:50070/
MapReduce? †
- 設定ファイル(${HADOOP_HOME}/conf/mapred-site.xml)を編集します。
- HDFS上に必要なディレクトリを作成します。
$ cd ${HADOOP_HOME}
$ sudo -u hdfs ./bin/hadoop fs -mkdir /grid/vol/0/var/lib/mapred
$ sudo -u hdfs ./bin/hadoop fs -chown mapred:mapred /grid/vol/0/var/lib/mapred
- 各デーモンを起動します。
$ sudo -u mapred ./bin/hadoop-daemon.sh start jobtracker
$ sudo -u mapred ./bin/hadoop-daemon.sh start tasktracker
- Web UIのアクセスURLは以下の通りです。
http://localhost:50030/
テスト †
- テストユーザを追加し、サンプルジョブを実行してみます。
$ sudo adduser alice
$ sudo -u hdfs ./bin/hadoop fs -mkdir /user/alice
$ sudo -u hdfs ./bin/hadoop fs -chown alice:aclice /user/alice
$ sudo -u alice ./bin/hadoop jar hadoop-0.20.2-examples.jar pi 5 10
...
完全分散モード †
- 完全分散とは、動作モードというよりはむしろ疑似分散ではただ一つのノードで起動させていた各デーモンを、それぞれ適切な複数の別のノード(群)で運用する環境のことです。もちろん、これが本格的な実運用環境となります。
- 構築方法は基本的に疑似分散の場合と変わりませんが、以下のような勘所があります。
基本設定 †
- 当然ながら、ホスト名はすべて完全修飾名(FQDN)で設定します。
- 冗長化のためVIPを付与しているサービス(NameNode、SecondaryNameNode、JobTrackerなど)についてはそのVIPに対するDNS名を設定します。
チェックポイントデータの冗長保存 †
- ${HADOOP_HOME}/conf/core-site.xml: fs.checkpoint.dir に複数の格納先を指定することにより、チェックポイントデータを冗長に保存することが可能になります。
HDFSメタデータの冗長保存 †
- ${HADOOP_HOME}/conf/hdfs-site.xml: dfs.name.dir に複数の格納先を指定することにより、メタデータを冗長に保存することが可能になります。この場合、指定したディレクトリはあらかじめ作成しておく必要があるようです。
並列化の徹底 †
- 以下の例では、/grid/vol/{0,1} にそれぞれのディスクをマウントしています。
$ sudo mkdir -p /grid/vol/{0,1}/var/lib
$ sudo chown -R root:hadoop /grid/vol/{0,1}/var
$ sudo chmod -R 775 /grid/vol/{0,1}/var
$ sudo mkdir -p /grid/vol/{0,1}/tmp
$ sudo chmod 1777 /grid/vol/{0,1}/tmp
- ${HADOOP_HOME}/conf/hdfs-site.xml
- ${HADOOP_HOME}/conf/mapred-site.xml
ノード管理の徹底 †
- ${HADOOP_HOME}/conf/hdfs-site.xml
- ${HADOOP_HOME}/conf/mapred-site.xml
セキュア設定の有効化 †
- Ver. 0.20.x はセキュアHadoopではありません。
参考リソース †
- Apache Hadoop 0.20