1.構成図
本投稿で、下記の構造ようなHadoopYarnクラスタの環境を構築します。
- マスタの構成
- Master: 192.168.0.100
- ワーカノードの構成
- Worker1: 192.168.0.101
- Worker2: 192.168.0.102
2.クラスタに必要なユーザの作成
クラスタ環境では、それぞれのノード間で互いにアクセスすることがあります。そのユーザーは同じユーザIDしか利用できないということがあります。それによってクラスタ構築する前に、まずマスタノードとワーカノード上に全部hadoopyarnユーザを作成しておきます。
2.1.Master
Master上で、hadoopyarnユーザーを作ります。
# ユーザ作成
sudo adduser hadoopyarn
# パスワード設定
sudo passwd hadoopyarn ※PW:hadoopyarn01
# フォルダOwner変更
sudo chown hadoopyarn /home/hadoopyarn
# 管理者権限付与
sudo vim /etc/sudoers
# 下記を追加する
hadoopyarn ALL=(ALL) ALL
2.2.Slave
Masterのユーザー作り方と同じように、Slave1とSlave2にもhadoopyarnユーザを作ります。
3.SSH接続の確認
※私のそのたの投稿【SSH接続時パスワードなしでSSH接続の設定方法】を参照してください。
4.Hosts設定の確認
4.1.Master
Master上で、「/etc/hosts」ファイルの一番下に、以下の情報を追加します。
192.168.0.100 cluster-master
192.168.0.101 cluster-slave1
192.168.0.102 cluster-slave2
4.2.Slave1
Slave1上で、「/etc/hosts」ファイルの一番下に、以下の情報を追加します。
192.168.0.100 cluster-master
192.168.0.101 cluster-slave1
4.3.Slave2
Slave2上で、「/etc/hosts」ファイルの一番下に、以下の情報を追加します。
192.168.0.100 cluster-master
192.168.0.102 cluster-slave2
5.Sparkのインストール
5.1.Master
以下のようにSparkのインストールを行います。
# sparkダウンロード
cd /usr/work
wget http://ftp.jaist.ac.jp/pub/apache/spark/spark-2.3.2/spark-2.3.2-bin-hadoop2.7.tgz
tar zxvf spark-2.3.2-bin-hadoop2.7.tgz
# 移動
sudo mv spark-2.3.2-bin-hadoop2.7 /usr/local/lib/spark-2.3.2-bin-hadoop2.7
cd /usr/local/lib/
sudo ln -s spark-2.3.2-bin-hadoop2.7 spark
「/etc/profile.d」の下に、「spark.sh」ファイルを作って、SPARK_HOMEなどの環境変数を設定します。
# spark.sh作成
cd /etc/profile.d
vi spark.sh
# 以下の変数を追加、保存
export SPARK_HOME=/usr/local/lib/spark
export PATH=$SPARK_HOME/bin:$SPARK_HOME/sbin:$PATH
# 有効化
source spark.sh
5.2.Slave
Master上のインストール方法と同じように、Slave1とSlave2にSparkをインストールします。
6.Scalaのインストール
6.1.Master
【Scala公式サイト】から、scala-2.11.7をダウンロードします。以下のようにScalaのインストールを行います。
# Scalaインストール
cd /usr/work
tar zxvf scala-2.11.7.tgz
# 移動
sudo mv scala-2.11.7 /usr/local/lib/ scala-2.11.7
cd /usr/local/lib/
sudo ln -s scala-2.11.7 scala
「/etc/profile.d」の下に、「scala.sh」ファイルを作って、SCALA_HOMEなどの環境変数を設定します。
# scala.sh作成
cd /etc/profile.d
vi scala.sh
# 以下の変数を追加、保存
export SCALA_HOME=/usr/local/lib/scala
export PATH=$SCALA_HOME/bin:$PATH
# 有効化
source scala.sh
6.2.Slave
Master上のインストール方法と同じように、Slave1とSlave2にScalaをインストールします。
7.Hadoopのインストール
7.1.Master
以下のようにHadoopのインストールを行います。
# hadoopダウンロード
cd /usr/work
wget http://ftp.jaist.ac.jp/pub/apache/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz
tar zxvf hadoop-2.7.7.tar.gz
# 移動
sudo mv hadoop-2.7.7 /usr/local/lib/hadoop-2.7.7
cd /usr/local/lib/
sudo ln -s hadoop-2.7.7.tar.gz hadoop
「/etc/profile.d」の下に、「hadoop.sh」ファイルを作って、HADOOP_HOMEなどの環境変数を設定します。
# hadoop.sh作成
cd /etc/profile.d
vi hadoop.sh
# 以下の変数を追加、保存
export HADOOP_HOME=/usr/local/lib/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_HOME=/usr/local/lib/hadoop
export YARN_CONF_DIR=$YARN_HOME/etc/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH # 有効化
source hadoop.sh
7.2.Slave
Master上のインストール方法と同じように、Slave1とSlave2にHadoopをインストールします。
8.HadoopYarnクラスタの稼働に必要な環境変数の設定
8.1.Master
「core-site.xml」ファイルにはHDFSのName nodeを記載します。従って「core-site.xml」ファイルに以下を追加します。
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.0.100:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/var/lib/hadoop/tmp</value>
</property>
</configuration>
「hdfs-site.xml」ファイルには、各ノードでNameNodeやDataNodeのデータ格納用に使うパスなどを記載します。パスはそれぞれのノードの役割に応じて指定します。従って「hdfs-site.xml」ファイルに以下を追加します。
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>192.168.0.100:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/var/lib/hadoop/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/var/lib/hadoop/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
「mapred-site.xml」ファイルに、Yarnクラスタを使用しようことを指定します。
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
「yarn-site.xml」ファイルには、YarnのリソースマネージャのIPアドレスの設定を記載します。従って「yarn-site.xml」ファイルに以下を追加します。
<configuration>
<!-- Site specific YARN configuration properties -->
<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.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>192.168.0.100:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>192.168.0.100:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>192.168.0.100:8035</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>192.168.0.100:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>192.168.0.100:8088</value>
</property>
</configuration>
「slaves」ファイルに、すべてのSlavaのIPアドレスを追加します。
192.168.0.100
192.168.0.101
192.168.0.102
8.2.Slave
Master上の設定方法と同じように、Slave1とSlave2にも同じファイルを設定します。
9.各ノードでHDFSに使用するディレクトリの作成
9.1.Master
「hdfs-site.xml」の中の設定に応じて、それぞれのNameNode及びDataNodeに使用するディレクトリを作って、「hadoopyarn」ユーザで編集できるように設定します。
cd /var/lib/
# hadoopディレクトリ作成
sudo mkdir hadoop
sudo chown –R hadoopyarn ./hadoop
sudo chgrp –R hadoopyarn ./hadoop
sudo chmod –R 777 ./hadoop
# NameNode, DataNodeなどのディレクトリ作成
mkdir /var/lib/hadoop/name
mkdir /var/lib/hadoop/data
mkdir /var/lib/hadoop/tmp
9.2.Slave
「hdfs-site.xml」の中の設定に応じて、DataNodeに使用するディレクトリを作成しております。
cd /var/lib/
# hadoopディレクトリ作成
sudo mkdir hadoop
sudo chown –R hadoopyarn ./hadoop
sudo chgrp –R hadoopyarn ./hadoop
sudo chmod –R 777 ./hadoop
# DataNodeなどのディレクトリ作成
mkdir /var/lib/hadoop/data
mkdir /var/lib/hadoop/tmp
# 10.HDFSの起動と状態確認
Master側で、HDFSサービスを起動します。
# HDFS起動
start-dfs.sh
まず、「jps」コマンドでNameNodeとDataNodeの稼働状態を確認しておきます。
# Master側で、以下のコマンド入力
jps
# 以下の情報が表示されたらNameNodetとDataNodeが起動済
xxxxx NameNode
xxxxx SecondaryNameNode
xxxxx DataNode
Slave1とSlave2側で、それぞれのDataNodeの状態を確認します。
# Slave側で、以下のコマンド入力
jps
# 以下の情報が表示されたらDataNodeが起動済
xxxxx DataNode
次は、WebUIで、HDFSのDataNodeの台数も確認できます。
HDFSのWebUI【http://192.168.0.100:50070】を開けます。画面の中から、「Datanodes」タブの「Datanode Infomation」の下に稼働中のSlave台数が確認できます。
11.Yarnの起動と状態確認
Master側で、Yarnクラスターを起動します。
# YARN起動
start-yarn.sh
まず、「jps」コマンドでリソースマネージャとノードマネージャの稼働状態を確認しておきます。
# Master側で、以下のコマンド入力
jps
# 以下の情報が表示されたらYarnのリソースマネージャ、ノードマネージャが起動済
xxxxx NameNode
xxxxx SecondaryNameNode
xxxxx DataNode
xxxxx ResourceManager
xxxxx NodeManager
Slave1とSlave2側で、それぞれのノードマネージャの状態を確認します。
# Slave側で、以下のコマンド入力
jps
# 以下の情報が表示されたらノードマネージャが起動済
xxxxx DataNode
xxxxx NodeManager
次は、WebUIで、リソースマネージャ及び各ノードマネージャの稼働状況を確認しておきます。
HadoopのWebUI【http://192.168.0.100:8088】を開けます。その画面の左のメニューから「Nodes」を選択して「Nodes of the cluster」画面が表示されます。その中に各稼働中ノードの情報が見れます。
12.Yarnクラスタ上で稼働に必要なSpark設定
12.1.Master
「spark-env.sh」ファイルに、以下の環境変数を設定します。
export SPARK_MASTER_IP=192.168.0.100
export SPARK_MASTER_HOST=cluster-master
export SPARK_MASTER_PORT=7077
export SPARK_LOCAL_DIRS=$SPARK_HOME
export SPARK_LOCAL_IP=192.168.0.100
export SPARK_LIBRARY_PATH=$CLASSPATH:$HADOOP_HOME/lib/native
「slaves.sh」ファイルに、全てのSlaveのIPアドレスを追加します。
192.168.0.100
192.168.0.101
192.168.0.102
12.2.Slave
Masterで設定済の「spark-env.sh」、「slaves.sh」ファイルをSlave1とSlave2の同じのフォルダーにコピーしてください。
13.WordCountアプリケーションの起動
13.1.WordCountアプリケーションの実行
YarnのMaster側で、WordCountアプリケーションを実行します。
cd /usr/work
spark-submit --master yarn-cluster \
--jars ./spark-streaming-mqtt-assembly_2.11-1.6.3.jar \
--packages org.apache.bahir:spark-streaming-mqtt_2.11:2.2.1 \
./mqtt_wordcount.py tcp://192.168.0.99:1883 car
※権限に関連するエラーメッセージが表示したら、hadoopyarnユーザーに対して「/var/log/spark」フォルダーにR/W/X権限を付与してください。
13.2.アプリケーションの稼働状態の確認
以下のようにコマンド確認ができます。
jps
# 以下の情報が表示されたら、WordCountが正常に起動済
xxxxx NameNode
xxxxx SecondaryNameNode
xxxxx DataNode
xxxxx ResourceManager
xxxxx NodeManager
xxxxx SparkSubimit
xxxxx ApplicationMaster
Hadoop画面の左のメニュー→「Running」→「RUNNING Applications」画面が表示されます。画面の真ん中にはWordCountアプリケーションが見れます。
WordCountアプリケーションIDを右クリックして、新しいタブで開いた画面には、選択したアプリケーションの詳細情報が表示されます。
詳細情報の真ん中の「ApplicationMaster」リンクを右クリックして、新しいタブで開いた画面には、WordCountのJobやStreamingの情報が確認できます。
14.Yarnの停止
Yarnを停止したい場合は、Application、Yarn、Hdfsの順に各サービスを止めてください。
# WordCount停止
Ctrl + c
# Yarn停止
stop-yarn.sh
# HDFS停止
stop-dfs.sh