読者です 読者をやめる 読者になる 読者になる

Tomo's IT Blog

技術的な調査メモ

Apache Sparkの勉強-Clusterを構成してみよう!クラスタ起動スクリプトで一発起動してみる

spark cluster ec2

http://spark.apache.org/images/spark-logo-trademark.png


前回は、SparkのStandaloneクラスタを手動スクリプトで構築して、対話シェルで動作を確認してみました。

tmnj.hatenablog.com


今回は、クラスタ起動スクリプトを使用してスクリプト一発実行するだけでSparkがクラスタ構成で起動する方法を実施してみたいと思います。

環境の準備


前回記事の環境を使います。
各EC2インスタンスの同一のディレクトリにSparkをインストールしておきます。

クラスタ起動スクリプトの利用

まず、conf/slavesファイルをSparkディレクトリに作成する必要があります。このファイル内には、Spark workerが動作するホスト名を1行ずつ定義します。なお、SlaveマシンへはMasterマシンからsshでアクセスできる必要があります。デフォルトでは、パスワードなしでPrivate Keyアクセスができる必要があります。EC2の各インスタンスでは作成時に指定したKeyペアのPublic Keyはsshに設定されていますが、Masterインスタンスからアクセスする際のPrivate Keyを指定する必要があります。
(注意:本番環境などの場合は、別途EC2インスタンス間のアクセスで利用するKeyPairを作成してそちらを利用するようにしましょう!)

まず、EC2インスタンスで使用したPrivate KeyをMasterインスタンス上の任意のディレクトリにアップします。(例えばSPARK_HOME/private-key.pem)次に以下のようにSPARK_SSH_OPTSに"-i"オプションでprivate keyファイルを指定しておきます。(ファイル名は適宜変更してください。)なおpemファイルはchmod 400で自分しか読めないようにパーミッションを変更しておきます。

chmod 400 private-key.pem
export SPARK_SSH_OPTS="-i private-key.pem"


ここまでそろったら、./sbin/start-all.shを起動するとローカルのMasterとリモートのSlaveがすべて起動します。

 ./sbin/start-all.sh

エラーが無ければ無事に起動できています。masterのログを見ると以下のようなログが出ていれば、workerが起動してMasterに登録されています。

16/12/12 13:10:10 INFO Master: Registering worker xx.xx.xx.xx:44238 with 2 cores, 2.7 GB RAM
16/12/12 13:10:10 INFO Master: Registering worker xx.xx.xx.xx:36147 with 2 cores, 2.7 GB RAM

実際にブラウザからMaster WebUIにアクセスしてみましょう!
masterインスタンスに8080ポートでアクセスします。(sshトンネリングするか、セキュリティグループに8080アクセスをセットしておきます。送信元IPはマイIPのみ許可するようにしておきましょう。)

http://maser-ec2-instance-dns:8080

以下のように、Workerが追加されています。


f:id:tmnj:20161212221830p:plain



前回のように、対話シェルで動作確認してみましょう!

conf/slaveファイルにホストを追加すれば自動で起動されますので便利ですね!

止める場合は以下を実行します。

./sbin/stop-all.sh

まとめ

クラスタ起動スクリプトを利用すると大量ホストをワーカーにする場合は取っても便利!