hadoop 環境設定

hadoop 環境設定

# 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
Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy