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

夢とガラクタの集積場

落ちこぼれ三流エンジニアである管理人の夢想=『夢』と、潰えた夢=『ガラクタ』の集積場です。

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はペアで開発されたようなもののようです。