Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした