CDH > CDH4セットアップ >

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

目次

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

  1. CDH3 - DEPRECATED

構成の概要

  • CDH4では、従来型のMapReduce?実行環境(JobTrackerTaskTracker)をセットアップすることも可能ですが、以下では次世代のYARN(Yet Another Resource Negotiator)環境をセットアップします。
  • こちらの推奨ディレクトリ構成例で構築します。

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

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

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

CDHの設定ディレクトリは、/etc/hadoop/conf/ です。

Chefレシピ

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

  • cake.pnggrid-chef-repo:/roles/hadoop-pseudo-distributed.rb: これはデフォルトでは、Apache版のHadoopクラスタを構築するロールです。
    • cake.pnggrid-chef-repo:/roles/test-cdh-on-localhost.rb: CDHでクラスタ構築する場合には、このロールのように run_list に yum-cdh および hadoop-pseudo-distributed ロールを追加した上で、node['hadoop']['install_flavor'] 属性でディストリビューションを切り替え、必要に応じて他の属性を設定します。なお、実際に構築を行う hadoop::cdh レシピは、RPMパッケージを用いてCDHのインストールを行います。
      1. name 'test-cdh-on-localhost'
      2. description 'Testing Cloudera\'s Distribution, including Apache Hadoop on local machine'
      3.  
      4. run_list(
      5.   'role[node_commons]',
      6.   'role[chef_utils]',
      7.   #'role[nameservice-client]',
      8.   'role[ganglia-gmond-ucast-localhost]',
      9.   'role[ganglia-gmetad-localhost]',
      10.   'role[ganglia-web]',
      11.   'role[nagios]',
      12.   'role[yum-cdh]',
      13.   'role[hadoop-pseudo-distributed]',
      14.   #'role[hadoop-pseudo-distributed-with-security]',
      15. )
      16.  
      17. # (...)
      18.  
      19. default_attributes(
      20.   'cdh' => {
      21.     'version' => '4.2.0',
      22.     #'version' => '3u6',
      23.   },
      24.   'hadoop' => {
      25.     'install_flavor' => 'cdh',
      26.     'HADOOP_CLASSPATH' => '',
      27.     'HADOOP_USER_CLASSPATH_FIRST' => 'false',
      28.     # for 2.0.x only
      29.     'container-executor' => {
      30.       'min.user.id' => '500'
      31.     },
      32.     #'yarn.nodemanager.linux-container-executor.resources-handler.class' \
      33.     #  => 'org.apache.hadoop.yarn.server.nodemanager.util.CgroupsLCEResourcesHandler',
      34.     },
      35.   }
      36. )

ホスト名

  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. note.pngOracle JDKはインストールされている前提です。
  2. CDH4のリポジトリを追加します。
    $ wget http://archive.cloudera.com/cdh4/one-click-install/redhat/6/i386/cloudera-cdh-4-0.i386.rpm
    $ sudo yum --nogpgcheck localinstall cloudera-cdh-4-0.i386.rpm
    or
    $ wget http://archive.cloudera.com/cdh4/one-click-install/redhat/6/x86_64/cloudera-cdh-4-0.x86_64.rpm
    $ sudo yum --nogpgcheck localinstall cloudera-cdh-4-0.x86_64.rpm
    
    $ sudo rpm --import http://archive.cloudera.com/cdh4/redhat/6/x86_64/cdh/RPM-GPG-KEY-cloudera
    
    $ yum repolist
    ...
    repo id                 repo name                                                status
    base                    CentOS-6 - Base                                          6,381
    cloudera-cdh4           Cloudera's Distribution for Hadoop, Version 4               95
    extras                  CentOS-6 - Extras                                           12
    updates                 CentOS-6 - Updates                                         459
    repolist: 6,947
  3. ノード毎に必要なデーモンパッケージ(疑似分散の場合には全て)をインストールします。
    $ sudo yum install hadoop-{hdfs-{namenode,secondarynamenode,datanode},yarn-{resourcemanager,nodemanager},mapreduce-historyserver}
    1. hdfs、yarn、mapredユーザおよびhadoopグループが自動で追加されます。
      $ id hdfs
      uid=496(hdfs) gid=496(hdfs) groups=496(hdfs),498(hadoop)
      $ id yarn
      uid=497(yarn) gid=497(yarn) groups=497(yarn),498(hadoop)
      $ id mapred
      uid=495(mapred) gid=495(mapred) groups=495(mapred),498(hadoop)
    2. インストール時に各デーモンの自動起動が有効になっていますので、もし運用上、支障があれば無効にします。
      $ chkconfig | grep hadoop
      hadoop-hdfs-datanode	0:off	1:off	2:off	3:on	4:on	5:on	6:off
      hadoop-hdfs-namenode	0:off	1:off	2:off	3:on	4:on	5:on	6:off
      hadoop-hdfs-secondarynamenode	0:off	1:off	2:off	3:on	4:on	5:on	6:off
      hadoop-mapreduce-historyserver	0:off	1:off	2:off	3:on	4:on	5:on	6:off
      hadoop-yarn-nodemanager	0:off	1:off	2:off	3:on	4:on	5:on	6:off
      hadoop-yarn-resourcemanager	0:off	1:off	2:off	3:on	4:on	5:on	6:off
    3. ネイティブライブラリは hadoop パッケージ(CDH3では hadoop-0.20-native)で、jsvc は依存関係にある bigtop-jsvc パッケージで、container-executor バイナリは hadoop-yarn パッケージ(以上の2バイナリは、CDH3では hadoop-0.20-sbin)でそれぞれインストールされます。
  4. alternativesシステムを利用して設定セットを管理します。以下の例では、conf.localhost 設定セットを作成し、有効にしています。
    $ sudo cp -R /etc/hadoop/conf.dist/ /etc/hadoop/conf.localhost
    $ sudo alternatives --verbose --install /etc/hadoop/conf hadoop-conf /etc/hadoop/conf.localhost 50
    $ sudo alternatives --display hadoop-conf
    hadoop-conf - status is auto.
     link currently points to /etc/hadoop/conf.localhost
    /etc/hadoop/conf.empty - priority 10
    /etc/hadoop/conf.pseudo - priority 30
    /etc/hadoop/conf.localhost - priority 50
    Current `best' version is /etc/hadoop/conf.localhost.
    • 疑似分散の場合には、以下のように既存の hadoop-conf-pseudo パッケージを利用することも可能ですが、カスタマイズの都合上、この説明では一から設定していきます。
      $ sudo yum install hadoop-conf-pseudo
      ...
      $ rpm -ql hadoop-conf-pseudo
      /etc/hadoop/conf.pseudo
      /etc/hadoop/conf.pseudo/README
      /etc/hadoop/conf.pseudo/core-site.xml
      /etc/hadoop/conf.pseudo/hadoop-env.sh
      /etc/hadoop/conf.pseudo/hadoop-metrics.properties
      /etc/hadoop/conf.pseudo/hdfs-site.xml
      /etc/hadoop/conf.pseudo/log4j.properties
      /etc/hadoop/conf.pseudo/mapred-site.xml
      /etc/hadoop/conf.pseudo/yarn-site.xml
  5. /etc/hadoop/conf/hadoop-env.sh を作成し、環境にあわせて以下のような内容を追加します。$HADOOP_PID_DIR はデフォルト(/var/run/hadoop-hdfs)のままで良いでしょう。$HADOOP_MAPRED_HOME の設定は、hadoop や yarn コマンドでMapReduce?ジョブを実行する場合に必要となります。
    1. # The directory where pid files are stored. /var/run/hadoop-hdfs by default.
    2. #export HADOOP_PID_DIR=/grid/vol/0/var/run/${USER}
    3. # Where log files are stored. /var/log/hadoop-hdfs by default.
    4. # $USER is N/A in the Secure DataNode
    5. #export HADOOP_LOG_DIR=/grid/vol/0/var/log/${USER}
    6. if [ x"$USER" = x'' ]; then
    7.     export HADOOP_LOG_DIR=/grid/vol/0/var/log/hdfs
    8. else
    9.     export HADOOP_LOG_DIR=/grid/vol/0/var/log/${USER}
    10. fi
    11.  
    12. # Note: Secure DataNode settings are N/A -> /etc/default/hadoop-hdfs-datanode
    13. #export HADOOP_SECURE_DN_USER=hdfs
    14. #export HADOOP_SECURE_DN_PID_DIR=/var/run/hadoop-hdfs
    15. #export HADOOP_SECURE_DN_LOG_DIR=/grid/vol/0/var/log/${HADOOP_SECURE_DN_USER}
    16.  
    17. export HADOOP_MAPRED_HOME=/usr/lib/hadoop-mapreduce
    1. info.pngなお、デフォルト設定は以下のとおりです。
      $ cat /etc/default/hadoop
      ...
      export HADOOP_HOME_WARN_SUPPRESS=true
      export HADOOP_PREFIX=/usr/lib/hadoop
      
      export HADOOP_LIBEXEC_DIR=/usr/lib/hadoop/libexec
      export HADOOP_CONF_DIR=/etc/hadoop/conf
      
      export HADOOP_COMMON_HOME=/usr/lib/hadoop
      export HADOOP_HDFS_HOME=/usr/lib/hadoop-hdfs
      export HADOOP_MAPRED_HOME=/usr/lib/hadoop-mapreduce
      export YARN_HOME=/usr/lib/hadoop-yarn
      export JSVC_HOME=/usr/libexec/bigtop-utils
  6. データなどを格納するディレクトリを用意します。
    $ 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
  7. 設定ファイル /etc/hadoop/conf/core-site.xml を編集します。文字通り一時作業領域という意味で 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 でデフォルトで利用されるようです。ご注意ください。

オプションのネイティブライブラリ

  1. libhdfs は、hadoop-libhdfs パッケージでインストールします。
    $ rpm -ql hadoop-libhdfs
    /usr/include/hdfs.h
    /usr/lib64/libhdfs.so
    /usr/lib64/libhdfs.so.0.0.0

HDFS

  1. info.png特に編集する必要はありませんが、デフォルト環境設定は以下のとおりです。
    $ cat /etc/default/hadoop-hdfs-namenode
    ...
    export HADOOP_PID_DIR=/var/run/hadoop-hdfs
    export HADOOP_LOG_DIR=/var/log/hadoop-hdfs
    export HADOOP_NAMENODE_USER=hdfs
    export HADOOP_SECONDARYNAMENODE_USER=hdfs
    export HADOOP_DATANODE_USER=hdfs
    export HADOOP_IDENT_STRING=hdfs
    
    # export HADOOP_SECURE_DN_USER=hdfs
    # export HADOOP_SECURE_DN_PID_DIR=/var/run/hadoop-hdfs
    # export HADOOP_SECURE_DN_LOG_DIR=/var/log/hadoop-hdfs
    $ cat /etc/default/hadoop-hdfs-secondarynamenode
    ...
    export HADOOP_PID_DIR=/var/run/hadoop-hdfs
    export HADOOP_LOG_DIR=/var/log/hadoop-hdfs
    export HADOOP_NAMENODE_USER=hdfs
    export HADOOP_SECONDARYNAMENODE_USER=hdfs
    export HADOOP_DATANODE_USER=hdfs
    export HADOOP_IDENT_STRING=hdfs
    
    # export HADOOP_SECURE_DN_USER=hdfs
    # export HADOOP_SECURE_DN_PID_DIR=/var/run/hadoop-hdfs
    # export HADOOP_SECURE_DN_LOG_DIR=/var/log/hadoop-hdfs
    $ cat /etc/default/hadoop-hdfs-datanode
    ...
    export HADOOP_PID_DIR=/var/run/hadoop-hdfs
    export HADOOP_LOG_DIR=/var/log/hadoop-hdfs
    export HADOOP_NAMENODE_USER=hdfs
    export HADOOP_SECONDARYNAMENODE_USER=hdfs
    export HADOOP_DATANODE_USER=hdfs
    export HADOOP_IDENT_STRING=hdfs
    
    # export HADOOP_SECURE_DN_USER=hdfs
    # export HADOOP_SECURE_DN_PID_DIR=/var/run/hadoop-hdfs
    # export HADOOP_SECURE_DN_LOG_DIR=/var/log/hadoop-hdfs
  2. 設定ファイル(/etc/hadoop/conf/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}/checkpoint</value>
    13.     </property>
    14.     <property>
    15.         <name>dfs.replication</name>
    16.         <value>1</value>
    17.     </property>
    18. </copnfiguratiot>
  3. HDFSをフォーマットします。
    $ sudo -u hdfs hdfs namenode -format
  4. 各デーモンを起動します。
    $ sudo service hadoop-hdfs-namenode start
    $ sudo service hadoop-hdfs-secondarynamenode start
    $ sudo service hadoop-hdfs-datanode start
  5. HDFS上に必要なディレクトリを作成します。クォータ管理できないため、/tmp は作成しません。
    $ sudo -u hdfs hadoop fs -chown hdfs:hadoop /
    $ sudo -u hdfs hadoop fs -chmod 755         /
    $ sudo -u hdfs hadoop fs -mkdir /user
    $ sudo -u hdfs hadoop fs -chown hdfs:hadoop /user
    $ sudo -u hdfs hadoop fs -chmod 755         /user
  6. Web UIのアクセスURLは以下の通りです。
    http://localhost:50070/

YARN

  1. 環境変数を設定します(/etc/hadoop/conf/yarn-env.sh)。以下のような内容をファイルの先頭に追加します。$YARN_PID_DIR はデフォルト(/var/run/hadoop-yarn および /var/run/hadoop-mapreduce)のままで良いでしょう。
    1. # default: /var/run/hadoop-yarn, /var/run/hadoop-mapreduce
    2. #export YARN_PID_DIR=/grid/vol/0/var/run/${USER}
    3. # default: /var/log/hadoop-yarn, /var/log/hadoop-mapreduce
    4. export YARN_LOG_DIR=/grid/vol/0/var/log/${USER}
    5. ...
    1. info.pngなお、デフォルト環境設定は以下のとおりです。
      $ cat /etc/default/hadoop-yarn-resourcemanager
      ...
      export YARN_IDENT_STRING=yarn
      export YARN_PID_DIR=/var/run/hadoop-yarn
      export YARN_LOG_DIR=/var/log/hadoop-yarn
      export YARN_CONF_DIR=/etc/hadoop/conf
      $ cat /etc/default/hadoop-yarn-nodemanager
      ...
      export YARN_IDENT_STRING=yarn
      export YARN_PID_DIR=/var/run/hadoop-yarn
      export YARN_LOG_DIR=/var/log/hadoop-yarn
      export YARN_CONF_DIR=/etc/hadoop/conf
  2. 設定ファイルを用意します(/etc/hadoop/conf/yarn-site.xml)。単一サーバでの検証では、あまりにもリソースが少ないとジョブが実行できない場合がありますので、メモリリソースは多めに設定しておきます。info.pngApache Hadoop 2.0.3aから導入されたCPUコア数のリソース管理機能はCDH4ではまだ提供されていません。
    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.     <!--
    24.     <property>
    25.         <name>yarn.nodemanager.resource.cpu-cores</name>
    26.         <value>8</value>
    27.         <description>Number of CPU cores that can be allocated
    28.         for containers. (default: 8)</description>
    29.     </property>
    30.     -->
    31.     <property>
    32.         <name>yarn.nodemanager.remote-app-log-dir</name>
    33.         <value>/grid/vol/0/var/log/${user.name}/nm</value>
    34.         <description>directory on hdfs where the application logs are moved to
    35.         (default: /tmp/logs)</description>
    36.     </property>
    37.     <property>
    38.         <name>yarn.nodemanager.log-dirs</name>
    39.         <value>/grid/vol/0/var/log/${user.name}/nm</value>
    40.         <description>the directories used by Nodemanagers as log directories
    41.         (default: /tmp/logs)</description>
    42.     </property>
    43.     <property>
    44.         <name>yarn.nodemanager.aux-services</name>
    45.         <value>mapreduce.shuffle</value>
    46.         <description>shuffle service that needs to be set for Map Reduce to run</description>
    47.     </property>
    48.     <property>
    49.         <name>yarn.application.classpath</name>
    50.         <value>
    51.            $HADOOP_CONF_DIR,
    52.            $HADOOP_COMMON_HOME/*,$HADOOP_COMMON_HOME/lib/*,
    53.            $HADOOP_HDFS_HOME/*,$HADOOP_HDFS_HOME/lib/*,
    54.            $HADOOP_MAPRED_HOME/*,$HADOOP_MAPRED_HOME/lib/*,
    55.            $YARN_HOME/*,$YARN_HOME/lib/*
    56.         </value>
    57.         <description>Classpath for typical applications.</description>
    58.     </property>
    59. <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 にユーザ権限でログが移されます。
    $ sudo -u hdfs hadoop fs -mkdir -p /grid/vol/0/var/log/yarn/nm    # yarn.nodemanager.remote-app-log-dir
    $ sudo -u hdfs hadoop fs -chown yarn:hadoop /grid/vol/0/var/log/yarn/nm
    $ sudo -u hdfs hadoop fs -chmod 1777        /grid/vol/0/var/log/yarn/nm
  5. CapacityScheduler?の設定ファイル(/etc/hadoop/conf/capacity-scheduler.xml)が用意されていませんので、Apache Hadoop 2.0.x 等から入手して適宜編集します。
  6. 各デーモンを起動します。
    $ sudo service hadoop-yarn-resourcemanager start
    $ sudo service hadoop-yarn-nodemanager start
  7. Web UIのアクセスURLは以下の通りです。
    http://localhost:8088/    # ResourceManager
    http://localhost:8042/    # NodeManager

MapReduce?

  1. info.pngApache Hadoopでは、2.0.2 から /etc/hadoop/conf/mapred-env.sh で環境変数を設定するようになりましたが、CDH4では未対応(/etc/hadoop/conf/yarn-env.sh が参照される)です。デフォルト環境設定は以下のとおりですが、設定ファイルが分散してしまいますのでこのファイルは直接編集しない方がよいでしょう。
    $ cat /etc/default/hadoop-mapreduce-historyserver
    ...
    # FIXME: MAPREDUCE-3900
    export YARN_IDENT_STRING=mapred
    export YARN_PID_DIR=/var/run/hadoop-mapreduce
    export YARN_LOG_DIR=/var/log/hadoop-mapreduce
    export HADOOP_LOG_DIR=/var/log/hadoop-mapreduce
    export HADOOP_MAPRED_HOME=/usr/lib/hadoop-mapreduce
  2. 設定ファイル(/etc/hadoop/conf/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.     <!-- for MapReduce Ver. 1 only.
    11.     <property>
    12.         <name>mapreduce.jobtracker.system.dir</name>
    13.         <value>/grid/vol/0/var/lib/mapred/system</value>
    14.         <description>The directory where MapReduce stores control files.
    15.         (default: ${hadoop.tmp.dir}/mapred/system on HDFS)
    16.         </description>
    17.     </property>
    18.     <property>
    19.         <name>mapreduce.cluster.local.dir</name>
    20.         <value>/grid/vol/0/var/lib/mapred/local</value>
    21.         <description>The local directory where MapReduce stores intermediate
    22.         data files.  May be a comma-separated list of
    23.         directories on different devices in order to spread disk i/o.
    24.         Directories that do not exist are ignored.
    25.         (default: ${hadoop.tmp.dir}/mapred/local on LOCAL)
    26.         </description>
    27.     </property>
    28.     <property>
    29.         <name>mapreduce.cluster.temp.dir</name>
    30.         <value>/grid/vol/0/tmp/mapred/temp</value>
    31.         <description>A shared directory for temporary files.
    32.         (default: ${hadoop.tmp.dir}/mapred/temp on LOCAL)
    33.         </description>
    34.     </property>
    35.     -->
    36.     <property>
    37.         <name>yarn.app.mapreduce.am.staging-dir</name>
    38.         <value>/user</value>
    39.     </property>
    40.     <property>
    41.         <name>mapreduce.jobhistory.intermediate-done-dir</name>
    42.         <value>/grid/vol/0/var/lib/mapred/history/done_intermediate</value>
    43.         <!-- NG: <value>/user</value> -->
    44.     </property>
    45.     <property>
    46.         <name>mapreduce.jobhistory.done-dir</name>
    47.         <value>/grid/vol/0/var/lib/mapred/history/done</value>
    48.     </property>
    49. </configuration>
    1. info.pngYARNにおける staging ディレクトリの設定は、yarn.app.mapreduce.am.staging-dir で行います。MapReduce? Ver.1 を使用する場合には、従来通り mapreduce.jobtracker.staging.root.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 hadoop fs -mkdir -p /grid/vol/0/var/lib/mapred/history
    $ sudo -u hdfs hadoop fs -chown -R mapred:hadoop /grid/vol/0/var/lib/mapred
    $ sudo -u hdfs hadoop fs -chmod -R 755           /grid/vol/0/var/lib/mapred
  5. ResouceManager?NodeManager? を再起動して反映させます。
  6. 履歴サーバを起動します。
    $ sudo service hadoop-mapreduce-historyserver start
  7. 履歴サーバWeb UIのアクセスURLは以下の通りです。
    http://localhost:19888/

テスト

  1. テストユーザを追加し、サンプルジョブを実行してみます。
    $ sudo adduser alice
    $ sudo -u hdfs hadoop fs -mkdir /user/alice
    $ sudo -u hdfs hadoop fs -chown alice:alice /user/alice
    $ sudo -u alice hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi 5 10
     or
    $ sudo -u alice yarn jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi 5 10
    ...
    1. すでに /etc/hadoop/conf/hadoop-env.sh にも設定しましたが、YARNの導入によりMapReduce?フレームワークはユーザスペースに移行していますので、PigやHiveを利用する場合には、ユーザが $HADOOP_MAPRED_HOME を適切に設定する必要があります。
      $ export HADOOP_MAPRED_HOME=/usr/lib/hadoop-mapreduce

完全分散モード

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

Chefレシピ

info.png参考までに、これはここで説明している完全分散環境を構築するChefレシピ(ロール)の作成についての解説です。

  • cake.pnggrid-chef-repo:/roles/hadoop-pleiades.rb: まず、これはデフォルトでは、Apache版のHadoopクラスタを構築するロールです。
  • CDHでクラスタ構築する場合には新規のロールを定義し、以下の要領で run_list に yum-cdh およびこの hadoop-pleiades ロールを追加した上で、node['hadoop']['install_flavor'] 属性でディストリビューションを切り替え、必要に応じて他の属性を設定します。なお、実際に構築を行う hadoop::cdh レシピは、RPMパッケージを用いてCDHのインストールを行います。CDHでは、alternativesシステムで設定ファイルセットを切り替えますので、node['hadoop']['cdh']['alternatives']['hadoop-conf'] も適切に設定します。
    1. name 'test-cdh'
    2. description 'Testing Cloudera\'s Distribution, including Apache Hadoop'
    3.  
    4. run_list(
    5.   'role[node_commons]',
    6.   'role[chef_utils]',
    7.   #'role[nameservice-client]',
    8.   'role[ganglia-gmond-ucast-localhost]',
    9.   'role[ganglia-gmetad-localhost]',
    10.   'role[ganglia-web]',
    11.   'role[nagios]',
    12.   'role[yum-cdh]',
    13.   'role[hadoop-pleiades]',
    14.   #'role[hadoop-pleiades-with-security]',
    15. )
    16.  
    17. # (...)
    18.  
    19. default_attributes(
    20.   'cdh' => {
    21.     'version' => '4.2.0',
    22.     #'version' => '3u6',
    23.     'yum_repo' => {
    24.       'with_gplextras' => true
    25.     }
    26.   },
    27.   'hadoop' => {
    28.     'install_flavor' => 'cdh',
    29.     'cdh' => {
    30.       'alternatives' => {
    31.         'hadoop-conf' => {
    32.           'path' => '/etc/hadoop/conf.pleiades',
    33.           'priority' => '40'
    34.         }
    35.       },
    36.       'resource_negotiator_framework' => 'YARN',  # CDH4 only.
    37.     },
    38.     'HADOOP_CLASSPATH' => '',
    39.     'HADOOP_USER_CLASSPATH_FIRST' => 'false',
    40.     # for 2.0.x only
    41.     'container-executor' => {
    42.       'min.user.id' => '500'
    43.     },
    44.     #'yarn.nodemanager.linux-container-executor.resources-handler.class' \
    45.     #  => 'org.apache.hadoop.yarn.server.nodemanager.util.CgroupsLCEResourcesHandler',
    46.     },
    47.   }
    48. )

LDAP認可環境

  1. Hadoopでは協調動作する全ノードで統一的に権限認可(主にグループ解決)を管理する必要がありますので、Name Service Switch (NSS) のバックエンドデータベースとして一般的なLDAPを構築するとよいでしょう。
  2. CDH4には 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. /etc/hadoop/conf/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. /etc/hadoop/conf/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    # MapReduce v1のみ
    $ sudo chmod 1777 /grid/vol/{0,1}/tmp
  2. /etc/hadoop/conf/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. /etc/hadoop/conf/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. /etc/hadoop/conf/hdfs-site.xml
    1.     <property>
    2.         <name>dfs.hosts</name>
    3.         <value>/etc/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>/etc/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. /etc/hadoop/conf/yarn-site.xml
    1.     <property>
    2.         <name>yarn.resourcemanager.nodes.include-path</name>
    3.         <value>/etc/hadoop/conf/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>/etc/hadoop/conf/hosts.exclude</value>
    9.         <description>Path to file with nodes to exclude.</description>
    10.     </property>

セキュア設定の有効化

参考リソース

  1. 設定ファイル一式
  2. CDH4 Documentation

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-08-16 (金) 20:13:15 (2963d)