2011年4月9日土曜日

[ElasticStream] システム構成と実験方法

以下石井君の ElasticStreamシステムの構成と実験方法です。

//---------------------------------------------------------------------------------
// ElasticStream システム 構成と実験方法
// 2011/04/08 石井
//---------------------------------------------------------------------------------

- se01 を esther から wake-on-lan で起動 --> /usr/local/bin/wol.py se01
- se01 (このノードだけ外部からのコネクションを受け付ける。萩原さんにお願いしている。有効期限は2011年3月まで)を wake-on-lan で起動

<初期ディレクトリ構成>
ElasticStreamSystem
-elasticStream //ローカルに配置する設定ファイル群。今までは/tmp/elasticStream の様に配置
-spade //SPADE用プロジェクトファイル
-ec2 //Amazon EC2に関するデータ、及びRubyスクリプト群。

上記ディレクトリをコピー。
ec2/*.id の権限は注意


<ノード定義>
se01: *.dpsを実行するノード。、ResultGetterもこのノードで起動
st系など: 計算ノードとして使う。

<事前準備>
・elasticStreamフォルダ(入力ファイル、出力ファイル、設定ファイル)を /tmp/elasticStream のようにローカル上に配置。
・spade/data/result -> <ローカル上に配置したelasticStreamディレクトリへのパス>になるようにリンクを設定。

このような感じで、.bashrcにパスを通しておく
目的はEC2-API-toolへのパス、鍵・証明書の場所、デフォルトのリージョンの場所など

//---------------------------------------------------------------------------------
以下の環境変数を .bashrc に追加
export EC2_HOME=$HOME/ec2/ec2-api-tools
export PATH=$PATH:$JAVA_HOME/bin:$EC2_HOME/bin:/usr/local/cula/bin:/usr/local/cuda/bin
export EC2_PRIVATE_KEY=$HOME/ec2/pk-D4I5F3YSJGEX46MXYBRSGAEWPZTIF5BD.pem
export EC2_CERT=$HOME/ec2/cert-D4I5F3YSJGEX46MXYBRSGAEWPZTIF5BD.pem
export EC2_URL="https://ec2.us-west-1.amazonaws.com" ### デフォルトリージョン。東京のデータセンターに書き換えるときは Amazon EC2 のサイトを参照。明示的に API でリージョンを指定する必要がある。現在は Ruby スクリプトに書いている。


// ※鍵は同梱のec2フォルダに入っているのでそれへのパスを与える。
  // デフォルトのリージョンはこの場合はUS-West
//---------------------------------------------------------------------------------

<設定ファイル解説>
//---------------------------------------------------------------------------------
sla.dat (/tmp/elasticStream/input/に存在。他の設定ファイルも同様の場所に存在)
//---------------------------------------------------------------------------------
  動作の設定ファイル
[1行目]
  ・SLAとなるレイテンシ(マイクロ秒)(今回は使わない)
[2行目]
  ・TimeSlotの時間幅
[3行目]
  ・スタンドアローンモードで起動するか否か(1:スタンドアローン, 0:非スタンドアローン)
  ※スタンドアローンモードではVM Managerを起動せず、クラウド環境を利用しなくなる。

//---------------------------------------------------------------------------------
node_[local/cloud]_*.dat
//---------------------------------------------------------------------------------
  計算資源のホスト名のリスト(インスタンスタイプのカテゴリ毎にある)
各行がホスト名。
#でコメントアウト可能。
*** あらかじめ EC2 上でノードを立ち上げている場合には、node_cloud にそのホスト名を指定
//---------------------------------------------------------------------------------
setting.dat
//---------------------------------------------------------------------------------
  各種設定ファイル。
[1行目]
  ・TimeSlotの時間幅(予想済みデータレートを与えるので使用しない)
[2行目]
  ・データレートの時系列変化を表す入力ファイル名(ファイルの中は1秒ごとのタプル送信数のcsv)
[3行目]
  ・入力ファイル名
[4〜8行目]
  ・データレートの振り分け比率の初期値
  (インスタンスタイプのカテゴリ毎: local_1, local_2, Cloud_1, Cloud_2, Cloud_3 の順番)


*** 前準備
- コンソールを4つ(?)起動 (3つは se01, 1つは st07 (ローカルの計算ノード))
//---------------------------------------------------------------------------------

<起動方法>
・ローカルの各計算ノードでElasticStreamSystem/ec2/4regex.rb(Stableな計算スクリプト)を実行(引数は0(↑のインスタンスタイプのカテゴリの番号), 5000(内部の負荷forループの周回数))
※0,5000は以前の実験で使った値なので基本的には0,5000を引数として与えれば良いです。
# ruby 4regex.rb 0 5000
(ポート番号 10101 でコネクションを待っている状態になる)

・システム起動ノードでresultGetter.rbを起動(引数は10101(入力ポート), 12000(出力ポート, System S の Source (client) オペレータに渡すポート))
# ruby resultGetter.rb 10101 12000
** System S が起動するのを待つ

・deus.rbを起動(引数なし)(各TimeSlotの平均データレートを与えるスクリプト。FutureDetectionの代わり)
# ruby deus.rb
System S の Optimizer オ (UDOP) の前の Source のポート番号 11111 に接続

・xVMManager.rbを起動(引数なし)(VM管理スクリプト)
# ruby xVMManager.rb

・以上のすべての起動を確認したら、submit_job*.shでSystem Sのジョブを起動
 ※クラウド環境との通信は、xVMManager.rbが自動で行ってくれる(はず)(2011/04/08時点では未テスト)
** ./start_streams.....sh を最初に起動
** ./canceljob__.sh
** 5分経過するとクラウドにつなぐ
** Amazon EC2 のVMインスタンスはマニュアルで停止する必要があるときがあるので注意
・終了する場合は、cancel_job*.shでSystem Sのジョブを止めた後、残りのRubyスクリプトを落とす


//---------------------------------------------------------------------------------

<実験結果>
・結果はすべて、<ローカルのelasticStreamディレクトリ>/data 以下に出力される

//---------------------------------------------------------------------------------
DataRate.csv
//---------------------------------------------------------------------------------
System S側で測定したデータレート

//---------------------------------------------------------------------------------
FutureDetection.csv
//---------------------------------------------------------------------------------
FutureDetection コンポーネント(現在はSDARアルゴリズム)の出力

//---------------------------------------------------------------------------------
Latency_*****.csv
//---------------------------------------------------------------------------------
レイテンシの実測値。各タプルのレイテンシの、1秒ごとの平均。
  ALLはすべてのタプル、Local_*, Cloud_*はローカル計算資源、クラウド資源ごとの平均。
実験データとしてはALLを用いた。

//---------------------------------------------------------------------------------
Log_***.csv
//---------------------------------------------------------------------------------
各コンポーネントのログ出力。
エラー出力などもここに出力される。

//---------------------------------------------------------------------------------
Result.csv
//---------------------------------------------------------------------------------
正規表現マッチングでヒットしたタプル(JSONファイル)の"text"要素の出力
正常動作の確認用。

// SSH の設定 - パスフレーズの設定
.ssh/config というファイルを作り、以下の内容を書き足す
host *
StrictHostKeyChecking no

// AWS 管理コンソール
suzucommon@gmail.com /

Region を US West に指定
インスタンス:
stop(使い回す, pending/resume、EBSから消去しない. ただ EBSのストレージ使用量はかかる) ではなく、terminate(EBSからVMインスタンスを消去する)の状態にする.
./cancel したら terminate する。



0 件のコメント:

コメントを投稿