CDH > CDH4セットアップ >
DEPRECATED!: このバージョンのCDHはすでに古いです。ご利用は非推奨です。 CDH4セットアップ をご参照ください。
目次 †
他のバージョンのセットアップ †
CDH3 - DEPRECATED
構成の概要 †
疑似分散モード(シングルノード) †
YARN(次世代MapReduce? )最新版をセットアップします。
ローカルモードではなく、1機で分散処理環境を起動させます。以下のインスタンスを起動します。
HDFS
プライマリNameNode
セカンダリNameNode
DataNode
YARN
ResourceManager?
NodeManager?
MapReduce?
JobHistoryServer?
CDHの設定ディレクトリは、/etc/hadoop/conf/ です。
Chefレシピ †
参考までに、これはここで説明している疑似分散環境を構築するChef レシピ(ロール)です。
grid-chef-repo:/roles /hadoop-pseudo-distributed.rb : これはデフォルトでは、Apache版のHadoopクラスタを構築するロールです。
grid-chef-repo:/roles /test-cdh-on-localhost.rb : CDHでクラスタ構築する場合には、このロールのように run_list に yum-cdh および hadoop-pseudo-distributed ロールを追加した上で、node['hadoop']['install_flavor'] 属性でディストリビューションを切り替え、必要に応じて他の属性を設定します。なお、実際に構築を行う hadoop::cdh レシピは、RPMパッケージを用いてCDHのインストールを行います。
name 'test-cdh-on-localhost'
description 'Testing Cloudera\' s Distribution, including Apache Hadoop 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-cdh]' ,
'role[hadoop-pseudo-distributed]' ,
#'role[hadoop-pseudo-distributed-with-security]',
)
# (...)
default_attributes(
'cdh' => {
'version' => '4.2.0' ,
#'version' => '3u6',
} ,
'hadoop' => {
'install_flavor' => 'cdh' ,
'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',
} ,
}
)
ホスト名 †
Hadoopの各デーモンは起動時に自ホストの名前を参照しますので、疑似分散環境(localhost)で検証する場合には、(必須ではありませんが)一時的に hostname に localhost を設定しておくと無難です。
$ sudo hostname localhost
hosts ファイルも適切に設定してあることを確認します。
$ cat /etc/hosts
127.0.0.1 localhost
192.168.0.10 this.host.example.com
...
LDAP認可環境 †
シングルノードではOSの静的ファイルによる権限解決で十分ですので、特にLDAPなどをセットアップする必要はありません。
共通 †
Oracle JDKはインストールされている前提です。
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
ノード毎に必要なデーモンパッケージ(疑似分散の場合には全て)をインストールします。
$ sudo yum install hadoop-{hdfs-{namenode,secondarynamenode,datanode},yarn-{resourcemanager,nodemanager},mapreduce-historyserver}
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)
インストール時に各デーモンの自動起動が有効になっていますので、もし運用上、支障があれば無効にします。
$ 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 パッケージ(CDH3では hadoop-0.20-native)で、jsvc は依存関係にある bigtop-jsvc パッケージで、container-executor バイナリは hadoop-yarn パッケージ(以上の2バイナリは、CDH3では hadoop-0.20-sbin)でそれぞれインストールされます。
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.
/etc/hadoop/conf/hadoop-env.sh を作成し、環境にあわせて以下のような内容を追加します。$HADOOP_PID_DIR はデフォルト(/var/run/hadoop-hdfs)のままで良いでしょう。$HADOOP_MAPRED_HOME の設定は、hadoop や yarn コマンドでMapReduce? ジョブを実行する場合に必要となります。
# The directory where pid files are stored. /var/run/hadoop-hdfs by default.
#export HADOOP_PID_DIR=/grid/vol/0/var/run/${USER}
# Where log files are stored. /var/log/hadoop-hdfs by default.
# $USER is N/A in the Secure DataNode
#export HADOOP_LOG_DIR=/grid/vol/0/var/log/${USER}
if [ x"$USER" = x'' ] ; then
export HADOOP_LOG_DIR =/ grid/ vol/ 0/ var/ log/ hdfs
else
export HADOOP_LOG_DIR =/ grid/ vol/ 0/ var/ log/ ${USER}
fi
# 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}
export HADOOP_MAPRED_HOME =/ usr/ lib/ hadoop-mapreduce
なお、デフォルト設定は以下のとおりです。
$ 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
データなどを格納するディレクトリを用意します。
$ 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 設定は重要ですので、デフォルト設定を維持しつつ、以下のセットアップでは永続化が必要となるデータの格納領域を明示的に設定変更していきます。
<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>
ポート9000 番は、環境によっては php5-fpm でデフォルトで利用されるようです。ご注意ください。
オプションのネイティブライブラリ †
libhdfs は、hadoop-libhdfs パッケージでインストールします。
$ rpm -ql hadoop-libhdfs
/usr/include/hdfs.h
/usr/lib64/libhdfs.so
/usr/lib64/libhdfs.so.0.0.0
HDFS †
特に編集する必要はありませんが、デフォルト環境設定は以下のとおりです。
$ 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
設定ファイル(/etc/hadoop/conf/hdfs-site.xml )を編集します。
<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>
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 は作成しません。
$ 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 †
環境変数を設定します(/etc/hadoop/conf/yarn-env.sh )。以下のような内容をファイルの先頭に追加します。$YARN_PID_DIR はデフォルト(/var/run/hadoop-yarn および /var/run/hadoop-mapreduce)のままで良いでしょう。
# default: /var/run/hadoop-yarn, /var/run/hadoop-mapreduce
#export YARN_PID_DIR=/grid/vol/0/var/run/${USER}
# default: /var/log/hadoop-yarn, /var/log/hadoop-mapreduce
export YARN_LOG_DIR =/ grid/ vol/ 0/ var/ log/ ${USER}
...
なお、デフォルト環境設定は以下のとおりです。
$ 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
設定ファイルを用意します(/etc/hadoop/conf/yarn-site.xml )。単一サーバでの検証では、あまりにもリソースが少ないとジョブが実行できない場合がありますので、メモリリソースは多めに設定しておきます。 Apache Hadoop 2.0.3aから導入されたCPUコア数のリソース管理機能はCDH4ではまだ提供されていません。
<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/*,
$YARN_HOME/*,$YARN_HOME/lib/*
</value>
<description> Classpath for typical applications.</description>
</property>
<configuration>
ローカルファイルシステム上に必要なディレクトリを作成します。
$ 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 にユーザ権限でログが移されます。
$ 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? †
Apache 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
設定ファイル(/etc/hadoop/conf/mapred-site.xml )を編集します。
<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>
<!-- for MapReduce Ver. 1 only.
<property>
<name>mapreduce.jobtracker.system.dir</name>
<value>/grid/vol/0/var/lib/mapred/system</value>
<description>The directory where MapReduce stores control files.
(default: ${hadoop.tmp.dir}/mapred/system on HDFS)
</description>
</property>
<property>
<name>mapreduce.cluster.local.dir</name>
<value>/grid/vol/0/var/lib/mapred/local</value>
<description>The local directory where MapReduce stores intermediate
data files. May be a comma-separated list of
directories on different devices in order to spread disk i/o.
Directories that do not exist are ignored.
(default: ${hadoop.tmp.dir}/mapred/local on LOCAL)
</description>
</property>
<property>
<name>mapreduce.cluster.temp.dir</name>
<value>/grid/vol/0/tmp/mapred/temp</value>
<description>A shared directory for temporary files.
(default: ${hadoop.tmp.dir}/mapred/temp on 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>
YARNにおける staging ディレクトリの設定は、yarn.app.mapreduce.am.staging-dir で行います。MapReduce? Ver.1 を使用する場合には、従来通り mapreduce.jobtracker.staging.root.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上に必要なディレクトリを作成します。
$ 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/
テスト †
テストユーザを追加し、サンプルジョブを実行してみます。
$ 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
...
すでに /etc/hadoop/conf/hadoop-env.sh にも設定しましたが、YARNの導入によりMapReduce? フレームワークはユーザスペースに移行していますので、PigやHiveを利用する場合には、ユーザが $HADOOP_MAPRED_HOME を適切に設定する必要があります。
$ export HADOOP_MAPRED_HOME=/usr/lib/hadoop-mapreduce
完全分散モード †
完全分散とは、動作モードというよりはむしろ疑似分散ではただ一つのノードで起動させていた各デーモンを、それぞれ適切な複数の別のノード(群)で運用する環境のことです。もちろん、これが本格的な実運用環境となります。
構築方法は基本的に疑似分散の場合と変わりませんが、以下のような勘所があります。
Chefレシピ †
参考までに、これはここで説明している完全分散環境を構築するChef レシピ(ロール)の作成についての解説です。
grid-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'] も適切に設定します。
name 'test-cdh'
description 'Testing Cloudera\' s Distribution, including Apache Hadoop'
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-cdh]' ,
'role[hadoop-pleiades]' ,
#'role[hadoop-pleiades-with-security]',
)
# (...)
default_attributes(
'cdh' => {
'version' => '4.2.0' ,
#'version' => '3u6',
'yum_repo' => {
'with_gplextras' => true
}
} ,
'hadoop' => {
'install_flavor' => 'cdh' ,
'cdh' => {
'alternatives' => {
'hadoop-conf' => {
'path' => '/etc/hadoop/conf.pleiades' ,
'priority' => '40'
}
} ,
'resource_negotiator_framework' => 'YARN' , # CDH4 only.
} ,
'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認可環境 †
Hadoopでは協調動作する全ノードで統一的に権限認可(主にグループ解決)を管理する必要がありますので、Name Service Switch (NSS) のバックエンドデータベースとして一般的なLDAPを構築するとよいでしょう。
CDH4には hadoop.security.group.mapping に設定する GroupMappingServiceProvider? として LdapGroupsMapping? が追加されていますが、最終的にユーザ権限でTaskプロセスを起動させる関係上、権限解決はOSレベルに統一して委譲するのが効果的です。そのような点で、JniBasedUnixGroupsMapping? を使用するのが運用、パフォーマンス両面で最も効果的です。
基本的なLDAP環境の構築方法については、LDAPセットアップforHadoop をご参照ください。
Hadoop起動ユーザのためのldifファイル(例: hadoop_users-2.0.ldif )を作成し、それらのユーザを追加します。 もし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 )を作成し、そのユーザを追加します。
$ 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"
分散監視環境 †
Ganglia
Nagios
基本設定 †
当然ながら、ホスト名はすべて完全修飾名(FQDN)で設定します。
冗長化のためVIPを付与しているサービス(NameNode 、SecondaryNameNode 、ResourceManager? 、JobHistoryServer? など)についてはそのVIPに対するDNS名を設定します。
チェックポイントデータの冗長保存 †
/etc/hadoop/conf/core-site.xml : dfs.namenode.checkpoint.dir に複数の格納先を指定することにより、チェックポイントデータを冗長に保存することが可能になります。
<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メタデータの冗長保存 †
/etc/hadoop/conf/hdfs-site.xml : dfs.namenode.name.dir に複数の格納先を指定することにより、メタデータを冗長に保存することが可能になります。この場合、指定したディレクトリはあらかじめ作成しておく必要があるようです。
<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>
並列化の徹底 †
以下の例では、/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
/etc/hadoop/conf/hdfs-site.xml : 当然ながら、レプリカ数も推奨値の3 にします。
<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
<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>
ノード管理の徹底 †
/etc/hadoop/conf/hdfs-site.xml
<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
<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>
セキュア設定の有効化 †
参考リソース †
設定ファイル一式
CDH4 Documentation