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

#1.構成図
本投稿で、下記の構造ようなStandaloneクラスターの環境を構築します。

- マスタの構成
  - Master: 192.168.0.100
- ワーカノードの構成
  - Worker1: 192.168.0.101
  - Worker2: 192.168.0.102

#2.SSH接続の確認
※私のそのたの投稿【[SSH接続時パスワードなしでSSH接続の設定方法](https://qiita.com/gakuseikai/items/707a8f740db59a8c30ef)】を参照してください。

#3.Hosts設定の確認
####3.1.Master
Master上で、「/etc/hosts」ファイルの一番下に、以下の情報を追加します。
> 192.168.0.100 cluster-master
> 192.168.0.102 cluster-slave1
> 192.168.0.101 cluster-slave2

####3.2.Slave1
Slave1上で、「/etc/hosts」ファイルの一番下に、以下の情報を追加します。
> 192.168.0.100 cluster-master
> 192.168.0.101 cluster-slave2

####3.3.Slave2
Slave2上で、「/etc/hosts」ファイルの一番下に、以下の情報を追加します。
> 192.168.0.100 cluster-master
> 192.168.0.102 cluster-slave1

#4.Sparkのインストール
####4.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
```
####4.2.Slave1
以下のように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
```
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
```
####4.3.Slave2
以下のように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
```
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.Standaloneに必要な環境変数の設定
####5.1.Master
「/usr/local/lib/spark/conf」に移動して、以下のファイルを編集します。
Slaveの実際のメモリー容量とCPUのコア数により、パラメータを編集します。
> spark.executor.memory 2g
> spark.executor.instances 1
> spark.executor.cores 2

**パラメータの意味**

オプション|説明
:--|:--
spark.executor.memory    |Executorに配布されるメモリーの容量（＜ Workerの空きのメモリ量）
spark.executor.instances |Standalone上には、1しか設定できない
spark.executor.cores     |Executorに配布されるコア数（＜ ワーカーの実際のコア数）

「spark-env.sh」に、Masterのホストとポートを設定します。
> export SPARK_MASTER_HOST=192.168.0.100
> export SPARK_MASTER_PORT=7077

「slaves.sh」に、全てのSlaveのIP追加します。
> 192.168.0.101
> 192.168.0.102

####5.2.Slave
Masterで設定済の「spark-defaults.conf」、「spark-env.sh」、「slaves.sh」ファイルをSlave1とSlave２の同じのフォルダーの配下にコピーしてください。
#6.Standaloneの起動と状態確認
Master側で、StandaloneのMasterサービスとWorkerサービスを起動します。

```
# Master起動
start-master.sh
# Slave起動
start-slaves.sh
```
Master側で、Masterサービスの状態を確認します。

```
# Masterサービスの起動状態確認
jps
# 以下の情報が表示されたらMasterサービスが起動済です
XXXX Jps
XXXX Master
```
Slave1とSlave2側で、それぞれのWorkerサービスの状態を確認します。

```
# Workerサービス状態確認
jps
# 以下の情報が表示されたらMasterサービスが起動済です
XXXX Jps
XXXX Worker
```
WebUIで、StandaloneのMasterとWorkerの状態も確認できます。
MasterとWorkerサービスが正常に起動されたら、SparkクラスタのWebUI【[http://192.168.0.100:8080](http://192.168.0.100:8080)】からMasterと各Workerの情報が確認できます。
 
#7.Standaloneの停止と状態確認
Master側で、StandaloneのMasterサービスとWorkerサービスを停止します。

```
# MasterとSlaveを全部停止
start-master.sh
start-slaves.sh
# Masterサービスの状態確認
jps
XXXX Jps
```
Masterが表示されなければMastersサービスが停止されたはず（Slaveの停止も同じ方法でやってください）