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

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

これは、Apache Hadoopの2.1系最新版のセットアップ手順です。

目次

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

  1. Hadoop2.0 - DEPRECATED
  2. HDP2.0beta

構成の概要

  • 以下では次世代のYARN(Yet Another Resource Negotiator)環境をセットアップします。CDH4では、従来型のMapReduce?(MRv1)実行環境(JobTrackerTaskTracker)をセットアップすることも可能ですが、Apache Hadoop 2.1 ではドキュメント等に言及がなく不明です(mapred-default.xmlにはMRv1用と思われるプロパティが残っていますが、各デーモンの起動スクリプトは存在しません)。
  • 2.1からWindows環境もサポートされるようになりましたが、ここではLinux環境を前提として説明します。
  • こちらの推奨ディレクトリ構成例で構築します。

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

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

  1. HDFS
    1. プライマリNameNode
    2. セカンダリNameNode
    3. DataNode
  2. YARN
    1. ResourceManager?
    2. NodeManager?
  3. MapReduce?アプリケーション
    1. JobHistoryServer?

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

Chefレシピ

参考までに、これはここで説明している疑似分散環境を構築するChefレシピ(ロール)になります。

  • cake.pnggrid-chef-repo:/roles/hadoop-pseudo-distributed.rb
    • hadoop-pseudo-distributed ロールで定義されているHadoopのデフォルトバージョンは(現時点で)安定版の1.x系ですので、以下のようなロールを新たに定義して2.1.xのバージョンを指定し、使用します。必要に応じて他の属性を設定します。
      1. name 'test-on-localhost'
      2. description 'Testing on local machine'
      3.  
      4. run_list(
      5.   'role[hadoop-pseudo-distributed]'
      6. )
      7.  
      8. default_attributes(
      9.   'hadoop' => {
      10.     'version' => '2.1.0-beta'
      11.   }
      12. )

ホスト名

  1. Hadoopの各デーモンは起動時に自ホストの名前を参照しますので、疑似分散環境(localhost)で検証する場合には、(必須ではありませんが)一時的に hostname に localhost を設定しておくと無難です。
    $ sudo hostname localhost
  2. hosts ファイルも適切に設定してあることを確認します。
    $ cat /etc/hosts
    127.0.0.1       localhost
    192.168.0.10    this.host.example.com
    ...

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.1.0-beta.tar.gz -C /grid/usr
    $ cd /grid/usr
    $ sudo chown -R root:root hadoop-2.1.0-beta/
    $ sudo ln -s hadoop-2.1.0-beta hadoop
  3. 同梱されているネイティブライブラリが環境に合致しない場合には、それらをビルドして配備します。note.png2.1.0bでは、i386版のみが同梱されています。info.pngビルド環境の構築については、Hadoopのビルドをご参照ください。以下の例では疑似分散環境のためビルド環境と配備先が同一ホストですが、プロダクション環境等の場合にはビルド専用ホストでクリーンビルドの上、各ノードに配備してください。
    1. 同梱されているライブラリを確認し退避させます。
      $ file ${HADOOP_PREFIX}/lib/native/libhadoop.so.1.0.0
      /grid/usr/hadoop/lib/native/libhadoop.so.1.0.0: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV),
       dynamically linked, BuildID[sha1]=0x527e88ec3e92a95389839bd3fc9d7dbdebf654d6, not stripped
      $ file ${HADOOP_PREFIX}/lib/native/libhdfs.so.0.0.0
      /grid/usr/hadoop/lib/native/libhdfs.so.0.0.0: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV),
       dynamically linked, BuildID[sha1]=0xddb2abae9272f584edbe22c76b43fcda9436f685, not stripped
      
      $ sudo mv ${HADOOP_PREFIX}/lib/native ${HADOOP_PREFIX}/lib/native.dist
      $ sudo mkdir ${HADOOP_PREFIX}/lib/native
    2. 以下の要領でビルドに必要な環境を整え、Mavenの3.x系とProtocolBuffers 2.5.0もあらかじめインストールします。
      [for Debian] $ sudo apt-get install ant build-essential autoconf libtool cmake
      [for CentOS] $ sudo yum install     ant gcc-c++ make autoconf automake libtool cmake
    3. ソースパッケージをダウンロードし libhadoop をビルドの上、配備します。ビルドには zlib の開発用パッケージが必要です。info.pngもし環境に合致せず、このネイティブライブラリがロードできない場合には代替のPure Javaのライブラリで動作しますので支障はありませんが、JniBasedUnixGroupsMapping?やネイティブの圧縮ライブラリが利用できませんのでパフォーマンス的には不利となります。
      [Debian] $ sudo apt-get install zlib1g-dev
      [CentOS] $ sudo yum install     zlib-devel
      $ tar xvzf hadoop-2.1.0-beta-src.tar.gz
      $ cd hadoop-2.1.0-beta-src/hadoop-common-project/hadoop-common
      $ mvn package -DskipTests -Pnative
      ...
      $ sudo cp -d target/native/target/usr/local/lib/libhadoop.* ${HADOOP_PREFIX}/lib/native/
      1. 圧縮コーデックのネイティブライブラリは、そのほとんどがこの libhadoop に含まれていますが、Bzip2コーデックについてはシステムのネイティブライブラリにリンクしますので、システムに libbz2 をインストールします。
        [Debian] $ sudo apt-get install libbz2-1.0
        [CentOS] $ sudo yum install     bzip2-libs
      2. Hadoop-LZOについては、ライセンスの関係上、Apache Hadoopには含まれませんので、ソースをビルドして配備します。ビルド方法については、Hadoopチューニングをご参照ください。
    4. libhdfs をビルドの上、配備します。ビルドには追加で pkg-config が必要です。
      [Debian] $ sudo apt-get install pkg-config
      [CentOS] $ sudo yum install     pkgconfig
      $ cd hadoop-2.1.0-beta-src/hadoop-hdfs-project/hadoop-hdfs
      $ mvn package -DskipTests -Pnative
      ...
      $ sudo cp -d target/native/target/usr/local/lib/libhdfs.* ${HADOOP_PREFIX}/lib/native/
    5. libhadooppipes をビルドの上、配備します。ビルドには追加で libssl-dev が必要です。
      [Debian] $ sudo apt-get install libssl-dev
      [CentOS] $ sudo yum install     openssl-devel
      $ cd hadoop-2.1.0-beta-src/hadoop-tools/hadoop-pipes
      $ mvn package -DskipTests -Pnative
      ...
      $ ls target/native | grep lib
      libhadooppipes.a
      libhadooputils.a
      $ sudo cp -d target/native/lib*.a ${HADOOP_PREFIX}/lib/native/
  4. 環境変数を ${HADOOP_PREFIX}/etc/hadoop/hadoop-env.sh で設定します。
    1. #export JAVA_HOME=/usr/lib/jvm/java-6-openjdk
    2. #export JAVA_HOME=/usr/lib/jvm/java-6-openjdk-i386
    3. #export JAVA_HOME=/usr/lib/jvm/java-6-openjdk-amd64
    4. export JAVA_HOME=/usr/local/jvm/java-6-ora
    5. #export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386
    6. #export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
    7. #export JAVA_HOME=/usr/local/jvm/java-7-ora
    8.  
    9. # The directory where pid files are stored. /tmp by default.
    10. export HADOOP_PID_DIR=/grid/vol/0/var/run/${USER}
    11. # Where log files are stored. $HADOOP_PREFIX/logs by default.
    12. 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)を編集します。info.png2.0.3a以降で、HDFSの高可用性機構として QuorumJournalManager? が追加されていますが、デフォルトでは従来型の FileJournalManager? が使用されます。
    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}/checkpoint</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-openjdk
    2. #export JAVA_HOME=/usr/lib/jvm/java-6-openjdk-i386
    3. #export JAVA_HOME=/usr/lib/jvm/java-6-openjdk-amd64
    4. export JAVA_HOME=/usr/local/jvm/java-6-ora
    5. #export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386
    6. #export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
    7. #export JAVA_HOME=/usr/local/jvm/java-7-ora
    8.  
    9. export HADOOP_PREFIX=/grid/usr/hadoop
    10. #export HADOOP_CONF_DIR=${HADOOP_PREFIX}/etc/hadoop
    11. export HADOOP_COMMON_HOME=${HADOOP_PREFIX}
    12. export HADOOP_HDFS_HOME=${HADOOP_PREFIX}
    13.  
    14. export YARN_HOME=${HADOOP_PREFIX}
    15. export YARN_PID_DIR=/grid/vol/0/var/run/${USER}
    16. export YARN_LOG_DIR=/grid/vol/0/var/log/${USER}
    17.  
    18. export HADOOP_MAPRED_HOME=${HADOOP_PREFIX}
    19. ...
  2. 設定ファイルを用意します(${HADOOP_PREFIX}/etc/hadoop/yarn-site.xml)。単一サーバでの検証では、あまりにもリソースが少ないとジョブが実行できない場合がありますので、メモリリソースは多めに設定しておきます。info.png2.0.3aからCPUコア数のリソース管理機能が追加されています。
    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>Amount of physical memory, in MB, that can be allocated
    21.         for containers. (default: 8192)</description>
    22.     </property>
    23.     <property>
    24.         <name>yarn.nodemanager.resource.cpu-cores</name>
    25.         <value>8</value>
    26.         <description>Number of CPU cores that can be allocated
    27.         for containers. (default: 8)</description>
    28.     </property>
    29.     <property>
    30.         <name>yarn.nodemanager.remote-app-log-dir</name>
    31.         <value>/grid/vol/0/var/log/${user.name}/nm</value>
    32.         <description>directory on hdfs where the application logs are moved to
    33.         (default: /tmp/logs)</description>
    34.     </property>
    35.     <property>
    36.         <name>yarn.nodemanager.log-dirs</name>
    37.         <value>/grid/vol/0/var/log/${user.name}/nm</value>
    38.         <description>the directories used by Nodemanagers as log directories
    39.         (default: /tmp/logs)</description>
    40.     </property>
    41.     <property>
    42.         <name>yarn.nodemanager.aux-services</name>
    43.         <value>mapreduce.shuffle</value>
    44.         <description>shuffle service that needs to be set for Map Reduce to run</description>
    45.     </property>
    46. <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-openjdk
    2. #export JAVA_HOME=/usr/lib/jvm/java-6-openjdk-i386
    3. #export JAVA_HOME=/usr/lib/jvm/java-6-openjdk-amd64
    4. export JAVA_HOME=/usr/local/jvm/java-6-ora
    5. #export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386
    6. #export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
    7. #export JAVA_HOME=/usr/local/jvm/java-7-ora
    8.  
    9. # The directory where pid files are stored. /tmp by default.
    10. export HADOOP_MAPRED_PID_DIR=/grid/vol/0/var/run/${USER}
    11. # Where log files are stored.  $HADOOP_MAPRED_HOME/logs by default.
    12. export HADOOP_MAPRED_LOG_DIR=/grid/vol/0/var/log/${USER}
    13. ...
  2. 設定ファイル(${HADOOP_PREFIX}/etc/hadoop/mapred-site.xml)を編集します。
    $ sudo cp etc/hadoop/mapred-site.xml.template 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?では mapreduce.jobtracker.staging.root.dir で行いましたが、一方YARNでは 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. ローカルファイルシステム上に必要なディレクトリはありません。
  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:alice /user/alice
    $ sudo -u alice bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.1.0-beta.jar pi 5 10
    or
    $ sudo -u alice bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.1.0-beta.jar pi 5 10
    ...

完全分散モード

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

Chefレシピ

参考までに、これはここで説明している完全分散環境を構築するChefレシピ(ロール)になります。

  • cake.pnggrid-chef-repo:/roles/hadoop-pleiades.rb
    • 疑似分散環境用のロールと同様に、Hadoopのデフォルトバージョンは(現時点で)安定版の1.x系ですので、以下の要領でロールを新たに定義して2.1.xのバージョンを指定します。
      1. name 'test-on-distributed'
      2. description 'Testing on distributed env.'
      3.  
      4. run_list(
      5.   'role[hadoop-pleiades]'
      6. )
      7.  
      8. default_attributes(
      9.   'hadoop' => {
      10.     'version' => '2.1.0-beta'
      11.   }
      12. )

LDAP認可環境

  1. Hadoopでは協調動作する全ノードで統一的に権限認可(主にグループ解決)を管理する必要がありますので、Name Service Switch (NSS) のバックエンドデータベースとして一般的なLDAPを構築するとよいでしょう。
  2. Hadoop 2.1には hadoop.security.group.mapping に設定する GroupMappingServiceProvider? として LdapGroupsMapping? が追加されていますが、最終的にユーザ権限でTaskプロセスを起動させる関係上、権限解決はOSレベルに統一して委譲するのが効果的です。そのような点で、JniBasedUnixGroupsMapping? を使用するのが運用、パフォーマンス両面で最も効果的です。
  3. 基本的なLDAP環境の構築方法については、LDAPセットアップforHadoopをご参照ください。
  4. Hadoop起動ユーザのためのldifファイル(例: hadoop_users-2.0.ldif)を作成し、それらのユーザを追加します。note.pngもしLDAPをすでにKerberos化している場合には、以下、認証に関するコマンドパラメータを適切に変更して実行してください。
    $ 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/hdfs-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
  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>

ノード管理の徹底

  1. ${HADOOP_PREFIX}/etc/hadoop/hdfs-site.xml
    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>
  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>

セキュア設定の有効化

参考リソース

  1. Apache Hadoop 2.1
  2. 設定ファイル一式

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-05-15 (木) 21:20:01 (1923d)