Apache Spark on Mesos の環境構築(その3
こんにちは。
では、Mesosの環境構築&確認を続けたいと思います。
1. テストフレームワークの起動
まずはテスト用に提供されているフレームワークを起動します。
Mesos-masterが起動しているサーバ上で以下のコマンドを実行します。
・・・尚、C++とJavaのサンプルは実行ファイルが無かったり、jarファイルが無い等で起動しなかったため、
今回はpythonの確認のみを行っています。
# cd /usr/local/src/mesos-0.13.0 # src/examples/python/test-framework 192.168.100.241:5050 Registered with framework ID 201310100650-4049905856-5050-1735-0003 Got 3 resource offers Got resource offer 201310100650-4049905856-5050-1735-21 Accepting offer on mesos1 to start task 0 Got resource offer 201310100650-4049905856-5050-1735-22 Accepting offer on mesos2 to start task 1 Got resource offer 201310100650-4049905856-5050-1735-23 Accepting offer on mesos3 to start task 2 Task 1 is in state 1 Task 0 is in state 1 Task 2 is in state 1 Task 0 is in state 2 Task 1 is in state 2 Task 2 is in state 2 Received message: 'data with a \x00 byte' Received message: 'data with a \x00 byte' Received message: 'data with a \x00 byte' Got 3 resource offers Got resource offer 201310100650-4049905856-5050-1735-24 Accepting offer on mesos1 to start task 3 Got resource offer 201310100650-4049905856-5050-1735-25 Accepting offer on mesos2 to start task 4 Got resource offer 201310100650-4049905856-5050-1735-26 Task 3 is in state 1 Task 4 is in state 1 Task 3 is in state 2 Task 4 is in state 2 All tasks done, waiting for final framework message Received message: 'data with a \x00 byte' Received message: 'data with a \x00 byte' All tasks done, and all messages received, exiting
とりあえずタスクがスタートして、それが終了した・・・ように見えます。
実際、タスク実行中はWebUIに以下のように実行中のタスク(Active Frameworks)にPythonのデータが表示されていました。
また、CPUとメモリも実際に使用されている表示となっていました。
タスクが終了すると、以下のように「Terminated Frameworks」の方に終了したタスクが表示されるようになります。
また、終了したタスクの詳細を確認してみると、以下のように内部でのサブタスクと、
実行されたサーバが表示されます。
実際に実行されたサーバ上の履歴を確認してみると、その時に確保されたCPUやメモリ量も見えます。
さらにタスクの詳細を確認すると、タスクの識別子上のパスに標準出力と標準エラーの結果が残されているのがわかります。
実際にstdoutの中身をWebUI上から見ると以下のようになっていました。
Fetching resources into '/tmp/mesos/slaves/201310100650-4049905856-5050-1735-0/frameworks/201310100650-4049905856-5050-1735-0003/executors/default/runs/239732ac-0cb2-477b-bed9-198c141b9f83' Starting executor Running task 0 Sending status update... Sent status update Running task 3 Sending status update... Sent status update
とりあえず、Mesos上で実行されたタスクがどのように記録が残るか・・・はわかりました。
2. SparkをMesos上で動作させるためには?
Sparkのページ(http://spark.incubator.apache.org/docs/latest/running-on-mesos.html)を見てみると以下のような手順があります。
1.各サーバ上でSparkのビルドを行う
2.Sparkのdistribution用スクリプトを使ってファイルを固める
3.固めたファイルを外部のHDFS等に配置する
4.(各サーバ上の?)SparkからMesosを参照する設定を行う
5.下記のようにSparkContextを作成する
System.setProperty("spark.executor.uri", "<path to spark-0.8.0-incubating.tar.gz uploaded above>") val sc = new SparkContext("mesos://HOST:5050", "App Name", ...)
・・・そのあと実際にどう実行するかがこのページ読んでもさっぱりなのが厄介なところですね(汗
以下の2つを確認しておかないととりあえず実行できるかもしれませんが、
実態はわからない・・・ということになりそうです。
1.Mesosの構造把握
2.Sparkのクラスタに載せないタスクの実行確認
そのため、とりあえずMesosが動くことを確認できたので、Mesosのアーキテクチャ資料と論文を確認してみます。
実はこれも「University of California, Berkeley」が論文の出元だったりするため、
MesosとSparkはペアで開発されたようなもののようです。