Hadoopの勉強をはじめたので、vagrant
でubuntu 16.04
を立ち上げてHadoop
をインストールしてみた:
インストール概要
各ライブラリのパス
パス | 権限 | 説明 |
---|---|---|
/opt/hadoop-x.y.z |
yarn:hadoop |
Hadoop |
/var/data/hadoop/hdfs/nn |
hdfs:hadoop |
NameNodeディレクトリ |
/var/data/hadoop/hdfs/snn |
hdfs:hadoop |
SecondaryNameNodeディレクトリ |
/var/data/hadoop/hdfs/dn |
hdfs:hadoop |
DataNodeディレクトリ |
/opt/hadoop-x.y.z/logs |
yarn:hadoop |
各サービスのログ |
x.y.z
はバージョンを表す、この記事では2.9.0
となります
環境変数
変数名 | 説明 |
---|---|
JAVA_HOME |
JavaのHomeディレクトリ |
HADOOP_HOME |
HadoopのHomeディレクトリ |
ユーザー・グループ
タイプ | 名前 | 説明 |
---|---|---|
グループ | hadoop | hadoop群 |
ユーザ | yarn | YARNユーザ |
ユーザ | hdfs | HDFSユーザ |
ユーザ | mapred | MapReduceユーザ |
設定ファイル
設定ファイルは/opt/hadoop-2.9.0/etc/hadoop
($HADOOP_HOME/etc/hadoop
)に入っています
パス | 説明 |
---|---|
core-site.xml |
コア設定 |
hdfs-site.xml |
HDFS設定 |
yarn-site.xml |
YARN設定 |
mapred-site.xml |
MapReduce設定 |
環境
基本的にJavaあれば大丈夫って感じです。
Java1.8
下記のコマンドでインストール
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
バージョン確認
java -version
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)
手順
Apache Hadoopをダウンロード
cd ~
wget http://ftp.jaist.ac.jp/pub/apache/hadoop/common/hadoop-2.9.0/hadoop-2.9.0.tar.gz
/opt
に解凍:
cd /opt
sudo tar xvzf ~/hadoop-2.9.0.tar.gz
環境変数JAVA_HOME
とHADOOP_HOME
を設定
/etc/profile.d/java.sh
に下記の行を追加:
export JAVA_HOME=/usr/lib/jvm/java-8-oracle/
/etc/profile.d/hadoop.sh
に下記の行を追加
export HADOOP_HOME=/opt/hadoop-2.9.0
export PATH=$HADOOP_HOME/bin:$PATH
ご自身使用したバージョンに合わせてください
環境変数を有効化する:
source /etc/profile.d/java.sh
source /etc/profile.d/hadoop.sh
ユーザ・グループ作成
sudo groupadd hadoop
sudo useradd -g hadoop yarn
sudo useradd -g hadoop hdfs
sudo useradd -g hadoop mapred
データとLog用のディレクトリを作成
# NameNode用
sudo mkdir -p /var/data/hadoop/hdfs/nn
# SecondaryNameNode用
sudo mkdir -p /var/data/hadoop/hdfs/snn
# DataNode用
sudo mkdir -p /var/data/hadoop/hdfs/dn
sudo chown -R hdfs:hadoop /var/data/hadoop/hdfs
sudo mkdir -p /var/log/hadoop/yarn
sudo chown -R yarn:hadoop /var/log/hadoop/yarn
hadoopディレクトリの権限設定
cd /opt/hadoop-2.9.0
sudo mkdir logs
sudo chmod g+w logs
sudo chown -R yarn:hadoop .
xml設定ファイルを編集
/opt/hadoop-2.9.0/etc/hadoop/core-site.xml
キー | 説明 |
---|---|
fs.default.name |
NameNodeのホスト名とポート |
hadoop.http.staticuser.user |
HDFSユーザ |
中身:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.http.staticuser.user</name>
<value>hdfs</value>
</property>
</configuration>
/opt/hadoop-2.9.0/etc/hadoop/hdfs-site.xml
キー | 説明 |
---|---|
dfs.replication |
レプリケーション |
dfs.namenode.name.dir |
NameNodeのディレクトリ |
fs.checkpoint.dir |
チェックポイントディレクトリ |
fs.checkpoint.edits.dir |
チェックポイント編集履歴ディレクトリ |
dfs.datanode.data.dir |
DataNodeディレクトリ |
中身:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/var/data/hadoop/hdfs/nn</value>
</property>
<property>
<name>fs.checkpoint.dir</name>
<value>file:/var/data/hadoop/hdfs/snn</value>
</property>
<property>
<name>fs.checkpoint.edits.dir</name>
<value>file:/var/data/hadoop/hdfs/snn</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/var/data/hadoop/hdfs/dn</value>
</property>
</configuration>
/opt/hadoop-2.9.0/etc/hadoop/mapred-site.xml
/opt/hadoop-2.9.0/etc/hadoop/mapred-site.xml.template
からコピーして作成:
cd /opt/hadoop-2.9.0/etc/hadoop/
sudo cp mapred-site.xml.template mapred-site.xml
下記のように設定:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>/mr-history/tmp</value>
</property>
<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>/mr-history/done</value>
</property>
</configuration>
/opt/hadoop-2.9.0/etc/hadoop/yarn-site.xml
キー | 説明 |
---|---|
yarn.nodemanager.aux-services |
補助サービス |
yarn.nodemanager.aux-services.mapreduce.shuffle.class |
補助サービスのハンドラ |
中身:
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandle</value>
</property>
</configuration>
HDFS初期化
hdfs
ユーザに切り替えて、hdfs
コマンドを使用:
su -hdfs
cd /opt/hadoop-2.9.0/bin
./hdfs namenode -format
ユーザが
root
じゃない場合はsudo -i
でroot
ユーザになってからsu
してください
すると大量なメッセージが表示されます。
INFO common.Storage: Storage directory /var/data/hadoop/hdfs/nn has been successfully formatted.
というメッセージがあれば初期化完了。ここで、hdfs
ユーザのままでHDFSサービスを起動します。まずはnamenode
:
cd ../sbin
./hadoop-daemon.sh start namenode
starting namenode, logging to /opt/hadoop-2.9.0/logs/hadoop-hdfs-namenode-ubuntu-xenial.out
同じのりで、secondarynamenode
とdatanode
も起動できます:
./hadoop-daemon.sh start secondarynamenode
starting secondarynamenode, logging to /opt/hadoop-2.9.0/logs/hadoop-hdfs-secondarynamenode-ubuntu-xenial.out
./hadoop-daemon.sh start datanode
starting datanode, logging to /opt/hadoop-2.9.0/logs/hadoop-hdfs-datanode-ubuntu-xenial.out
jps
コマンドで今動いているプロセス確認できる:
jps
3154 SecondaryNameNode
3300 Jps
3065 NameNode
3212 DataNode
サービスを停止するには、
./hadoop-daemon.sh stop <サービス>
を使ってください
hdfs dfs -mkdir -p /mr-history/tmp
hdfs dfs -mkdir -p /mr-history/done
hdfs dfs -chown -R yarn:hadoop /mr-history
hdfs dfs -mkdir -p /user/hdfs
hdfs
ユーザの操作終わったので、一旦exit
exit
ResourceManagerとNodeManagerを起動
./yarn-daemon.sh start <サービス名>
でresourcemanager
、nodemanager
を起動します:
su - yarn
cd /opt/hadoop-2.9.0/sbin/
./yarn-daemon.sh start resourcemanager
starting resourcemanager, logging to /opt/hadoop-2.9.0/logs/yarn-yarn-resourcemanager-ubuntu-xenial.out
./yarn-daemon.sh start nodemanager
starting nodemanager, logging to /opt/hadoop-2.9.0/logs/yarn-yarn-nodemanager-ubuntu-xenial.out
./mr-jobhistory-daemon.sh
でhistoryserver
を起動します:
historyserver
は実行しているJobを追跡するサービスです
./mr-jobhistory-daemon.sh start historyserver
starting historyserver, logging to /opt/hadoop-2.9.0/logs/mapred-yarn-historyserver-ubuntu-xenial.out
同様に、jps
確認する:
jps
3989 JobHistoryServer
3768 NodeManager
4089 Jps
3518 ResourceManager
Web UI
HDFSとYARNのResourceManagerはWeb UIがあるので、ブラウザで確認できる
- HDFS: http://localhost:8088
- YARN: http://localhost:50070
サンプルのMapReduceを走らせてみる
su - hdfs
export HADOOP_EXAMPLES=/opt/hadoop-2.9.0/share/hadoop/mapreduce
yarn jar $HADOOP_EXAMPLES/hadoop-mapreduce-examples-2.9.0.jar pi 16 1000
Number of Maps = 16
Samples per Map = 1000
Wrote input for Map #0
Wrote input for Map #1
Wrote input for Map #2
Wrote input for Map #3
Wrote input for Map #4
Wrote input for Map #5
Wrote input for Map #6
Wrote input for Map #7
Wrote input for Map #8
Wrote input for Map #9
Wrote input for Map #10
Wrote input for Map #11
Wrote input for Map #12
Wrote input for Map #13
Wrote input for Map #14
Wrote input for Map #15
Starting Job
...
17/12/17 10:35:47 INFO mapreduce.Job: map 0% reduce 0%
17/12/17 10:36:07 INFO mapreduce.Job: map 13% reduce 0%
17/12/17 10:36:08 INFO mapreduce.Job: map 38% reduce 0%
17/12/17 10:36:25 INFO mapreduce.Job: map 50% reduce 0%
17/12/17 10:36:26 INFO mapreduce.Job: map 75% reduce 0%
17/12/17 10:36:39 INFO mapreduce.Job: map 88% reduce 0%
17/12/17 10:36:40 INFO mapreduce.Job: map 100% reduce 0%
17/12/17 10:36:41 INFO mapreduce.Job: map 100% reduce 100%
17/12/17 10:36:41 INFO mapreduce.Job: Job job_1513506414235_0001 completed successfully
...
Job Finished in 65.666 seconds
Estimated value of Pi is 3.14250000000000000000
まとめ
NameNodeとかResourceManagerとか、サービスがいっぱい出てきてあまり消化できてないが、とりあえずサンプル動いたので、一旦しめます。今回は一台のサーバで完結したので、あまり「分散」の感覚がないですね〜
今度は複数サーバに分散して独自のプログラムを動かしてみようと思います。
参考:https://www.safaribooksonline.com/library/view/hadoop-2-quick-start/9780134050119/