#
Hadoop の環境設定
hadoop-2.0.0-alpha の環境設定を行ったのでメモする。
参考サイト:
Hadoop2.0セットアップ
mass00 に hadoop の設定を行った。hadoop のデータは mass00 の $HOME/share にいれてある。よって、他のクラスタからも $HOME/share よりアクセスできる。
mass00 以外のクラスタに datanode の設定を行いたい場合は以下のページを参照
~[hadoop 環境設定(datanode)]
#
ソースのダウンロード
hadoopの公式サイトを辿って Release 版をゲット(最初は svn から trunk をとってきたがコンパイルに失敗して断念)
hadoop Releaseから hadoop-2.0.0-alpha の binary を取得。
1
2
3
4
5
|
mkdir $HOME/share/hadoop
cd $HOME/share/hadoop
wget http://www.fightrice.com/mirrors/apache/hadoop/common/hadoop-2.0.0-alpha/hadoop-2.0.0-alpha.tar.gz
tar zxvf hadoop-2.0.0-alpha.tar.gz
cd hadoop-2.0.0-alpha
|
次から ${HADOOP_PREFIX} と表記する場合は、 $HOME/share/hadoop/hadoop-2.0.0-alph を指す。
#
設定
参考サイトでは hadoop, hdfs, yarn, mapred ごとにユーザを作成していたが今回は全て同じユーザで行う(massユーザ)。
#
共通
${HADOOP_PREFIX}/etc/hadoop/core-site.xml の編集
1
2
3
4
5
6
7
8
9
10
|
<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>
|
(上の表記では localhost となっている部分は mass00 の address になっている。)
次に、データの格納を行うディレクトリを用意する。
1
2
3
4
5
6
|
$ sudo mkdir /var/local/hadoop
$ sudo mkdir /var/local/hadoop/cache
$ sudo mkdir /var/local/hadoop/log
$ sudo mkdir /var/local/hadoop/run
$ sudo chown -R mass:mass /var/local/hadoop
$ sudo chmod -R 775 /var/local/hadoop
|
#
HDFS
環境変数の設定。${HADOOP_PREFIX}/etc/hadoop/hadoop-env.sh を作成する。
~(./share/hadoop/common/templates/conf/hadoop-env.sh にテンプレっぽいのがあったけど気にしない)
1
2
3
4
5
6
7
8
9
|
cat etc/hadoop/hadoop-env.sh
#export JAVA_HOME=/usr/lib/jvm/java-6-sun
#export JAVA_HOME=/usr/lib/jvm/java-6-openjdk
#export JAVA_HOME=/usr/lib/jvm/java-6-openjdk-i386
export JAVA_HOME=/usr/lib/jvm/jre-1.6.0-openjdk.x86_64
# The directory where pid files are stored. /tmp by default.
export HADOOP_PID_DIR=/tmp
# Where log files are stored. $HADOOP_PREFIX/logs by default.
export HADOOP_LOG_DIR=/var/local/hadoop/log
|
JAVA_HOME は以下の様にして求めた。
1
2
3
4
|
% ls -la /usr/bin/java
lrwxrwxrwx 1 root 22 5月 19 2011 /usr/bin/java -> /etc/alternatives/java
% ls -la /etc/alternatives/java
lrwxrwxrwx 1 root 46 5月 19 2011 /etc/alternatives/java -> /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java
|
設定ファイル(${HADOOP_PREFIX}/etc/hadoop/hdfs-site.xml )のの編集を行う。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///var/local/hadoop/cache/${user.name}/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///var/local/hadoop/cache/${user.name}/dfs/data</value>
</property>
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>file:///var/local/hadoop/cache/${user.name}/dfs/namesecondary</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
|
HDFS をフォーマットする。
1
|
./bin/hdfs namenode -format
|
各デーモンの起動を行う。
1
2
3
|
./sbin/hadoop-daemon.sh start namenode
./sbin/hadoop-daemon.sh start secondarynamenode
./sbin/hadoop-daemon.sh start datanode
|
HDFS 上に必要なディレクトリの作成を行う。
1
2
3
4
5
6
7
8
|
./bin/hadoop fs -chown mass:mass /
./bin/hadoop fs -chmod 755 /
./bin/hadoop fs -mkdir /tmp
./bin/hadoop fs -chown mass:mass /tmp
./bin/hadoop fs -chmod 1777 /tmp
./bin/hadoop fs -mkdir /user
./bin/hadoop fs -chown mass:mass /user
./bin/hadoop fs -chmod 755 /user
|
#
YARN
環境変数を設定する(${HADOOP_PREFIX}/etc/hadoop/yarn-env.sh)。以下の内容を加える。
1
2
3
4
5
6
7
8
9
10
11
|
export JAVA_HOME=/usr/lib/jvm/jre-1.6.0-openjdk.x86_64
export HADOOP_PREFIX=/home/mass/share/hadoop/hadoop-2.0.0-alpha
export HADOOP_COMMON_HOME=${HADOOP_PREFIX}
export HADOOP_HDFS_HOME=${HADOOP_PREFIX}
export YARN_HOME=${HADOOP_PREFIX}
export YARN_PID_DIR=/var/local/hadoop/run/$USER
export YARN_LOG_DIR=/var/local/hadoop/log/$USER
export HADOOP_MAPRED_HOME=${HADOOP_PREFIX}
|
設定ファイルの用意(${HADOOP_PREFIX/etc/hadoop/yarn-site.xml})。参考サイトの設定そのまま
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
<configuration>
<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>/var/local/hadoop/cache/${user.name}/nm/local</value>
<description>the local directories used by the nodemanager
(default: /tmp/nm-local-dir)</description>
</property>
<!--
<property>
<name>yarn.nodemanager.address</name>
<value>0.0.0.0:0</value>
<description>the nodemanagers bind to this port</description>
</property>
-->
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>8192</value>
<description>the amount of memory on the NodeManager in GB
(default: 8192)</description>
</property>
<property>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>/var/local/hadoop/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>/var/local/hadoop/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>mapreduce.job.hdfs-servers</name>
<value>${fs.defaultFS}</value>
</property>
<configuration>
|
ローカルファイルシステム上とHDFSに必要なディテクトリの作成。
1
2
3
4
5
6
7
8
9
10
|
mkdir -p /var/local/hadoop/log/yarn/nm # yarn.nodemanager.log-dirs
chown mass:mass /var/local/hadoop/log/yarn
chown mass:mass /var/local/hadoop/log/yarn/nm
chmod 755 /var/local/hadoop/log/yarn/nm
mkdir -p /var/local/hadoop/log/yarn/nm/local # yarn.nodemanager.local-dirs
chown mass:mass /var/local/hadoop/log/yarn/nm/local
chmod 755 /var/local/hadoop/log/yarn/nm/local
./bin/hadoop fs -mkdir /var/local/hadoop/log/yarn/nm # yarn.nodemanager.remote-app-log-dir
./bin/hadoop fs -chown mass:mass /var/local/hadoop/log/yarn/nm
./bin/hadoop fs -chmod 1777 /var/local/hadoop/log/yarn/nm
|
デーモンの起動
1
2
|
./sbin/yarn-daemon.sh start resourcemanager
./sbin/yarn-daemon.sh start nodemanager
|
デーモンが起動したら mass00 のport 8088 と 8042 にアクセスすることで Web UI のアクセスができる。
1
2
|
http://mass00のaddress:8088
http://mass00のaddress:8042
|
#
MapReduce
設定ファイルの編集(${HADOOP_PREFIX}/etc/hadoop/mapred-site.xml) を作成。テンプレが share 以下にあったけど気にしない。
タグ内を以下の様に作成。参考サイトそのまま
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
<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>mapreduce.cluster.local.dir</name>
<value>/var/local/hadoop/cache/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.jobtracker.system.dir</name>
<value>/var/local/hadoop/cache/mapred/system</value>
<description>The directory where MapReduce stores control files.
(default: ${hadoop.tmp.dir}/mapred/system on HDFS)
</description>
</property>
<property>
<name>yarn.app.mapreduce.am.staging-dir</name>
<value>/user</value>
</property>
<!--
<property>
<name>mapreduce.jobtracker.staging.root.dir</name>
<value>/user</value>
<description>The root of the staging area for users' job files
In practice, this should be the directory where users' home
directories are located (usually /user)
(default: ${hadoop.tmp.dir}/mapred/staging on HDFS)
</description>
</property>
-->
<property>
<name>mapreduce.cluster.temp.dir</name>
<value>/var/local/hadoop/cache/mapred/temp</value>
<description>A shared directory for temporary files.
(default: ${hadoop.tmp.dir}/mapred/temp on LOCAL)
</description>
</property>
<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>/var/local/hadoop/mapred/history/intermediate_done</value>
</property>
<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>/var/local/hadoop/mapred/history/done</value>
</property>
</configuration>
|
HDFS 上に必要なディテクトリを作成する
1
2
3
|
./bin/hadoop fs -mkdir /var/local/hadoop/mapred/history
./bin/hadoop fs -chown -R mass:mass /var/local/hadoop/mapred
./bin/hadoop fs -chmod -R 755 /var/local/hadoop/mapred
|
履歴サーバの起動
1
|
./sbin/mr-jobhistory-daemon.sh start historyserver
|
履歴サーバのWeb UI は port 19888 でアクセスできる。
1
|
http://mass00のaddress:19888
|
サンプルジョブによるテスト。
1
2
3
|
./bin/hadoop fs -mkdir /user/mass
./bin/hadoop fs -chown mass:mass /user/mass
./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.0.0-alpha.jar pi 5 10
|