Hadoopセットアップ >

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

info.pngこれは、HDP2.0 Beta (Hortonworks Data Platform) の最新版のセットアップ手順です。検証した内容を記述しておりますが、詳細かつ正確な情報については、Hortonworksのホームページをご参照ください。

目次

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

  1. HDP2.0
  2. HDP2.0alpha - DEPRECATED
  3. HDP1.2 - DEPRECATED

構成の概要

  • CDH4では従来型のMapReduce?実行環境(JobTrackerTaskTracker)をセットアップすることも可能ですが、HDP2.0ではドキュメント等に言及がなく不明です。以下では次世代の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?

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

Chefレシピ

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

  • cake.pnggrid-chef-repo:/roles/hadoop-pseudo-distributed.rb: これはデフォルトでは、Apache版のHadoopクラスタを構築するロールです。
    • cake.pnggrid-chef-repo:/roles/test-hdp-on-localhost.rb: HDPでクラスタ構築する場合には、このロールのように run_list に yum-hdp および hadoop-pseudo-distributed ロールを追加した上で、node['hadoop']['install_flavor'] 属性でディストリビューションを切り替え、必要に応じて他の属性を設定します。なお、実際に構築を行う hadoop::hdp レシピは、RPMパッケージを用いてHDPのインストールを行います。
      1. name 'test-hdp-on-localhost'
      2. description 'Testing Hortonworks Data Platform 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-hdp]',
      13.   'role[hadoop-pseudo-distributed]',
      14.   #'role[hadoop-pseudo-distributed-with-security]',
      15. )
      16.  
      17. # (...)
      18.  
      19. default_attributes(
      20.   'hdp' => {
      21.     'version' => '2.0.5.0',
      22.     #'version' => '1.2.3.1',
      23.   },
      24.   'hadoop' => {
      25.     'install_flavor' => 'hdp',
      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. HDP2.0betaのリポジトリを追加します。
    $ sudo wget -nv http://public-repo-1.hortonworks.com/HDP/centos6/2.x/updates/2.0.5.0/hdp.repo -O /etc/yum.repos.d/hdp.repo
    
    $ yum repolist
    ...
    repo id            repo name                                                    status
    HDP-2.0.5.0        Hortonworks Data Platform HDP-2.0.5.0                           69
    HDP-2.x            Hortonworks Data Platform Version - HDP-2.x                     64
    HDP-UTILS-1.1.0.16 Hortonworks Data Platform Utils Version - HDP-UTILS-1.1.0.16    61
    base               CentOS-6 - Base                                              6,381
    extras             CentOS-6 - Extras                                               13
    updates            CentOS-6 - Updates                                           1,179
    repolist: 7,767
  3. ノード毎に必要なデーモンパッケージ(疑似分散の場合には全て)をインストールします。
    $ sudo yum install hadoop-{hdfs-{namenode,secondarynamenode,datanode},yarn-{resourcemanager,nodemanager},mapreduce-historyserver}
    1. hdfs、yarn、mapredユーザおよびhadoopグループが自動で追加されます。
      $ id hdfs
      uid=497(hdfs) gid=498(hdfs) groups=498(hdfs),499(hadoop)
      $ id yarn
      uid=496(yarn) gid=497(yarn) groups=497(yarn),499(hadoop)
      $ id mapred
      uid=495(mapred) gid=496(mapred) groups=496(mapred),499(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 パッケージ(HDP1.2では hadoop-native)で、jsvc は依存関係にある bigtop-jsvc パッケージで、container-executor バイナリは hadoop-yarn パッケージ(以上の2バイナリは、HDP1.2では hadoop-sbin)でそれぞれインストールされます。
      $ rpm -ql hadoop | grep libhadoop
      /usr/lib/hadoop/lib/native/libhadoop.a
      /usr/lib/hadoop/lib/native/libhadoop.so
      /usr/lib/hadoop/lib/native/libhadoop.so.1.0.0
      /usr/lib/hadoop/lib/native/libhadooppipes.a
      /usr/lib/hadoop/lib/native/libhadooputils.a
  4. alternativesシステムを利用して設定セットを管理します。以下の例では、conf.localhost 設定セットを作成し、有効にしています。
    $ sudo cp -R /etc/hadoop/conf.empty/ /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-metrics.properties
      /etc/hadoop/conf.pseudo/hadoop-metrics2.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-${USER})のままで良いでしょう。
    1. export JAVA_HOME=/usr/java/default
    2. # The directory where pid files are stored. /var/run/hadoop-${USER} by default.
    3. #export HADOOP_PID_DIR=/grid/vol/0/var/run/${USER}
    4. # Where log files are stored. /var/log/hadoop-${USER} by default.
    5. export HADOOP_LOG_DIR=/grid/vol/0/var/log/${USER}
    6.  
    7. # Note: Secure DataNode settings are N/A -> /etc/default/hadoop-hdfs-datanode
    8. #export HADOOP_SECURE_DN_USER=hdfs
    9. #export HADOOP_SECURE_DN_PID_DIR=/var/run/hadoop-hdfs
    10. #export HADOOP_SECURE_DN_LOG_DIR=/grid/vol/0/var/log/${HADOOP_SECURE_DN_USER}
    1. info.pngなお、デフォルト設定は以下のとおりです。
      $ cat /etc/default/hadoop
      ...
      export HADOOP_HOME_WARN_SUPPRESS=true
      export HADOOP_HOME=/usr/lib/hadoop
      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 HADOOP_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 パッケージでインストールします。
    $ sudo yum install hadoop-libhdfs
    $ rpm -ql hadoop-libhdfs
    /usr/include/hdfs.h
    /usr/lib64/libhdfs.so
    /usr/lib64/libhdfs.so.0.0.0
  2. LZOライブラリは、hadoop-lzo-native および hadoop-lzo パッケージでインストールします。
    $ sudo yum install hadoop-lzo-native
    ...
    Installed:
      hadoop-lzo-native.x86_64 0:0.5.0-1                                                     
    
    Complete!
    $ rpm -ql hadoop-lzo-native
    /usr/lib/hadoop/lib/native
    /usr/lib/hadoop/lib/native/Linux-amd64-64
    /usr/lib/hadoop/lib/native/Linux-amd64-64/libgplcompression.a
    /usr/lib/hadoop/lib/native/Linux-amd64-64/libgplcompression.la
    /usr/lib/hadoop/lib/native/Linux-amd64-64/libgplcompression.so
    /usr/lib/hadoop/lib/native/Linux-amd64-64/libgplcompression.so.0
    /usr/lib/hadoop/lib/native/Linux-amd64-64/libgplcompression.so.0.0.0
    /usr/lib/hadoop/lib/native/docs
    
    $ sudo yum install hadoop-lzo
    ...
    Installed:
      hadoop-lzo.x86_64 0:0.5.0-1                                                            
    
    Dependency Installed:
      lzo.x86_64 0:2.06-1.el6                                                                
    
    Complete!
    $ rpm -ql hadoop-lzo
    /usr/lib/hadoop/lib/hadoop-lzo-0.5.0.jar
    $ rpm -ql lzo
    /usr/lib64/liblzo2.so.2
    /usr/lib64/liblzo2.so.2.0.0
    /usr/share/doc/lzo-2.06
    /usr/share/doc/lzo-2.06/AUTHORS
    /usr/share/doc/lzo-2.06/COPYING
    /usr/share/doc/lzo-2.06/NEWS
    /usr/share/doc/lzo-2.06/THANKS

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. # The directory where pid files are stored. /var/run/hadoop-${USER} by default.
    2. #export YARN_PID_DIR=/grid/vol/0/var/run/${USER}
    3. # Where log files are stored. /var/log/hadoop-${USER} by default.
    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)。単一サーバでの検証では、あまりにもリソースが少ないとジョブが実行できない場合がありますので、メモリリソースは多めに設定しておきます。
    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.     <property>
    47.         <name>yarn.application.classpath</name>
    48.         <value>
    49.            $HADOOP_CONF_DIR,
    50.            $HADOOP_COMMON_HOME/*,$HADOOP_COMMON_HOME/lib/*,
    51.            $HADOOP_HDFS_HOME/*,$HADOOP_HDFS_HOME/lib/*,
    52.            $HADOOP_MAPRED_HOME/*,$HADOOP_MAPRED_HOME/lib/*,
    53.            $HADOOP_YARN_HOME/*,$HADOOP_YARN_HOME/lib/*
    54.         </value>
    55.         <description>Classpath for typical applications.</description>
    56.     </property>
    57. <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 で環境変数を設定するようになりましたが、HDP2.xでも同様の設定が可能です。
    1. # The directory where pid files are stored. /var/run/hadoop-mapreduce by default.
    2. #export HADOOP_MAPRED_PID_DIR=/grid/vol/0/var/run/${USER}
    3. # Where log files are stored. /var/log/hadoop-mapreduce by default.
    4. export HADOOP_MAPRED_LOG_DIR=/grid/vol/0/var/log/${USER}
    1. なお、デフォルト環境設定は以下のとおりですが、設定ファイルが分散してしまいますのでこのファイルは直接編集しない方がよいでしょう。
      $ 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.     <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.pngYARNにおける staging ディレクトリの設定は、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 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-2.1.0.2.0.5.0-67.jar pi 5 10
     or
    $ sudo -u alice yarn jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples-2.1.0.2.0.5.0-67.jar pi 5 10
    ...
    1. 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クラスタを構築するロールです。
  • HDPでクラスタ構築する場合には新規のロールを定義し、以下の要領で run_list に yum-hdp およびこの hadoop-pleiades ロールを追加した上で、node['hadoop']['install_flavor'] 属性でディストリビューションを切り替え、必要に応じて他の属性を設定します。なお、実際に構築を行う hadoop::hdp レシピは、RPMパッケージを用いてHDPのインストールを行います。HDPでは、alternativesシステムで設定ファイルセットを切り替えますので、node['hadoop']['hdp']['alternatives']['hadoop-conf'] も適切に設定します。
    1. name 'test-hdp'
    2. description 'Testing Hortonworks Data Platform.'
    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-hdp]',
    13.   'role[hadoop-pleiades]',
    14.   #'role[hadoop-pleiades-with-security]',
    15. )
    16.  
    17. # (...)
    18.  
    19. default_attributes(
    20.   'hdp' => {
    21.     'version' => '2.0.5.0',
    22.     #'version' => '1.2.3.1',
    23.   },
    24.   'hadoop' => {
    25.     'install_flavor' => 'hdp',
    26.     'hdp' => {
    27.       'alternatives' => {
    28.         'hadoop-conf' => {
    29.           'path' => '/etc/hadoop/conf.pleiades',
    30.           'priority' => '40'
    31.         }
    32.       }
    33.     },
    34.     'HADOOP_CLASSPATH' => '',
    35.     'HADOOP_USER_CLASSPATH_FIRST' => 'false',
    36.     # for 2.0.x only
    37.     'container-executor' => {
    38.       'min.user.id' => '500'
    39.     },
    40.     #'yarn.nodemanager.linux-container-executor.resources-handler.class' \
    41.     #  => 'org.apache.hadoop.yarn.server.nodemanager.util.CgroupsLCEResourcesHandler',
    42.     },
    43.   }
    44. )

LDAP認可環境

  1. Hadoopでは協調動作する全ノードで統一的に権限認可(主にグループ解決)を管理する必要がありますので、Name Service Switch (NSS) のバックエンドデータベースとして一般的なLDAPを構築するとよいでしょう。
  2. HDP2.xでも 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/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. /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
  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. HDP2.0 2.0.5.0 (Beta)

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-10-24 (木) 22:06:16 (1639d)