Retz(0.2.3)の使い方。
|
|
Retzを使ってコマンドを実行するには、まず、“アプリケーション”をRetzに登録する必要がある。
$ retz-client load-app -A アプリケーション名 -F アーカイブファイルURL -U ユーザーID
これで、アーカイブファイルに名前(アプリケーション名)を付けて、Retz内に保存される。
(アーカイブファイルは必須ではないが、アプリケーション名は必ず登録する必要がある)
そして、コマンドを実行する際にそのアプリケーション名を使用する。
$ retz-client run -A アプリケーション名 -cmd 'コマンド'
このとき、Retz内部では以下のような手順で実行されることになる。
例えばAsakusaアプリケーション(Asakusa Frameworkで作られたバッチ)の場合、通常は、実行環境にAsakusaアプリケーションのデプロイメントアーカイブを展開して置いておく(実行環境に事前にデプロイしておく)。
Retzを使う場合、このデプロイメントアーカイブファイルをRetzに登録しておくことで、事前デプロイが不要になる。(実行直前にRetzによって転送・解凍(つまりデプロイ)される為)
逆に、事前デプロイしてあるのであれば、Retzにアーカイブファイルを登録せず、デプロイしてある環境をそのまま使って実行することも出来る。
(AsakusaFWのデプロイメントアーカイブはバッチ数が多ければそれなりにサイズが大きくなる、つまり転送・解凍に時間がかかるので、どちらの方式が良いかはケースバイケース)
retz-clientのcommandコマンドでコマンド一覧を表示できる。[2017-02-25]
$ retz-client command
-sを付けると各コマンドのオプションが表示される。
$ retz-client command -s load-app $ retz-client command -s run $ retz-client command -s list
Retzにアプリケーション(アーカイブファイル)を登録するには、load-appコマンドを使う。
$ retz-client load-app -A アプリケーション名 -U ユーザーID 〜
「-A」でアプリケーション名を付ける。
これは何でもいいが、後で(runコマンド等で)実行する際に使用する。
「-U」でユーザーIDを指定する。[2017-02-25]
このユーザーは、runコマンドで実行するコマンドをどのUNIXユーザーで実行するかを指定する。
(ユーザーを指定しない場合はRetz(Mesos?)のデフォルトのユーザーで実行されるので、権限が無くて実行できないことがある)
-Uを省略すると、retz-server/etc/retz.propertiesのretz.userが使われる。[2017-03-08]
ちなみに、retz-serverを再起動した場合は、load-appを再度行う必要がある。
登録されているアプリケーション名の一覧は以下のコマンドで確認できる。
$ retz-client list-app
Retzにアーカイブファイルを登録する為には、各Mesosスレーブサーバーからそのアーカイブをダウンロードできるような、共通の場所にアーカイブファイルを置いておく必要がある。
Retzとしては、httpやhdfs(maprfs)でダウンロードすることを想定しているようだ。
load-appコマンドではそのアーカイブファイルの場所(URL)を指定するが、その時点ではURLを保存するだけで、アーカイブファイルの転送自体は行われない。
実際にコマンドが実行されるときに、Mesosスレーブサーバー上にそのアーカイブファイルをダウンロードしてくる。(アーカイブファイルがtar.gzの場合は、転送した後で解凍も行われる)
httpを使う場合は、どこかでウェブサーバーを立ち上げ、そこにアーカイブファイルを置いておく必要がある。
$ retz-client load-app -A asakusa -P http://example.com/asakusa-m3bp.tar.gz -disk 6000
hdfsを使う場合は、MesosスレーブサーバーからHDFS(Hadoop分散ファイルシステム)にアクセスできる必要がある。
$ hadoop fs -put asakusa-m3bp.tar.gz $ retz-client load-app -A asakusa -P hdfs:///user/hishidama/asakusa-m3bp.tar.gz -disk 6000
アーカイブファイルの転送(Mesosスレーブサーバーへのダウンロード)には、コマンド実行の度に毎回転送する方法と、そのサーバーで初めて実行するときだけ転送する方法がある。
また、そのサーバーに既にインストールされているファイルだけ使えばいい場合は、アーカイブファイルは不要となる。
コマンド実行の度に毎回転送(および解凍)するなら、「-F」オプションでアーカイブファイルを指定する。
$ retz-client load-app -A asakusa1 -F http://example.com/asakusa-m3bp.tar.gz
実行対象サーバー上で初めての場合だけ転送(および解凍)する場合は、「-P」オプションでアーカイブファイルを指定する。
$ retz-client load-app -A asakusa2 -P hdfs:///user/hishidama/asakusa-m3bp.tar.gz -disk 6000
「-disk」は、実行時に確保するディスクサイズを指定する。単位はMB。
アーカイブファイルのサイズと、解凍後のサイズの合計を指定する。
(Retzはこのディスクサイズを確保できるMesosスレーブサーバー上にアーカイブファイルを転送し解凍する)
アーカイブファイルを使う必要が無い場合は、アプリケーション名だけ指定すればよい。
$ retz-client load-app -A asakusa0
retz-clientのrunコマンドでジョブを実行する。この場合、ジョブが終了するまでretz-clientは終わらない。
scheduleコマンドを使うと、ジョブを起動するだけで、retz-clientは終了する。
retz-clientのlistコマンドで、実行した/実行中のジョブ一覧を表示できる。
get-jobコマンドで、実行結果(ログ)を表示できる。
事前に実行対象マシンにAsakusaデプロイメントアーカイブを展開してある前提(load-appでアーカイブファイルを指定しない)で、そのAsakusaアプリケーション(Asakusa on M3BP)をRetz経由で実行する例。
$ retz-client run -A asakusa0 \ -cpu 16 \ -mem 128000 \ -E ASAKUSA_M3BP_ARGS='--engine-conf com.asakusafw.m3bp.thread.max=16' \ -E ASAKUSA_M3BP_OPTS='-Xmx64g' \ -E ASAKUSA_HOME=/home/hishidama/asakusa \ -E YAESS_OPTS='-Duser.home=.' \ -cmd '$ASAKUSA_HOME/yaess/bin/yaess-batch.sh m3bp.example.summarizeSales -A date=2011-04-01'
オプション | 説明 |
---|---|
-A | アプリケーション名。load-appで登録したアプリケーション名を指定する。 |
-cpu | 必要なCPUの数。デフォルトは1。[/2016-10-30] retz-serverの設定のretz.max.cpusより多い値を指定するとエラーになる。[2016-12-11] |
-mem | 必要なメモリー量[MB]。デフォルトは32MB。[/2016-10-30] retz-serverの設定のretz.max.memより多い値を指定するとエラーになる。[2016-12-11] |
-gpu | 必要なGPUの数。デフォルトは0。[2016-12-11] retz-serverの設定のretz.max.gpusより多い値を指定するとエラーになる。 |
-ports | 確保するポート数。デフォルトは0。[2016-12-11] サーバーとして使用するポート番号を確保できる。(バッチアプリケーションでは使わないだろう) 確保されたポート番号は、PORT0, PORT1といった環境変数で受け取れる。 retz-serverの設定のretz.max.portsより多い値を指定するとエラーになる。 |
--prio | アプリケーションの優先度。デフォルトは0。[2016-12-11] 指定できる値は-20〜19。小さいほど優先度が高い。(Unixのniceコマンドに似ている) この機能を使う為には、retz-serverのプランナーの設定を変えておく必要がある。 |
-E | コマンドの実行時に使用する環境変数。 ただし、MESOS_で始まる環境変数やHOMEはMesosによって上書きされる。[2016-12-11] |
-cmd | 実行するコマンド。 相対パスにすると、アーカイブファイルが解凍された場所からの相対パスとして扱われる。 「-E」で定義した環境変数およびRetzが定義した環境変数を使うことが出来る。 |
「-E」や「-cmd」では、Retzが定義した環境変数を使うことが出来る。
これはMesosスレーブサーバー上でコマンドを実行する際に値が入るものなので、retz-clientで指定する際にはシングルクォーテーションで囲む必要がある。
環境変数名 | 説明 |
---|---|
RETZ_PVNAME | アーカイブが解凍された場所(ディレクトリーのパス)。 |
PORT0 PORT1 … |
-portsによって確保されたポート番号。[2016-12-11] |
「-E YAESS_OPTS='-Duser.home=.'
」は、HOMEを指定しないと何故かYAESSが上手く動かないので、指定している。
load-appでAsakusaデプロイメントアーカイブファイルを登録している場合は、以下のような感じ。
$ retz-client run -A asakusa2 \ -cpu 16 \ -mem 128000 \ -E ASAKUSA_M3BP_ARGS='--engine-conf com.asakusafw.m3bp.thread.max=16' \ -E ASAKUSA_M3BP_OPTS='-Xmx64g' \ -E ASAKUSA_HOME='$RETZ_PVNAME' \ -E YAESS_OPTS='-Duser.home=.' \ -cmd '$ASAKUSA_HOME/yaess/bin/yaess-batch.sh m3bp.example.summarizeSales -A date=2011-04-01'
ASAKUSA_HOMEにRETZ_PVNAME(アーカイブが解凍された場所)を指定している。
アプリケーションの実行状況はretz-clientのlistコマンドで確認する。[2017-02-25]
引数を何も指定しない場合、(Retz 0.2.3では)実行中(ステータスがQUEUED,STARTING,STARTED)のものだけ表示される。
$ retz-client list
--statesでステータスを絞り込める。全てを見たい場合はALLを指定する。
$ retz-client list --states ALL
各ジョブの情報(ステータスや要求したリソース等)はretz-clientのget-jobコマンドで確認する。[2017-07-16]
$ retz-client get-job -id タスクID
ちなみに、Retz全体の現在のリソースの状態はhttp://retz-serverのホスト名:9090/statusで確認できる。
アプリケーションを実行した結果として生成されたファイルはretz-clientのget-fileコマンドで取得できる。[2017-02-25]
$ retz-client get-file -id タスクID -path ファイル名
アプリケーションの標準エラーに出力されたログはstderrというファイルで生成されているので、ファイル名にstderrを指定すれば取得できる。
$ retz-client get-file -id タスクID -path stderr
どのようなファイルが生成されているかは、retz-clientのlist-filesコマンドで確認できる。[2017-07-20]
$ retz-client list-files -id タスクID