概要
SparkをインストールしてMesosクラスタとの疎通を確認します。
結構はまるので、メモとして残しておきます。
Mesosクラスタは以前に書いた以下の記事のものを使っていますので参考にしてください。
[Mesosを簡単にインストールする]
https://qiita.com/48hands/items/5d17372b81b1923b16a7
- Mesos 1.5.0クラスタ
- node1: Mesosマスタ
- node2,node3,node4: Meosスレーブ
- Spark 2.3.0
- node1~node4のMesosクラスタを構成するすべてのマシンにインストールします。
※各マシンのOSはCentOS7になっています。また、各マシンのメモリは2GB以上欲しいです。あまりメモリが少ないとSparkが実行できません。
事前準備
Javaのインストール
SparkはJVM上で動作するのでJavaをMesosクラスタを構成するすべてのマシン(node1
,node2
,node3
,node4
)にJavaをインストールしておいてください。
sudo yum install -y java-1.8.0-openjdk
Sparkのインストール
Spark2.3.0のダウンロード
SparkのインストールもMesosクラスタを構築するすべてのマシンで実施してください。
cd ~
curl -O http://ftp.jaist.ac.jp/pub/apache/spark/spark-2.3.0/spark-2.3.0-bin-hadoop2.7.tgz
sudo tar xvfz spark-2.3.0-bin-hadoop2.7.tgz -C /opt/
spark-env.shの設定
この設定もMesosクラスタを構築するすべてのマシンで実施してください。
/opt/spark-2.3.0-bin-hadoop2.7/conf/spark-env.sh
を各マシンで以下のように設定してください。
MESOS_NATIVE_JAVA_LIBRARY=/usr/lib/libmesos.so
SPARK_LOCAL_IP=各自のIPアドレス
LIBPROCESS_IP=各自のIPアドレス
# 以下の2行は十分なメモリリソースがあれば不要
# 今回はメモリリソースが2GBぐらいしかないので仕方なく設定しています。
SPARK_DRIVER_MEMORY=512M
SPARK_DAEMON_MEMORY=256M
SPARK_HOMEの設定
この設定はMesosマスタ(筆者の環境だとnode1
)だけで大丈夫です。
Sparkを実行するユーザの環境変数として設定してください。
echo 'export SPARK_HOME=/opt/spark-2.3.0-bin-hadoop2.7' >> ~/.bash_profile
source ~/.bash_profile
この設定によって、Sparkの分散実行先(Mesosスレーブ側)でSPARK_HOME
が環境変数として設定されていなくても、/opt/spark-2.3.0-bin-hadoop2.7
をデフォルトで参照してくれるっぽいです。
spark-shellからMesos上で分散処理できるか確認
spark-shell
をMesos上で動かして確認する。
パラメータですが、ざっくり説明すると、
executor-memory
はMesos Slave側でSparkの分散処理実行用に割り当てるメモリ(当然Mesosのリソースを超えるのはNG)。
total-executor-cores
はSparkのタスクを処理するのに必要なクラスタ全体のコア数を表しています。
$SPARK_HOME/bin/spark-shell \
--master mesos://MesosマスタのIP:5050 \
--executor-memory 512M \
--total-executor-cores 3
...
spark context Web UI available at http://192.168.33.41:4040
Spark context available as 'sc' (master = mesos://192.168.33.41:5050, app id = 54c5ee8e-cd99-408a-b815-2c62c9f3fbb0-0011).
Spark session available as 'spark'.
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 2.3.0
/_/
Using Scala version 2.11.8 (OpenJDK 64-Bit Server VM, Java 1.8.0_171)
Type in expressions to have them evaluated.
Type :help for more information.
scala> sc.parallelize(1 to 10000,30).sum
res1: Double = 5.0005E7
計算できていればOK!
sc.parallelize(1 to 10000,30).sum
の部分は1から10000までの自然数の総和を計算する処理を30分割で分散実行するといった意味になります。
UIも以下のようになっていればOK!
[Mesos UI]
http://MesosマスタのIP:5050

[Spark WebUI]
http://MesosマスタのIP:4040

サンプルJARアプリの実行
付属のJARサンプルアプリで円周率計算を実行できるかも念のため確認しておきます。ログがどっと出力されますが、途中でそれっぽい値が確認できるはずです。
$SPARK_HOME/bin/spark-submit --class org.apache.spark.examples.SparkPi \
--master mesos://MesosマスタのIP:5050 \
--executor-memory 512M
--deploy-mode client \
$SPARK_HOME/examples/jars/spark-examples_2.11-2.3.0.jar \
1000
...
Pi is roughly 3.1417888714178885
...
以上、SparkをインストールしてMesosクラスタで簡単に動作させて確認するまでの手順でした。