【Sparkクラスタ構築】Yarnクラスタ稼働環境を構築します


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