Apache Sparkを試しています。
高速な分散処理エンジンApache Sparkの操作を対話シェルで試してみる!
Apache SparkをJavaアプリケーションから使う。
ここまでは、単一のホストで動作を試していましたが、分散処理のためのライブラリなので、複数ホストで試さなければ本当の性能は得られません。
そこで、ここからはSparkのクラスタを構築していきたいと思います。
Apache Mesosは汎用のクラスタマネージャー
分散処理クラスタを構築する方法として、SparkのドキュメントにApache Mesosを使う方法が書かれています。
Apache Mesos
Mesosは汎用のクラスタマネージャーです。具体的に何をしてくれるかというと、クラスタを管理して、ホストごとのリソースの余裕を見て、タスクを振り分けたりしてくれます。
もうひとつ、YARNという選択肢があります。YARNも同様の目的をもつクラスタマネージャーですが、もともとHadoopの一機能だったものから切り出されたものです。違いについては下記なども参考になります。
Hadoop YARNとApache Mesosの違いって何? – 夢とガラクタの集積場
今回はとりあえず、Mesosを使って実装してみることにしました。
Apache Mesosのインスール
Amazon EC2で3台ほどインスタンスを起動して、Mesosをインスールしてみました。下記を参考にソースコードからインスールしようとするも失敗。
http://mesos.apache.org/gettingstarted/
下記のrpmからインスールする方法で試しました。
Download Mesosphere Packages · Mesosphere
sudo rpm -Uvh http://repos.mesosphere.io/el/7/noarch/RPMS/mesosphere-el-repo-7-1.noarch.rpm
sudo yum -y install mesos
インスールが完了したら、Mesosのデーモンを起動します。サービス化されてはいないので、下記を参考に起動してみます。
Apache Mesosをrpmでインストールして動作を確認する(その1 – 夢とガラクタの集積場
Apache Mesosをrpmでインストールして動作を確認する(その2 – 夢とガラクタの集積場
Apache Mesosのマスターの起動
まずは、マスターを起動します。
マスターの起動用に設定を書きます。ここでは、mesos-master-env.shという設定ファイルに、ディレクトリパスを追加するだけです。
cat << EOT | sudo tee -a /usr/etc/mesos/mesos-master-env.sh
export MESOS_log_dir=/var/lib/mesos
export MESOS_work_dir=/var/lib/mesos/master
EOT
そしてmesos-daemonスクリプトを使って起動します。
sudo /usr/sbin/mesos-daemon.sh mesos-master
これで、5050ポートをブラウザで開くと、Mesosの管理画面を見ることができます。
ちなみに、共有ライブラリのパスが通らなかったので、今回はとりあえず、下記だけ無理やり通しました。
cd /usr/lib64/
sudo ln -s libsasl2.so.2 libsasl2.so.3
sudo ln -s libdb-4.7.so libdb-5.3.so
ここは要確認です。
Apache Mesosのスレーブの起動
続いてスレーブを起動します。
スレーブの場合も、mesos-slave-env.shの設定を書き換えるだけです。スレーブの設定には、マスターのホストへの接続先も指定します。
cat << EOT | sudo tee -a /usr/etc/mesos/mesos-slave-env.sh
export MESOS_log_dir=/var/lib/mesos
export MESOS_master=172.31.1.142:5050
export MESOS_work_dir=/var/lib/mesos/slave
EOT
そしてmesos-daemonスクリプトを使って起動します。
sudo /usr/sbin/mesos-daemon.sh mesos-slave
こちらもライブラリのパスが通らなかったので、シンボリックリンクだけつけています。
Apache Mesosの動作確認
これでMesosクラスタの構築が完了です。
Web UIからスレーブ一覧を確認すると、スレーブが認識されています!
今回はマスターのホストにも、スレーブを共存させるように立てました。下記の通り、マスターは5050ポートを、スレーブは5051ポートを見ています。
$ netstat -ant | grep LISTEN | grep :505
tcp 0 0 0.0.0.0:5050 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:5051 0.0.0.0:* LISTEN
これでジョブを投げ込んで動作を確認したいところなのですが、サンプルプログラム自体がうまく動かせなかったので、直接Apacke Sparkとの連携に進みたいと思います。
コメント
[…] 「クラスタマネージャーApache Mesosを使って、Amazon EC2にクラスタを構築。」で構築したクラスタを使って、Sparkの分散処理を実行してみます。 […]