Hadoopセットアップ > 古いバージョン(0.23.10.23.0

note.pngDEPRECATED!: このバージョンのHadoopは古いです。ご利用は非推奨です。Hadoop2.0セットアップをご参照ください。

目次

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

  1. Hadoop2.0.1alpha - DEPRECATED
  2. Hadoop2.0.0alpha - DEPRECATED

構成の概要

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

2.0.x系(YARN、次世代MapReduce?)最新版をセットアップします。 ローカルモードではなく、1機で分散処理環境を起動させます。以下のインスタンスを起動します。

  1. プライマリNameNode
  2. セカンダリNameNode
  3. DataNode
  4. ResourceManager?
  5. NodeManager?
  6. (MapReduce?)JobHistoryServer?

設定ディレクトリとしては、${HADOOP_PREFIX}/conf/ を作成せず、デフォルトと思われる ${HADOOP_PREFIX}/etc/hadoop/ を使用します。

LDAP認可環境

  1. シングルノードではOSの静的ファイルによる権限解決で十分ですので、特にLDAPなどをセットアップする必要はありません。

共通

  1. 起動ユーザを追加します。
    $ 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
    $ sudo adduser --shell /bin/sh --uid 10004 --disabled-password yarn
    $ sudo usermod -G hadoop yarn
  2. アーカイブを適当な場所に展開します。この説明での $HADOOP_PREFIX とは、Hadoopのインストールルートを示します。note.pngオーナーを root に変更しているのは、アーカイブ中での設定が不正だからです。
    $ sudo tar xvzf hadoop-2.0.2-alpha.tar.gz -C /grid/usr
    $ cd /grid/usr
    $ sudo chown -R root:root hadoop-2.0.2-alpha/
    $ sudo ln -s hadoop-2.0.2-alpha hadoop
  3. note.png2.0.2aでは共有オブジェクトについてのシンボリック設定が不正なため、以下の要領で修正します。
    $ ls -l lib/native/
    total 1988
    -rw-r--r-- 1 root root 438626 Oct  2 09:51 libhadoop.a
    -rwxr-xr-x 1 root root 301588 Oct  2 09:51 libhadoop.so.1.0.0
    -rw-r--r-- 1 root root 696036 Oct  2 09:51 libhadooppipes.a
    -rw-r--r-- 1 root root 250096 Oct  2 09:51 libhadooputils.a
    -rw-r--r-- 1 root root 184348 Oct  2 09:51 libhdfs.a
    -rwxr-xr-x 1 root root 150507 Oct  2 09:51 libhdfs.so.0.0.0
    
    $ cd lib/native/
    $ sudo ln -s libhadoop.so.1.0.0 libhadoop.so.1     
    $ sudo ln -s libhadoop.so.1.0.0 libhadoop.so  
    $ sudo ln -s libhdfs.so.0.0.0 libhdfs.so.0     
    $ sudo ln -s libhdfs.so.0.0.0 libhdfs.so  
    $ ls -l ./
    total 1988
    -rw-r--r-- 1 root root 438626 Oct  2 09:51 libhadoop.a
    lrwxrwxrwx 1 root root     18 Oct 31 11:20 libhadoop.so -> libhadoop.so.1.0.0
    lrwxrwxrwx 1 root root     18 Oct 31 11:20 libhadoop.so.1 -> libhadoop.so.1.0.0
    -rwxr-xr-x 1 root root 301588 Oct  2 09:51 libhadoop.so.1.0.0
    -rw-r--r-- 1 root root 696036 Oct  2 09:51 libhadooppipes.a
    -rw-r--r-- 1 root root 250096 Oct  2 09:51 libhadooputils.a
    -rw-r--r-- 1 root root 184348 Oct  2 09:51 libhdfs.a
    lrwxrwxrwx 1 root root     16 Oct 31 11:21 libhdfs.so -> libhdfs.so.0.0.0
    lrwxrwxrwx 1 root root     16 Oct 31 11:21 libhdfs.so.0 -> libhdfs.so.0.0.0
    -rwxr-xr-x 1 root root 150507 Oct  2 09:51 libhdfs.so.0.0.0
  4. 環境変数を ${HADOOP_PREFIX}/etc/hadoop/hadoop-env.sh で設定します。
    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_PREFIX/logs by default.
    8. export HADOOP_LOG_DIR=/grid/vol/0/var/log/${USER}
  5. データなどを格納するディレクトリを用意します。
    $ sudo mkdir -p /grid/vol/0/var/{lib,log,run}
    $ sudo chown -R root:hadoop /grid/vol/0/var
    $ sudo chmod -R 775 /grid/vol/0/var
  6. 設定ファイル ${HADOOP_PREFIX}/etc/hadoop/core-site.xml を編集します。Hadoopはデフォルト設定状態でも動作するように(これは正しいことです)、hadoop.tmp.dir のデフォルト値である /tmp/hadoop-${user.name} 以下のディレクトリに、一時作業ファイルはもちろんのこと、ある程度永続化が必要なデータ(主にHDFS関連)までも格納します。文字通りテンポラリという意味での hadoop.tmp.dir 設定は必要ですので、デフォルト設定はそのままとし、以下のセットアップでは永続化が必要なデータの格納場所を適切に設定変更していきます。
    1. <configuration>
    2.     <property>
    3.         <name>fs.defaultFS</name>
    4.         <value>hdfs://localhost:9000/</value>
    5.     </property>
    6.     <property>
    7.         <name>hadoop.tmp.dir</name>
    8.         <value>/tmp/hadoop-${user.name}</value>
    9.     </property>
    10. </configuration>
    1. note.pngポート9000番は、環境によっては php5-fpm でデフォルトで利用されるようです。ご注意ください。

HDFS

  1. 設定ファイル(${HADOOP_PREFIX}/etc/hadoop/hdfs-site.xml)を編集します。
    1. <configuration>
    2.     <property>
    3.         <name>dfs.namenode.name.dir</name>
    4.         <value>file:///grid/vol/0/var/lib/${user.name}/name</value>
    5.     </property>
    6.     <property>
    7.         <name>dfs.datanode.data.dir</name>
    8.         <value>file:///grid/vol/0/var/lib/${user.name}/data</value>
    9.     </property>
    10.     <property>
    11.         <name>dfs.namenode.checkpoint.dir</name>
    12.         <value>file:///grid/vol/0/var/lib/${user.name}/namesecondary</value>
    13.     </property>
    14.     <property>
    15.         <name>dfs.replication</name>
    16.         <value>1</value>
    17.     </property>
    18. </configuration>
  2. HDFSをフォーマットします。
    $ sudo -u hdfs bin/hdfs namenode -format
  3. 各デーモンを起動します。
    $ sudo -u hdfs sbin/hadoop-daemon.sh start namenode
    $ sudo -u hdfs sbin/hadoop-daemon.sh start secondarynamenode
    $ sudo -u hdfs sbin/hadoop-daemon.sh start datanode
  4. HDFS上に必要なディレクトリを作成します。クォータ管理できないため、/tmp は作成しません。
    $ sudo -u hdfs bin/hadoop fs -chown hdfs:hadoop /
    $ sudo -u hdfs bin/hadoop fs -chmod 755 /
    $ sudo -u hdfs bin/hadoop fs -mkdir /user
    $ sudo -u hdfs bin/hadoop fs -chown hdfs:hadoop /user
    $ sudo -u hdfs bin/hadoop fs -chmod 755 /user
  5. Web UIのアクセスURLは以下の通りです。
    http://localhost:50070/

YARN

  1. 環境変数を設定します(${HADOOP_PREFIX}/etc/hadoop/yarn-env.sh)。以下をファイルの先頭に追加します。将来的には、Hadoop CommonHDFSYARNおよびHadoop MapReduce?の各プロダクトが分離(配布)される予定のようですが、現時点ではオーバーレイ状態で単一アーカイブとして配布されています。したがって、各プロダクトの $*_HOME 環境変数は等しく配布アーカイブのルートを設定します。設定の便宜上、$HADOOP_PREFIX を定義していますが、必須ではありません。この説明では、便宜上 $HADOOP_PREFIX を使用します。
    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.  
    6. export HADOOP_PREFIX=/grid/usr/hadoop
    7. #export HADOOP_CONF_DIR=${HADOOP_PREFIX}/etc/hadoop
    8. export HADOOP_COMMON_HOME=${HADOOP_PREFIX}
    9. export HADOOP_HDFS_HOME=${HADOOP_PREFIX}
    10.  
    11. export YARN_HOME=${HADOOP_PREFIX}
    12. export YARN_PID_DIR=/grid/vol/0/var/run/${USER}
    13. export YARN_LOG_DIR=/grid/vol/0/var/log/${USER}
    14.  
    15. export HADOOP_MAPRED_HOME=${HADOOP_PREFIX}
    16. ...
  2. 設定ファイルを用意します(${HADOOP_PREFIX}/etc/hadoop/yarn-site.xml)。単一サーバでの検証では、あまりにもリソースが少ないとジョブが実行できない場合がありますので、メモリリソースは多めに設定しておきます。
    1. <configuration>
    2.     <property>
    3.         <name>yarn.log-aggregation-enable</name>
    4.         <value>true</value>
    5.     </property>
    6.     <property>
    7.         <name>yarn.resourcemanager.scheduler.class</name>
    8.         <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
    9.         <description>In case you do not want to use the default scheduler</description>
    10.     </property>
    11.     <property>
    12.         <name>yarn.nodemanager.local-dirs</name>
    13.         <value>/grid/vol/0/var/lib/${user.name}/nm/local</value>
    14.         <description>the local directories used by the nodemanager
    15.         (default: /tmp/nm-local-dir)</description>
    16.     </property>
    17.     <property>
    18.         <name>yarn.nodemanager.resource.memory-mb</name>
    19.         <value>8192</value>
    20.         <description>the amount of memory on the NodeManager in GB
    21.         (default: 8192)</description>
    22.     </property>
    23.     <property>
    24.         <name>yarn.nodemanager.remote-app-log-dir</name>
    25.         <value>/grid/vol/0/var/log/${user.name}/nm</value>
    26.         <description>directory on hdfs where the application logs are moved to
    27.         (default: /tmp/logs)</description>
    28.     </property>
    29.     <property>
    30.         <name>yarn.nodemanager.log-dirs</name>
    31.         <value>/grid/vol/0/var/log/${user.name}/nm</value>
    32.         <description>the directories used by Nodemanagers as log directories
    33.         (default: /tmp/logs)</description>
    34.     </property>
    35.     <property>
    36.         <name>yarn.nodemanager.aux-services</name>
    37.         <value>mapreduce.shuffle</value>
    38.         <description>shuffle service that needs to be set for Map Reduce to run</description>
    39.     </property>
    40. <configuration>
  3. ローカルファイルシステム上に必要なディレクトリを作成します。
    $ sudo mkdir -p /grid/vol/0/var/log/yarn/nm/local    # yarn.nodemanager.{log-dirs,local-dirs}
    $ sudo chown yarn:hadoop -R /grid/vol/0/var/log/yarn
    $ sudo chmod 755 -R /grid/vol/0/var/log/yarn
  4. HDFS上に必要なディレクトリを作成します。ログアグリゲーション有効時に、yarn.nodemanager.remote-app-log-dir にユーザ権限でログが移されます。info.png2.0.2 から複数階層のディレクトリを作成する場合に、hadoop fs -mkdir コマンドに -p オプションが必要となりました。
    $ sudo -u hdfs bin/hadoop fs -mkdir -p /grid/vol/0/var/log/yarn/nm    # yarn.nodemanager.remote-app-log-dir
    $ sudo -u hdfs bin/hadoop fs -chown yarn:hadoop /grid/vol/0/var/log/yarn/nm
    $ sudo -u hdfs bin/hadoop fs -chmod 1777 /grid/vol/0/var/log/yarn/nm
  5. 各デーモンを起動します。
    $ sudo -u yarn sbin/yarn-daemon.sh start resourcemanager
    $ sudo -u yarn sbin/yarn-daemon.sh start nodemanager
  6. Web UIのアクセスURLは以下の通りです。
    http://localhost:8088/    # ResourceManager
    http://localhost:8042/    # NodeManager

MapReduce?

  1. info.png2.0.2 から ${HADOOP_PREFIX}/etc/hadoop/mapred-env.sh で環境変数を設定するようになりました。以下に内容をファイルの先頭に追加します。
    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_MAPRED_PID_DIR=/grid/vol/0/var/run/${USER}
    7. # Where log files are stored.  $HADOOP_MAPRED_HOME/logs by default.
    8. export HADOOP_MAPRED_LOG_DIR=/grid/vol/0/var/log/${USER}
    9. ...
  2. 設定ファイル(${HADOOP_PREFIX}/etc/hadoop/mapred-site.xml)を編集します。
    1. <configuration>
    2.     <property>
    3.         <name>mapreduce.framework.name</name>
    4.         <value>yarn</value>
    5.         <description>The runtime framework for executing MapReduce jobs.
    6.         Can be one of local, classic or yarn.
    7.         (default: local)
    8.         </description>
    9.     </property>
    10.     <property>
    11.         <name>yarn.app.mapreduce.am.staging-dir</name>
    12.         <value>/user</value>
    13.     </property>
    14.     <property>
    15.         <name>mapreduce.jobhistory.intermediate-done-dir</name>
    16.         <value>/grid/vol/0/var/lib/mapred/history/done_intermediate</value>
    17.         <!-- NG: <value>/user</value> -->
    18.     </property>
    19.     <property>
    20.         <name>mapreduce.jobhistory.done-dir</name>
    21.         <value>/grid/vol/0/var/lib/mapred/history/done</value>
    22.     </property>
    23. </configuration>
    1. info.pngドキュメントには説明がありませんが、mapreduce.jobtracker.staging.root.dir の設定はすでに有効ではなく、代替は yarn.app.mapreduce.am.staging-dir のようです。なお、他の関連設定のデフォルト値は以下のようです。
      No.設定キーデフォルト値備考
      1yarn.app.mapreduce.am.staging-dir/tmp/hadoop-yarn/staging
      2mapreduce.jobhistory.intermediate-done-dir${yarn.app.mapreduce.am.staging-dir}/history/done_intermediatemapred-default.xml に見えず
      3mapreduce.jobhistory.done-dir${yarn.app.mapreduce.am.staging-dir}/history/donemapred-default.xml に見えず
  3. ローカルファイルシステム上に必要なディレクトリを作成します。
    $ sudo mkdir -p /grid/vol/0/mapred/tmp
    $ sudo chmod 1777 /grid/vol/0/mapred/tmp
  4. HDFS上に必要なディレクトリを作成します。
    $ sudo -u hdfs bin/hadoop fs -mkdir -p /grid/vol/0/var/lib/mapred/history
    $ sudo -u hdfs bin/hadoop fs -chown -R mapred:hadoop /grid/vol/0/var/lib/mapred
    $ sudo -u hdfs bin/hadoop fs -chmod -R 755 /grid/vol/0/var/lib/mapred
  5. ResouceManager?NodeManager? を再起動して反映させます。
  6. 履歴サーバを起動します。
    $ sudo -u mapred ./sbin/mr-jobhistory-daemon.sh start historyserver
  7. 履歴サーバWeb UIのアクセスURLは以下の通りです。
    http://localhost:19888/

テスト

  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 share/hadoop/mapreduce/hadoop-mapreduce-examples-2.0.2-alpha.jar pi 5 10
    ...

完全分散モード

LDAP認可環境

  1. Hadoopでは協調動作する全ノードで統一的に権限認可(主にグループ解決)を管理する必要がありますので、Name Service Switch (NSS) のバックエンドデータベースとして一般的なLDAPを構築するとよいでしょう。
  2. Hadoop 2.0には hadoop.security.group.mapping に設定する GroupMappingServiceProvider? として LdapGroupsMapping? が追加されていますが、最終的にユーザ権限でTaskプロセスを起動させる関係上、権限解決はOSレベルに統一して委譲するのが効果的です。そのような点で、JniBasedUnixGroupsMapping? を使用するのが運用、パフォーマンス両面で最も効果的です。
  3. 基本的なLDAP環境の構築方法については、LDAPセットアップforHadoopをご参照ください。
  4. Hadoop起動ユーザのためのldifファイル(例: hadoop_users-2.0.ldif)を作成し、それらのユーザを追加します。
    $ ldapadd -cxWD cn=admin,dc=grid,dc=example,dc=com -f hadoop_users-2.0.ldif
    Enter LDAP Password:
    adding new entry "cn=hadoop,ou=groups,dc=grid,dc=example,dc=com"
    
    adding new entry "uid=hadoop,ou=people,dc=grid,dc=example,dc=com"
    
    adding new entry "cn=hdfs,ou=groups,dc=grid,dc=example,dc=com"
    
    adding new entry "uid=hdfs,ou=people,dc=grid,dc=example,dc=com"
    
    adding new entry "cn=yarn,ou=groups,dc=grid,dc=example,dc=com"
    
    adding new entry "uid=yarn,ou=people,dc=grid,dc=example,dc=com"
    
    adding new entry "cn=mapred,ou=groups,dc=grid,dc=example,dc=com"
    
    adding new entry "uid=mapred,ou=people,dc=grid,dc=example,dc=com"
    
  5. テストユーザのためのldifファイル(例: test_users.ldif)を作成し、そのユーザを追加します。
    $ ldapadd -cxWD cn=admin,dc=grid,dc=example,dc=com -f test_users.ldif
    Enter LDAP Password:
    adding new entry "cn=alice,ou=groups,dc=grid,dc=example,dc=com"
    
    adding new entry "uid=alice,ou=people,dc=grid,dc=example,dc=com"

分散監視環境

  1. Ganglia
  2. Nagios

基本設定

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

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

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

HDFSメタデータの冗長保存

  1. ${HADOOP_PREFIX}/etc/hadoop/hdfs-site.xml: dfs.namenode.name.dir に複数の格納先を指定することにより、メタデータを冗長に保存することが可能になります。この場合、指定したディレクトリはあらかじめ作成しておく必要があるようです。
    1.     <property>
    2.         <name>dfs.namenode.name.dir</name>
    3.         <value>file:///grid/vol/0/var/lib/${user.name}/name,file:///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_PREFIX}/etc/hadoop/hdfs-site.xml: 当然ながら、レプリカ数も推奨値の3にします。
    1.     <property>
    2.         <name>dfs.datanode.data.dir</name>
    3.         <value>file:///grid/vol/0/var/lib/${user.name}/data,file:///grid/vol/1/var/lib/${user.name}/data</value>
    4.     </property>
    5.     <property>
    6.         <name>dfs.replication</name>
    7.         <value>3</value>
    8.     </property>
  3. ${HADOOP_PREFIX}/etc/hadoop/yarn-site.xml
    1.     <property>
    2.         <name>yarn.nodemanager.local-dirs</name>
    3.         <value>/grid/vol/0/var/lib/${user.name}/nm/local,/grid/vol/1/var/lib/${user.name}/nm/local</value>
    4.         <description>the local directories used by the nodemanager
    5.         (default: /tmp/nm-local-dir)</description>
    6.     </property>
    7.     <property>
    8.         <name>yarn.nodemanager.log-dirs</name>
    9.         <value>/grid/vol/0/var/log/${user.name}/nm,/grid/vol/1/var/log/${user.name}/nm</value>
    10.         <description>the directories used by Nodemanagers as log directories
    11.         (default: /tmp/logs)</description>
    12.     </property>
  4. ${HADOOP_PREFIX}/etc/hadoop/mapred-site.xml: MapReduce? Ver. 1 で動作させたい場合のみ以下の設定を有効にします。
    1.     <property>
    2.         <name>dfs.hosts</name>
    3.         <value>/grid/usr/hadoop/etc/hadoop/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/etc/hadoop/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>

ノード管理の徹底

  1. ${HADOOP_PREFIX}/etc/hadoop/hdfs-site.xml
    1.     <property>
    2.         <name>yarn.resourcemanager.nodes.include-path</name>
    3.         <value>/grid/usr/hadoop/etc/hadoop/hosts.include</value>
    4.         <description>Path to file with nodes to include.</description>
    5.     </property>
    6.     <property>
    7.         <name>yarn.resourcemanager.nodes.exclude-path</name>
    8.         <value>/grid/usr/hadoop/etc/hadoop/hosts.exclude</value>
    9.         <description>Path to file with nodes to exclude.</description>
    10.     </property>
  2. ${HADOOP_PREFIX}/etc/hadoop/yarn-site.xml
    1.     <property>
    2.         <name>yarn.resourcemanager.nodes.include-path</name>
    3.         <value>/grid/usr/hadoop/etc/hadoop/hosts.include</value>
    4.         <description>Path to file with nodes to include.</description>
    5.     </property>
    6.     <property>
    7.         <name>yarn.resourcemanager.nodes.exclude-path</name>
    8.         <value>/grid/usr/hadoop/etc/hadoop/hosts.exclude</value>
    9.         <description>Path to file with nodes to exclude.</description>
    10.     </property>

ユーザ権限でのリソースコンテナ起動(tux.pngLinuxContainerExecutor?

  1. ソースパッケージをダウンロードし、環境に合わせて LinuxContainerExecutor? をビルドし配備します。ちなみに、バイナリパッケージに同梱されているのは前バージョンと異なりi386版の実行ファイルですので、x86_64環境の場合にはソースからのビルドが必須となります。
    1. ビルドに必要なMavenの3.x系とProtocolBuffersをあらかじめインストールしてからビルドします。note.pngver. 2.0.2aから追加で cmake が必要となっています。
      [for Debian] $ sudo apt-get install ant build-essential autoconf libtool cmake
      [for CentOS] $ sudo yum install ant autoconf automake libtool cmake
      ...
      $ file ${HADOOP_PREFIX}/bin/container-executor 
      bin/container-executor: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs)
      , for GNU/Linux 2.6.9, not stripped
      $ file ${HADOOP_PREFIX}/test-container-executor 
      test-container-executor: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs)
      , for GNU/Linux 2.6.9, not stripped
      ...
      $ tar xvzf hadoop-2.0.2-alpha-src.tar.gz
      $ cd hadoop-2.0.2-alpha-src/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/
      $ mvn package -Dcontainer-executor.conf.dir=/grid/usr/hadoop/etc/hadoop -DskipTests -Pnative
      ...
      $ file target/native/target/usr/local/bin/container-executor 
      target/native/target/usr/local/bin/container-executor: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
       dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x5c82d7e93fe48e2ab0b26c94580127fc8c5a1250,
       not stripped
      $ file target/native/target/usr/local/bin/test-container-executor 
      target/native/target/usr/local/bin/test-container-executor: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
       dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xe611b778b4b3aa29594058f543016b413eeaf62e,
       not stripped
    2. 生成された実行ファイルを適切な場所にコピーし、NodeManager?の起動ユーザのみが所属するグループ(yarn)についてsetgid属性を付与します。
      $ sudo mv ${HADOOP_PREFIX}/bin/container-executor ${HADOOP_PREFIX}/bin/container-executor.dist
      $ sudo mv ${HADOOP_PREFIX}/bin/test-container-executor ${HADOOP_PREFIX}/bin/test-container-executor.dist
      $ sudo cp target/native/target/usr/local/bin/*container-executor ${HADOOP_PREFIX}/bin/
      $ cd ${HADOOP_PREFIX}
      $ sudo chown root:yarn bin/*container-executor
      $ sudo chmod 6050 bin/*container-executor
  2. LinuxContainerExecutor? の設定ファイル(${HADOOP_PREFIX}/etc/hadoop/container-executor.cfg)を ${HADOOP_PREFIX}/etc/hadoop/mapred-site.xml と同様に編集し、適切なパーミッション(rootの読取専用)を設定します。
    1. yarn.nodemanager.local-dirs=/grid/vol/0/var/lib/yarn/nm/local
    2. yarn.nodemanager.log-dirs=/grid/vol/0/var/log/yarn/nm
    3. yarn.nodemanager.linux-container-executor.group=yarn
    4. #comma separated list of users who can not run applications
    5. banned.users=hfds,yarn,mapred,bin
    6. #Prevent other super-users
    7. #min.user.id=1000    # default
    $ sudo chown root:root etc/hadoop/container-executor.cfg 
    $ sudo chmod 0400      etc/hadoop/container-executor.cfg
    1. centos.pngCentOSでは一般ユーザのuidは通常500から振られるため、container-executor.cfgのmin.user.id の設定を500に引き下げることをお忘れなく。
      1. #min.user.id=1000    # default
      2. min.user.id=500    # for CentOS
  3. ${HADOOP_PREFIX}/etc/hadoop/yarn-site.xml の設定で、LinuxContainerExecutor? を有効にします。
    1.     <property>
    2.         <name>yarn.nodemanager.container-executor.class</name>
    3.         <value>org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor</value>
    4.     </property>
    5.     <property>
    6.         <name>yarn.nodemanager.linux-container-executor.group</name>
    7.         <value>yarn</value>
    8.     </property>
    • note.pngはじめに DefaultContainerExecutor? を利用していた場合には、切り替え後に以下のようなパーミッションエラーが発生します。一度ユーザキャッシュディレクトリを削除する必要があります。
      1. 12/10/30 19:18:24 INFO mapreduce.Job: Job job_1351570571119_0001 failed with state FAILED due to: Application
      2.  application_1351570571119_0001 failed 1 times due to AM Container for appattempt_1351570571119_0001_000001 exited
      3.  with  exitCode: -1000 due to: java.io.IOException: App initialization failed (255) with output: main : command
      4.  provided 0
      5. main : user is alice
      6. Can't open appcache in /grid/vol/0/var/lib/yarn/nm/local/usercache/alice/appcache/application_1351570571119_0001 -
      7.  Permission denied
      8. Did not create any app directories
      9.  
      10. at org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor.startLocalizer(
      11. LinuxContainerExecutor.java:178)
      12. at org.apache.hadoop.yarn.server.nodemanager.containermanager.localizer
      13. .ResourceLocalizationService$LocalizerRunner.run(ResourceLocalizationService.java:864)
      14. Caused by: org.apache.hadoop.util.Shell$ExitCodeException:
      15. at org.apache.hadoop.util.Shell.runCommand(Shell.java:202)
      16. at org.apache.hadoop.util.Shell.run(Shell.java:129)
      17. at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:322)
      18. at org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor.startLocalizer(
      19. LinuxContainerExecutor.java:170)
      20. ... 1 more
      21.  
      22. .Failing this attempt.. Failing the application.
      $ sudo rm -R /grid/vol/0/var/lib/yarn/nm/local/usercache
      # YARN を再起動します。

セキュア設定の有効化

参考リソース

  1. Apache Hadoop 2.0

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS