S-JIS[2016-09-17/2017-07-20] 変更履歴

Retzメモ

Retzは、ジョブをキューイングして実行するツール。


概要

Retzは、ジョブ(Unixコマンド・シェル)をキューイングして実行するツール。OSS。

自分は「Retz」を「レッツ」と呼んでいるが(浦和レッズみたいw)、Retzの開発者は「レツ」と呼んでいるっぽい?(ロゴも「列」だし)

Retzはリソース管理を行い、リソースが空いているサーバー上でコマンド(シェル)を実行する。(リソースが空いていなかったら、空くまで待つ)
つまり、Retzに対して実行したいコマンドおよび必要なCPU数やメモリー量等を指定すると、複数のサーバーの中からリソースが空いているサーバーを見つけ出し、そのサーバー上でコマンドを実行する。

RetzはApache Mesosを使ってリソース管理を行っている。
つまり、Retzがリソースを探す対象(コマンドを実行するサーバー)は、Mesosクラスター(Mesosエージェントをインストールしているサーバー)ということになる。


サーバー構成(インストール対象)の概要

Retzは以下のようなサーバー構成で動く。

機能名 説明 サーバー数
Mesosマスター Mesosのマスター(常駐)。 1台
ZooKeeper ZooKeeper(常駐)。Mesosが使う。 冗長構成なら最低3台
retz-server Retzのマスター(常駐)。 1台
Mesosエージェント Mesosのスレーブ(常駐)。実際にコマンドを実行するサーバーに入れる。 複数
retz-client Retzへの命令を実行するツール。 複数可

機能的には上記のように複数のサーバーが必要になるが、1台のサーバーに全てインストールして使うことも可能。
Mesosマスター+ZooKeeper(1台でスタンドアローン)+retz-serverで数GBのメモリーがあれば足りるらしい。

内部的には以下のように動いていると思われる。
retz-clientを起動し、コマンド(シェル)を指定→retz-serverに通信→Mesosで空いているリソースを探索→Mesosでコマンド(シェル)を実行


使用方法の概要

Retzでコマンドを実行する為に、“アプリケーション”(実行に必要なファイル(例えばjarファイル)があれば、そのアーカイブ)をRetzに登録する必要がある。
Retzに登録する際にアプリケーション名(appName)を付ける。
コマンドを実行する時にそのアプリケーション名を指定する。Retzは、コマンドを実行するサーバーを決めた後、そのサーバーにアーカイブを転送し(アーカイブがtar.gzであれば解凍し)、コマンドを実行する。

$ retz-client load-app -A example1 -F http://example.com/example1.tar.gz	…アプリケーションの登録
$ retz-client run -A example1 -cmd 'bin/example1.sh'                    	…コマンドの実行

load-appの「-F」でアーカイブファイルを指定すると、コマンドを実行するときに毎回アーカイブがダウンロード・解凍される。
「-P」でアーカイブファイルを指定すると、各サーバーの初回だけダウンロード・解凍される。
コマンドを実行するのにアーカイブファイルが不要な場合は、「-F」や「-P」を省略する。その場合、実行に必要なファイルは、全Mesosスレーブ(Mesosエージェントの入っている全サーバー)に事前に配布(インストール・デプロイ)しておく必要がある。

load-appの「-F」や「-P」では、Mesosクラスターの各スレーブサーバーからアクセス可能な場所(ダウンロードの為のURL)を指定する。
なので、httpやhdfs(maprfs)でアクセスできる場所にアーカイブを置いておく必要がある。 (httpにしようと思ったら、どこかにウェブサーバーを立てて、そこにアーカイブを置いておく必要があるということ)

runの「-cmd」で指定したコマンドのパスは、アーカイブを解凍した場所からの相対パスとして扱われる。
ただ、絶対パスで指定することも可能なので、アーカイブのダウンロード・解凍を必要としない使い方の場合は、絶対パスで指定する。


技術メモへ戻る
メールの送信先:ひしだま