クラスタマネージャーApache Mesosを使って、Amazon EC2にクラスタを構築。

Apache Sparkを試しています。
高速な分散処理エンジンApache Sparkの操作を対話シェルで試してみる!
Apache SparkをJavaアプリケーションから使う。
ここまでは、単一のホストで動作を試していましたが、分散処理のためのライブラリなので、複数ホストで試さなければ本当の性能は得られません。
そこで、ここからはSparkのクラスタを構築していきたいと思います。

Apache Mesosは汎用のクラスタマネージャー

分散処理クラスタを構築する方法として、SparkのドキュメントにApache Mesosを使う方法が書かれています。
スクリーンショット 2015-01-06 0.02.26
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の管理画面を見ることができます。
スクリーンショット 2015-01-05 11.33.16
ちなみに、共有ライブラリのパスが通らなかったので、今回はとりあえず、下記だけ無理やり通しました。

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からスレーブ一覧を確認すると、スレーブが認識されています!
スクリーンショット 2015-01-05 11.44.26
今回はマスターのホストにも、スレーブを共存させるように立てました。下記の通り、マスターは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との連携に進みたいと思います。

コメント

  1. […] 「クラスタマネージャーApache Mesosを使って、Amazon EC2にクラスタを構築。」で構築したクラスタを使って、Sparkの分散処理を実行してみます。 […]

タイトルとURLをコピーしました