[[Hadoopセットアップ]] >

&ref(images/note.png,nolink);&color(red){''DEPRECATED!: このバージョンのHadoopはすでに古いものです。ご利用は非推奨です。''};[[HDP2.0セットアップ]]をご参照ください。

&ref(images/info.png,nolink);これは、HDP2.0 alpha (Hortonworks Data Platform) の&color(green){''最新版''};のセットアップ手順です。検証した内容を記述しておりますが、詳細かつ正確な情報については、[[Hortonworks>http://hortonworks.com/]]のホームページをご参照ください。

* 目次 [#r40d04d3]
#contents

* 他のバージョンのセットアップ [#bffbf73d]

+ [[HDP1.2>HDP1.2セットアップ]]
// - &color(red){''DEPRECATED''};

* 構成の概要 [#f15d4d73]

- CDH4では従来型のMapReduce実行環境(JobTracker、TaskTracker)をセットアップすることも可能ですが、HDP2.0ではドキュメント等に言及がなく不明です。以下では次世代のYARN(Yet Another Resource Negotiator)環境をセットアップします。
- こちらの[[推奨ディレクトリ構成例>推奨ディレクトリ構成forHadoop2.0]]で構築します。

* 疑似分散モード(シングルノード) [#s92f61f4]

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

&color(red){HDPの設定ディレクトリは、''/etc/hadoop/conf/'' です。};

** Chefレシピ [#mcabc4f3]

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

- &ref(images/cake.png,nolink);[[grid-chef-repo:/roles]]/''hadoop-pseudo-distributed.rb'': これはデフォルトでは、Apache版のHadoopクラスタを構築するロールです。
-- &ref(images/cake.png,nolink);[[grid-chef-repo:/roles]]/''test-hdp-on-localhost.rb'': HDPでクラスタ構築する場合には、このロールのように run_list に ''yum-hdp'' および ''hadoop-pseudo-distributed'' ロールを追加した上で、''node['hadoop']['install_flavor']'' 属性でディストリビューションを切り替え、必要に応じて他の属性を設定します。なお、実際に構築を行う ''hadoop::hdp'' レシピは、RPMパッケージを用いてHDPのインストールを行います。
#geshi(ruby,number){{
name 'test-hdp-on-localhost'
description 'Testing Hortonworks Data Platform on local machine'

run_list(
  'role[node_commons]',
  'role[chef_utils]',
  #'role[nameservice-client]',
  'role[ganglia-gmond-ucast-localhost]',
  'role[ganglia-gmetad-localhost]',
  'role[ganglia-web]',
  'role[nagios]',
  'role[yum-hdp]',
  'role[hadoop-pseudo-distributed]',
  #'role[hadoop-pseudo-distributed-with-security]',
)

# (...)

default_attributes(
  'hdp' => {
    'version' => '2.0.0.2',
    #'version' => '1.2.3.1',
  },
  'hadoop' => {
    'install_flavor' => 'hdp',
    'HADOOP_CLASSPATH' => '',
    'HADOOP_USER_CLASSPATH_FIRST' => 'false',
    # for 2.0.x only
    'container-executor' => {
      'min.user.id' => '500'
    },
    #'yarn.nodemanager.linux-container-executor.resources-handler.class' \
    #  => 'org.apache.hadoop.yarn.server.nodemanager.util.CgroupsLCEResourcesHandler',
    },
  }
)
}}

** ホスト名 [#e9ddbafa]

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

** LDAP認可環境 [#e4d1df4d]

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

** 共通 [#f8221391]

+ &ref(images/note.png,nolink);Oracle JDKはインストールされている前提です。
+ HDP2.0のリポジトリを追加します。
#geshi{{
$ sudo wget http://public-repo-1.hortonworks.com/HDP-2.0.0.2/repos/centos6/hdp.repo -O /etc/yum.repos.d/hdp.repo

$ yum repolist
...
repo id             repo name                                                      status
HDP-2.0.0.2         Hortonworks Data Platform Version - HDP-2.0.0.2                   48
HDP-UTILS-1.1.0.15  Hortonworks Data Platform Utils Version - HDP-UTILS-1.1.0.15      52
base                CentOS-6 - Base                                                6,381
extras              CentOS-6 - Extras                                                 12
updates             CentOS-6 - Updates                                               458
repolist: 6,951
}}
+ ノード毎に必要なデーモンパッケージ(疑似分散の場合には全て)をインストールします。
 $ sudo yum install hadoop-{hdfs-{namenode,secondarynamenode,datanode},yarn-{resourcemanager,nodemanager},mapreduce-historyserver}
++ hdfs、yarn、mapredユーザおよびhadoopグループが自動で追加されます。 
#geshi{{
$ 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)
}}
++ インストール時に各デーモンの自動起動が有効になっていますので、もし運用上、支障があれば無効にします。
#geshi{{
$ 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
}}
++ ''ネイティブライブラリ''は hadoop パッケージ(HDP1.2では hadoop-native)で、''jsvc'' は依存関係にある bigtop-jsvc パッケージで、''container-executor'' バイナリは hadoop-yarn パッケージ(以上の2バイナリは、HDP1.2では hadoop-sbin)でそれぞれインストールされます。
#geshi{{
$ 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
}}
+ ''alternatives''システムを利用して設定セットを管理します。以下の例では、conf.localhost 設定セットを作成し、有効にしています。
#geshi{{
$ 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'' パッケージを利用することも可能ですが、カスタマイズの都合上、この説明では一から設定していきます。
#geshi{{
$ 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
}}
+ /etc/hadoop/conf/''hadoop-env.sh'' を作成し、環境にあわせて以下のような内容を追加します。''$HADOOP_PID_DIR'' はデフォルト(/var/run/hadoop-${USER})のままで良いでしょう。
#geshi(bash,number){{
export JAVA_HOME=/usr/java/default
# The directory where pid files are stored. /var/run/hadoop-${USER} by default.
#export HADOOP_PID_DIR=/grid/vol/0/var/run/${USER}
# Where log files are stored. /var/log/hadoop-${USER} by default.
export HADOOP_LOG_DIR=/grid/vol/0/var/log/${USER}

# Note: Secure DataNode settings are N/A -> /etc/default/hadoop-hdfs-datanode
#export HADOOP_SECURE_DN_USER=hdfs
#export HADOOP_SECURE_DN_PID_DIR=/var/run/hadoop-hdfs
#export HADOOP_SECURE_DN_LOG_DIR=/grid/vol/0/var/log/${HADOOP_SECURE_DN_USER}
}}
++ &ref(images/info.png,nolink);なお、デフォルト設定は以下のとおりです。
#geshi{{
$ 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
}}
+ データなどを格納するディレクトリを用意します。
#geshi{{
$ 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
}}
+ 設定ファイル /etc/hadoop/conf/''core-site.xml'' を編集します。文字通り''一時作業領域''という意味で hadoop.tmp.dir 設定は重要ですので、デフォルト設定を維持しつつ、以下のセットアップでは永続化が必要となるデータの格納領域を明示的に設定変更していきます。
#geshi(xml,number){{
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000/</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/tmp/hadoop-${user.name}</value>
    </property>
</configuration>
}}
++ &ref(images/note.png,nolink);ポート''9000''番は、環境によっては ''php5-fpm'' でデフォルトで利用されるようです。ご注意ください。

*** オプションのネイティブライブラリ [#lcaa1055]

+ libhdfs は、''hadoop-libhdfs'' パッケージでインストールします。
#geshi{{
$ sudo yum install hadoop-libhdfs
$ rpm -ql hadoop-libhdfs
/usr/include/hdfs.h
/usr/lib64/libhdfs.so
/usr/lib64/libhdfs.so.0.0.0
}}
+ LZOライブラリは、''hadoop-lzo-native'' および ''hadoop-lzo'' パッケージでインストールします。
#geshi{{
$ 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 [#me5182b1]

+ &ref(images/info.png,nolink);特に編集する必要はありませんが、デフォルト環境設定は以下のとおりです。
#geshi{{
$ 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
}}
#geshi{{
$ 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
}}
#geshi{{
$ 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
}}
+ 設定ファイル(/etc/hadoop/conf/''hdfs-site.xml'')を編集します。
//&ref(images/info.png,nolink);HDP2.0では、HDFSの高可用性機構として新たに QuorumJournalManager が追加されましたが、デフォルトでは従来型の FileJournalManager が使用されます。
#geshi(xml,number){{
<configuration>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:///grid/vol/0/var/lib/${user.name}/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:///grid/vol/0/var/lib/${user.name}/data</value>
    </property>
    <property>
        <name>dfs.namenode.checkpoint.dir</name>
        <value>file:///grid/vol/0/var/lib/${user.name}/checkpoint</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</copnfiguratiot>
</configuration>
}}
+ HDFSをフォーマットします。
 $ sudo -u hdfs hdfs namenode -format
+ 各デーモンを起動します。
 $ sudo service hadoop-hdfs-namenode start
 $ sudo service hadoop-hdfs-secondarynamenode start
 $ sudo service hadoop-hdfs-datanode start
+ HDFS上に必要なディレクトリを作成します。クォータ管理できないため、''/tmp'' は作成しません。
#geshi{{
$ 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
}}
+ Web UIのアクセスURLは以下の通りです。
 http://localhost:50070/

** YARN [#vcd5c4b4]

+ 環境変数を設定します(/etc/hadoop/conf/''yarn-env.sh'')。以下のような内容をファイルの先頭に追加します。''$YARN_PID_DIR'' はデフォルト(/var/run/hadoop-yarn および /var/run/hadoop-mapreduce)のままで良いでしょう。
#geshi(bash,number){{
# The directory where pid files are stored. /var/run/hadoop-${USER} by default.
#export YARN_PID_DIR=/grid/vol/0/var/run/${USER}
# Where log files are stored. /var/log/hadoop-${USER} by default.
export YARN_LOG_DIR=/grid/vol/0/var/log/${USER}
...
}}
++ &ref(images/info.png,nolink);なお、デフォルト環境設定は以下のとおりです。
#geshi{{
$ 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
}}
#geshi{{
$ 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
}}
+ 設定ファイルを用意します(/etc/hadoop/conf/''yarn-site.xml'')。単一サーバでの検証では、あまりにもリソースが少ないとジョブが実行できない場合がありますので、メモリリソースは多めに設定しておきます。
#geshi(xml,number){{
<configuration>
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.class</name>
        <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
        <description>In case you do not want to use the default scheduler</description>
    </property>
    <property>
        <name>yarn.nodemanager.local-dirs</name>
        <value>/grid/vol/0/var/lib/${user.name}/nm/local</value>
        <description>the local directories used by the nodemanager
        (default: /tmp/nm-local-dir)</description>
    </property>
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>8192</value>
        <description>Amount of physical memory, in MB, that can be allocated
        for containers. (default: 8192)</description>
    </property>
    <property>
        <name>yarn.nodemanager.resource.cpu-cores</name>
        <value>8</value>
        <description>Number of CPU cores that can be allocated
        for containers. (default: 8)</description>
    </property>
    <property>
        <name>yarn.nodemanager.remote-app-log-dir</name>
        <value>/grid/vol/0/var/log/${user.name}/nm</value>
        <description>directory on hdfs where the application logs are moved to
        (default: /tmp/logs)</description>
    </property>
    <property>
        <name>yarn.nodemanager.log-dirs</name>
        <value>/grid/vol/0/var/log/${user.name}/nm</value>
        <description>the directories used by Nodemanagers as log directories
        (default: /tmp/logs)</description>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce.shuffle</value>
        <description>shuffle service that needs to be set for Map Reduce to run</description>
    </property>
    <property>
        <name>yarn.application.classpath</name>
        <value>
           $HADOOP_CONF_DIR,
           $HADOOP_COMMON_HOME/*,$HADOOP_COMMON_HOME/lib/*,
           $HADOOP_HDFS_HOME/*,$HADOOP_HDFS_HOME/lib/*,
           $HADOOP_MAPRED_HOME/*,$HADOOP_MAPRED_HOME/lib/*,
           $HADOOP_YARN_HOME/*,$HADOOP_YARN_HOME/lib/*
        </value>
        <description>Classpath for typical applications.</description>
    </property>
<configuration>
}}
+ ローカルファイルシステム上に必要なディレクトリを作成します。
#geshi{{
$ 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
}}
+ HDFS上に必要なディレクトリを作成します。ログアグリゲーション有効時に、''yarn.nodemanager.remote-app-log-dir'' にユーザ権限でログが移されます。
#geshi{{
$ 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
}}
+ CapacitySchedulerの設定ファイル(/etc/hadoop/conf/''capacity-scheduler.xml'')が用意されていませんので、Apache Hadoop 2.0.x 等から入手して適宜編集します。
+ 各デーモンを起動します。
 $ sudo service hadoop-yarn-resourcemanager start
 $ sudo service hadoop-yarn-nodemanager start
+ Web UIのアクセスURLは以下の通りです。
 http://localhost:8088/    # ResourceManager
 http://localhost:8042/    # NodeManager

** MapReduce [#l3255877]

+ &ref(images/info.png,nolink);Apache Hadoopでは、2.0.2 から /etc/hadoop/conf/''mapred-env.sh'' で環境変数を設定するようになりましたが、HDP2.0でも同様の設定が可能です。
#geshi(bash,number){{
# The directory where pid files are stored. /var/run/hadoop-mapreduce by default.
#export HADOOP_MAPRED_PID_DIR=/grid/vol/0/var/run/${USER}
# Where log files are stored. /var/log/hadoop-mapreduce by default.
export HADOOP_MAPRED_LOG_DIR=/grid/vol/0/var/log/${USER}
}}
++ なお、デフォルト環境設定は以下のとおりですが、設定ファイルが分散してしまいますのでこのファイルは直接編集しない方がよいでしょう。
#geshi{{
$ 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
}}
+ 設定ファイル(/etc/hadoop/conf/''mapred-site.xml'')を編集します。
#geshi(xml,number){{
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
        <description>The runtime framework for executing MapReduce jobs.
        Can be one of local, classic or yarn.
        (default: local)
        </description>
    </property>
    <property>
        <name>yarn.app.mapreduce.am.staging-dir</name>
        <value>/user</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.intermediate-done-dir</name>
        <value>/grid/vol/0/var/lib/mapred/history/done_intermediate</value>
        <!-- NG: <value>/user</value> -->
    </property>
    <property>
        <name>mapreduce.jobhistory.done-dir</name>
        <value>/grid/vol/0/var/lib/mapred/history/done</value>
    </property>
</configuration>
}}
++ &ref(images/info.png,nolink);YARNにおける staging ディレクトリの設定は、''yarn.app.mapreduce.am.staging-dir'' で行います。なお、他の関連設定のデフォルト値は以下のようです。
|~No.|~設定キー|~デフォルト値|~備考|
|1|yarn.app.mapreduce.am.staging-dir|/tmp/hadoop-yarn/staging||
|2|mapreduce.jobhistory.intermediate-done-dir|${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate|mapred-default.xml に見えず|
|3|mapreduce.jobhistory.done-dir|${yarn.app.mapreduce.am.staging-dir}/history/done|mapred-default.xml に見えず|
+ ローカルファイルシステム上に必要なディレクトリはありません。
+ HDFS上に必要なディレクトリを作成します。
#geshi{{
$ 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
}}
+ ResouceManager と NodeManager を再起動して反映させます。
+ 履歴サーバを起動します。
 $ sudo service hadoop-mapreduce-historyserver start
+ 履歴サーバWeb UIのアクセスURLは以下の通りです。
 http://localhost:19888/

** テスト [#z0b5ef99]

+ テストユーザを追加し、サンプルジョブを実行してみます。
#geshi(){{
$ 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.0.3.22-alpha.jar pi 5 10
 or
$ sudo -u alice yarn jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples-2.0.3.22-alpha.jar pi 5 10
...
}}
++ YARNの導入によりMapReduceフレームワークはユーザスペースに移行していますので、PigやHiveを利用する場合には、ユーザが ''$HADOOP_MAPRED_HOME'' を適切に設定する必要があります。
 $ export HADOOP_MAPRED_HOME=/usr/lib/hadoop-mapreduce

* 完全分散モード [#l151f0bd]

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

** Chefレシピ [#w7b8ced5]

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

- &ref(images/cake.png,nolink);[[grid-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']'' も適切に設定します。
#geshi(ruby,number){{
name 'test-hdp'
description 'Testing Hortonworks Data Platform.'

run_list(
  'role[node_commons]',
  'role[chef_utils]',
  #'role[nameservice-client]',
  'role[ganglia-gmond-ucast-localhost]',
  'role[ganglia-gmetad-localhost]',
  'role[ganglia-web]',
  'role[nagios]',
  'role[yum-hdp]',
  'role[hadoop-pleiades]',
  #'role[hadoop-pleiades-with-security]',
)

# (...)

default_attributes(
  'hdp' => {
    'version' => '2.0.0.2',
    #'version' => '1.2.3.1',
  },
  'hadoop' => {
    'install_flavor' => 'hdp',
    'hdp' => {
      'alternatives' => {
        'hadoop-conf' => {
          'path' => '/etc/hadoop/conf.pleiades',
          'priority' => '40'
        }
      }
    },
    'HADOOP_CLASSPATH' => '',
    'HADOOP_USER_CLASSPATH_FIRST' => 'false',
    # for 2.0.x only
    'container-executor' => {
      'min.user.id' => '500'
    },
    #'yarn.nodemanager.linux-container-executor.resources-handler.class' \
    #  => 'org.apache.hadoop.yarn.server.nodemanager.util.CgroupsLCEResourcesHandler',
    },
  }
)
}}

** LDAP認可環境 [#jd3a9123]

+ Hadoopでは協調動作する全ノードで統一的に権限認可(主にグループ解決)を管理する必要がありますので、Name Service Switch (NSS) のバックエンドデータベースとして一般的なLDAPを構築するとよいでしょう。
+ HDP2.0でも ''hadoop.security.group.mapping'' に設定する GroupMappingServiceProvider として LdapGroupsMapping が追加されていますが、最終的にユーザ権限でTaskプロセスを起動させる関係上、権限解決はOSレベルに統一して委譲するのが効果的です。そのような点で、''JniBasedUnixGroupsMapping'' を使用するのが運用、パフォーマンス両面で最も効果的です。
+ 基本的なLDAP環境の構築方法については、[[LDAPセットアップforHadoop]]をご参照ください。
+ Hadoop起動ユーザのためのldifファイル(例: [[hadoop_users-2.0.ldif>metasearchSvn:/ldap4hadoop/trunk/ldif/hadoop_users-2.0.ldif]])を作成し、それらのユーザを追加します。&ref(images/note.png,nolink);もし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"
 
+ テストユーザのためのldifファイル(例: [[test_users.ldif>metasearchSvn:/ldap4hadoop/trunk/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"

** 分散監視環境 [#t5b47e36]

+ [[Ganglia>GangliaセットアップforHadoop]]
+ [[Nagios>NagiosセットアップforHadoop]]

** 基本設定 [#y0b20d20]

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

** チェックポイントデータの冗長保存 [#g98105ee]

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

** HDFSメタデータの冗長保存 [#tbb8e0c4]

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

//** ジョブ実行履歴の永続化


** 並列化の徹底 [#g6c318cb]

+ 以下の例では、/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
+ /etc/hadoop/conf/''hdfs-site.xml'': 当然ながら、レプリカ数も推奨値の''3''にします。
#geshi(xml,number){{
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:///grid/vol/0/var/lib/${user.name}/data,file:///grid/vol/1/var/lib/${user.name}/data</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
}}
+ /etc/hadoop/conf/''yarn-site.xml''
#geshi(xml,number){{
    <property>
        <name>yarn.nodemanager.local-dirs</name>
        <value>/grid/vol/0/var/lib/${user.name}/nm/local,/grid/vol/1/var/lib/${user.name}/nm/local</value>
        <description>the local directories used by the nodemanager
        (default: /tmp/nm-local-dir)</description>
    </property>
    <property>
        <name>yarn.nodemanager.log-dirs</name>
        <value>/grid/vol/0/var/log/${user.name}/nm,/grid/vol/1/var/log/${user.name}/nm</value>
        <description>the directories used by Nodemanagers as log directories
        (default: /tmp/logs)</description>
    </property>
}}

** ノード管理の徹底 [#s11626b5]

+ /etc/hadoop/conf/''hdfs-site.xml''
#geshi(xml,number){{
    <property>
        <name>dfs.hosts</name>
        <value>/etc/hadoop/conf/hosts.include</value>
        <description>
          Names a file that contains a list of hosts that are permitted to connect to the namenode.
          The full pathname of the file must be specified. If the value is empty, all hosts are permitted.
        </description>
    </property>
    <property>
        <name>dfs.hosts.exclude</name>
        <value>/etc/hadoop/conf/hosts.exclude</value>
        <description>
          Names a file that contains a list of hosts that are not permitted to connect to the namenode.
          The full pathname of the file must be specified. If the value is empty, no hosts are excluded.
        </description>
    </property>
}}
+ /etc/hadoop/conf/''yarn-site.xml''
#geshi(xml,number){{
    <property>
        <name>yarn.resourcemanager.nodes.include-path</name>
        <value>/etc/hadoop/conf/hosts.include</value>
        <description>Path to file with nodes to include.</description>
    </property>
    <property>
        <name>yarn.resourcemanager.nodes.exclude-path</name>
        <value>/etc/hadoop/conf/hosts.exclude</value>
        <description>Path to file with nodes to exclude.</description>
    </property>
}}

** セキュア設定の有効化 [#d39174b1]

- [[HDP2.0alphaWithSecurityセットアップ]]

* 参考リソース [#bf81bb2e]

+ [[設定ファイル一式>metasearchSvn:/hadoop_conf/branches/localhost-hdp2.0/]]
+ [[HDP 2.0.0.2 (Alpha)>http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.0.0.2/index.html]]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS