Hadoop >

これは、Apache Hadoopの安定版(0.20.2)のセットアップ手順です。

目次

他のバージョンのセットアップ

  1. Hadoop2.0Hadoop0.23 - YARN、次世代MapReduce?
  2. HadoopWithSecurity
  3. Hadoop1.0
  4. Hadoop0.20
  5. Hadoop0.20セットアップ(旧) - DEPRECATED
  6. Hadoop0.19まで - DEPRECATED

3つの動作モードとその設定

  • Hadoopの動作モードには、スタンドアロン疑似分散完全分散という3つがあります。スタンドアロンが最も簡便ですが、動作を理解するためや開発には疑似分散を、もちろん商用には完全分散を使用するとよいでしょう。各モードの設定は以下の通りです。

スタンドアロンモード

割愛します。

疑似分散モード(シングルノード)

1機で分散処理環境を起動させます。以下のインスタンスを起動します。

  1. プライマリNameNode
  2. セカンダリNameNode
  3. DataNode
  4. JobTracker
  5. TaskTracker

共通

  1. ノードに起動ユーザを追加します。起動ユーザのSSHセットアップは煩雑なため行いません。リモートホストでの起動コマンドの実行には、分散シェルの pdshdsh を経由し、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
  2. アーカイブを適当な場所に展開します。
    $ 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
  3. ${HADOOP_HOME}/conf/hadoop-env.sh に以下の要領で環境にあわせた設定を追加します。特に、PIDファイルの格納などで、/tmp 以下の利用を避けるのは重要です。
    1. #export JAVA_HOME=/usr/lib/jvm/java-6-sun
    2. #export JAVA_HOME=/usr/lib/jvm/java-6-openjdk
    3. #export JAVA_HOME=/usr/lib/jvm/java-6-openjdk-i386
    4. export JAVA_HOME=/usr/lib/jvm/java-6-openjdk-amd64
    5. # The directory where pid files are stored. /tmp by default.
    6. export HADOOP_PID_DIR=/grid/vol/0/var/run/$USER
    7. # Where log files are stored. $HADOOP_HOME/logs by default.
    8. export HADOOP_LOG_DIR=/grid/vol/0/var/log/$USER
  4. 設定ファイル ${HADOOP_HOME}/conf/core-site.xml を編集します。Hadoopはデフォルト設定状態でも動作するように(これは正しいことです)、hadoop.tmp.dir のデフォルト値である /tmp/hadoop-${user.name} 以下のディレクトリに、一時作業ファイルはもちろんのこと、ある程度永続化が必要なデータ(主にHDFS関連)までも格納します。文字通りテンポラリという意味での hadoop.tmp.dir 設定は必要ですので、デフォルト設定はそのままとし、以下のセットアップでは永続化が必要なデータの格納場所を適切に設定変更していきます。
    1. ...
    2. <configuration>
    3.     <property>
    4.         <name>fs.default.name</name>
    5.         <value>hdfs://localhost:9000</value>
    6.     </property>
    7.     <property>
    8.         <name>hadoop.tmp.dir</name>
    9.         <value>/tmp/hadoop-${user.name}</value>
    10.     </property>
    11.     <property>
    12.         <name>fs.checkpoint.dir</name>
    13.         <value>/grid/vol/0/var/lib/${user.name}/namesecondary</value>
    14.     </property>
    15. </configuration>
  5. データなどを格納するディレクトリを用意します。
    $ 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

  1. 設定ファイル(${HADOOP_HOME}/conf/hdfs-site.xml)を編集します。
    1. <configuration>
    2.     <property>
    3.         <name>dfs.name.dir</name>
    4.         <value>/grid/vol/0/var/lib/${user.name}/name</value>
    5.     </property>
    6.     <property>
    7.         <name>dfs.data.dir</name>
    8.         <value>/grid/vol/0/var/lib/${user.name}/data</value>
    9.     </property>
    10.     <property>
    11.         <name>dfs.replication</name>
    12.         <value>1</value>
    13.     </property>
    14. </configuration>
  2. HDFSをフォーマットします。
    $ cd ${HADOOP_HOME}
    $ sudo -u hdfs ./bin/hadoop namenode -format
  3. 各デーモンを起動します。
    $ 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
  4. 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
  5. Web UIのアクセスURLは以下の通りです。
    http://localhost:50070/

MapReduce?

  1. 設定ファイル(${HADOOP_HOME}/conf/mapred-site.xml)を編集します。
    1. <configuration>
    2.     <property>
    3.         <name>mapred.job.tracker</name>
    4.         <value>localhost:9001</value>
    5.     </property>
    6.     <property>
    7.         <name>mapred.system.dir</name>
    8.         <value>/grid/vol/0/var/lib/${user.name}/system</value>
    9.     </property>
    10. </configuration>
  2. 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
  3. 各デーモンを起動します。
    $ sudo -u mapred ./bin/hadoop-daemon.sh start jobtracker
    $ sudo -u mapred ./bin/hadoop-daemon.sh start tasktracker
  4. Web UIのアクセスURLは以下の通りです。
    http://localhost:50030/

テスト

  1. テストユーザを追加し、サンプルジョブを実行してみます。
    $ 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
    ...

完全分散モード

  • 完全分散とは、動作モードというよりはむしろ疑似分散ではただ一つのノードで起動させていた各デーモンを、それぞれ適切な複数の別のノード(群)で運用する環境のことです。もちろん、これが本格的な実運用環境となります。
  • 構築方法は基本的に疑似分散の場合と変わりませんが、以下のような勘所があります。

基本設定

  1. 当然ながら、ホスト名はすべて完全修飾名(FQDN)で設定します。
  2. 冗長化のためVIPを付与しているサービス(NameNodeSecondaryNameNodeJobTrackerなど)についてはそのVIPに対するDNS名を設定します。

チェックポイントデータの冗長保存

  1. ${HADOOP_HOME}/conf/core-site.xml: fs.checkpoint.dir に複数の格納先を指定することにより、チェックポイントデータを冗長に保存することが可能になります。
    1.     <property>
    2.         <name>fs.checkpoint.dir</name>
    3.         <value>/grid/vol/0/var/lib/${user.name}/checkpoint,/export/home/${user.name}/var/lib/checkpoint</value>
    4.     </property>

HDFSメタデータの冗長保存

  1. ${HADOOP_HOME}/conf/hdfs-site.xml: dfs.name.dir に複数の格納先を指定することにより、メタデータを冗長に保存することが可能になります。この場合、指定したディレクトリはあらかじめ作成しておく必要があるようです。
    1.     <property>
    2.         <name>dfs.name.dir</name>
    3.         <value>/grid/vol/0/var/lib/${user.name}/name,/export/home/${user.name}/var/lib/name</value>
    4.     </property>

並列化の徹底

  1. 以下の例では、/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
  2. ${HADOOP_HOME}/conf/hdfs-site.xml
    1.     <property>
    2.         <name>dfs.data.dir</name>
    3.         <value>/grid/vol/0/var/lib/${user.name}/data,/grid/vol/1/var/lib/${user.name}/data</value>
    4.     </property>
  3. ${HADOOP_HOME}/conf/mapred-site.xml
    1.     <property>
    2.         <name>mapred.local.dir</name>
    3.         <value>/grid/vol/0/var/lib/mapred/local,/grid/vol/1/var/lib/mapred/local</value>
    4.         <description>
    5.           The local directory where MapReduce stores intermediate data files.
    6.           May be a comma-separated list of directories on different devices in order to spread disk i/o.
    7.           Directories that do not exist are ignored.
    8.         </description>
    9.     </property>
    10.     <property>
    11.         <name>mapred.temp.dir</name>
    12.         <value>/grid/vol/0/tmp/${user.name}/mapred,/grid/vol/1/tmp/${user.name}/mapred</value>
    13.         <description>
    14.           A shared directory for temporary files.
    15.         </description>
    16.     </property>

ノード管理の徹底

  1. ${HADOOP_HOME}/conf/hdfs-site.xml
    1.     <property>
    2.         <name>dfs.hosts</name>
    3.         <value>/grid/usr/hadoop/conf/hosts.include</value>
    4.         <description>
    5.           Names a file that contains a list of hosts that are permitted to connect to the namenode.
    6.           The full pathname of the file must be specified. If the value is empty, all hosts are permitted.
    7.         </description>
    8.     </property>
    9.     <property>
    10.         <name>dfs.hosts.exclude</name>
    11.         <value>/grid/usr/hadoop/conf/hosts.exclude</value>
    12.         <description>
    13.           Names a file that contains a list of hosts that are not permitted to connect to the namenode.
    14.           The full pathname of the file must be specified. If the value is empty, no hosts are excluded.
    15.         </description>
    16.     </property>
  2. ${HADOOP_HOME}/conf/mapred-site.xml
    1.     <property>
    2.         <name>mapred.hosts</name>
    3.         <value>/grid/usr/hadoop/conf/hosts.include</value>
    4.         <description>
    5.           Names a file that contains the list of nodes that may connect to the jobtracker.
    6.           If the value is empty, all hosts are permitted.
    7.         </description>
    8.     </property>
    9.     <property>
    10.         <name>mapred.hosts.exclude</name>
    11.         <value>/grid/usr/hadoop/conf/hosts.exclude</value>
    12.         <description>
    13.           Names a file that contains the list of hosts that should be excluded by the jobtracker.
    14.           If the value is empty, no hosts are excluded.
    15.         </description>
    16.     </property>

セキュア設定の有効化

  • Ver. 0.20.x はセキュアHadoopではありません。

参考リソース

  1. Apache Hadoop 0.20

HadoopTips


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-06-11 (月) 18:30:56 (3032d)