ATLAS日本基礎ネットワーク LCGミドルウエアトレーニングコース
ここでの目標
グリッドではジョブをどこにでも投げることが出来ました。その先々で様々なデータファイルが作られます。それらのデータファイルはジョブレベルではローカルに出来るのですが、それを世界中のどこからでも参照できるようにレプリカカタログに登録する必要があります。
レプリカというのは複製という意味ですが、いろいろなユーザが同じファイルにアクセスする可能性があるので、同じファイルの複製をいろいろなところに置く方が効率が良いという考え方から、ファイルのレプリカを分散配置する仕組みを考えます。このとき、レプリカであっても同じファイルを参照するので、同じファイルのレプリカはそのファイルの識別番号でまず区別されます。GUID(Grid Unique ID)という40バイトの文字列表現が用いられます。
このGUIDというのは16進数の表現ですので実用には向いていません。そのため、そのGUIDに対応する論理ファイル名(LFN)をつけます。この論理ファイル名は対応するGUIDを持っています。
論理ファイル名には別名をつけることが出来ます。UNIXファイルシステムとのアナロジーからシンボリックリンクと呼ばれています。
一方、GUIDには複数のレプリカが対応します。それぞれ、格納されているSEの名前やそこでの格納場所などの情報で表されます。物理ファイル名に該当しますがSURL(Storage URL)と呼ばれます。一つのGUIDには任意数のSURLが割り当てられることになります。
SURLは場所を表していますが、そのレプリカ(複製)にアクセスするためにはそこのSEがサポートする転送プロトコルを知る必要があります。SURLから作られるTURL(Transport URL)という表現を用いることによってファイル転送に必要な情報を得ることが出来ます。
以前使われたRLSは性能上問題があり、それを克服するために新しいレプリカカタログとしてLFCが開発されました。
LFCでは論理名として/gridで始まるUNIXのようなファイル階層構造を用います。/grid/VOnameという構造で、例えば/grid/atlas_jというサブディレクトリがあります。この下に任意のディレクトリを作ることが出来ます。
LFCカタログを使うためにまず環境変数の設定をします。
$ export LCG_CATALOG_TYPE=lfc $ export LFC_HOST=gridtb07.icepp.jp
カタログのタイプとしては以前に使われていたrls(replica location service)と新しいlfcの二つが設定可能ですが、ここではlfcを使います。それに合わせてLFC_HOSTの値を設定します。
これにより、lcg-xxxxというカタログ操作コマンドがLFCを対象として実行されることになります。
カタログを見るにはlfc-lsコマンドを用います。
$ lfc-ls /grid/atlas_j generated kanaya matumoto mishino sakamoto watase
これはUNIXのlsコマンドと同じオプションを持っています。
$ lfc-ls -l /grid/atlas_j
とやると詳細情報を表示しますし、
$ lfc-ls -R /grid/atlas_j
とやると再帰的にサブディレクトリをたどって表示します。
lfc-lsに何も指定しないと使い方が表示されますが、LFC_HOMEを設定しますとそこを表示してくれます。
$ lfc-ls usage: lfc-ls [-cdilRTu] [--class] [--comment] [--deleted] path... $ export LFC_HOME=/grid/atlas_j $ lfc-ls generated ...
マンページが用意されています。
$ man lfc-ls
を試してみましょう。
これから自分の作業をするためのディレクトリを作りましょう。lfc-mkdirコマンドを使います。
$ lfc-mkdir /grid/atlas_j/kondo
kondoのところは皆さんのアカウント名で置き換えてください。lfc-lsコマンドを使って出来たかどうか確認しましょう。
新しく作った場所を自分のLFCのホームとして作業をします。そのため
$ export LFC_HOME=/grid/atlas_j/kondo
としておきましょう。これで例えばlfc-lsコマンドを引数無しに使うとこの場所が表示されます。確認します。
$ export LFC_HOME=/grid/atlas_j/kondo $ lfc-ls -l -d drwxrwxr-x 0 atlas_j0 atlas_j 0 Dec 18 08:22 /grid/atlas_j/kondo
現在のグリッドでは個人のユーザの区別はVOでしか識別されません。つまり全員同じatlas_jのVOメンバーとして作業しています。人が作ったものを消したりすることも出来てしまいます。ご注意ください。
それでは実際にファイルをカタログに登録しましょう。テストのために小さいファイルを作ります。ファイルの大きさには基本的に制限はありません。内容にももちろん制限はありません。
$ echo "test file" > test.txt
こうやって出来たファイルを登録します。
$ lcg-cr --vo atlas_j -d gridtb03.icepp.jp -l lfn:/grid/atlas_j/kondo/test.txt file:`pwd`/test.txt guid:a1bccf5d-bd24-4b4d-b1ed-3cc3d8431051
-dで格納されるSEを指定しています。格納される論理ファイル名を-lで与えています。file:`pwd`/test.txtはローカルなファイルを絶対パスで与えています。コマンドへの応答としてGUIDが返されました。
レプリカが出来ているかどうか確認しましょう。
$ lfc-ls -l -rwxrwxr-x 1 atlas_j0 atlas_j 10 Dec 18 08:44 test.txt
確かにありますね。より詳しく、どこにしまわれているかを表示するためにlcg-lrコマンドを使ってみましょう。
$ lcg-lr --vo atlas_j lfn:/grid/atlas_j/kondo/test.txt srm://dg05.cc.kek.jp/dpm/cc.kek.jp/home/atlas_j/generated/2005-12-18/file1ee7ecb4-3c0d-48de-994a-9f5a4bd08342
srm:...と表示されましたがこれがSURLです。また、
$ lcg-lg --vo atlas_j lfn:/grid/atlas_j/kondo/test.txt guid:a1bccf5d-bd24-4b4d-b1ed-3cc3d8431051
コマンドをlcg-lrからlcg-lgに変えることでGUIDを得ることが出来ました。
作られたレプリカを今度はダウンロードしましょう。ローカルにコピーを作ります。lcg-cpコマンドを使います。
$ lcg-cp --vo atlas_j lfn:/grid/atlas_j/kondo/test.txt file:`pwd`/downloaded.txt $ ls downloaded.txt test.txt $ cat downloaded.txt test file
lcgコマンドでは(lfcコマンドと違って)他のカタログシステムに対しても適用できるようにするために、論理ファイルやローカルファイルについてもそれへのアクセス方法を示すためURLのかたちで指定する必要があります。lfn:とかfile:とかです。
lcg-rep
一つのファイルの複数の論理名を与えるためにLFCではシンボリックリンクコマンドlfc-ln -sを使います。
$ lfc-ln -s /grid/atlas_j/kondo/test.txt /grid/atlas_j/kondo/test.lnk
test.lnkという論理名がtest.txtという倫理名を示すことになります。
$ lfc-ls -l lrwxrwxrwx 1 atlas_j0 atlas_j 0 Dec 18 09:08 test.lnk -> /grid/atlas_j/kondo/test.txt -rwxrwxr-x 1 atlas_j0 atlas_j 10 Dec 18 08:44 test.txt
これはlcgコマンドでも認識されていて別名を表示するlcg-laコマンドを使うと
$ lcg-la --vo atlas_j lfn:/grid/atlas_j/kondo/test.txt lfn:/grid/atlas_j/kondo/test.txt lfn:/grid/atlas_j/kondo/test.lnk
となります。
lcg-delコマンドを使います。
$ lcg-del --vo atlas_j -a lfn:/grid/atlas_j/kondo/test.txt $ lfc-ls $
-aオプションを使ったので、論理名test.txtに関するカタログ全体が消去されました。
lfc-mkdirで作ったディレクトリを削除するときはlfc-rm -rコマンドを使います。
$ lfc-rm /grid/atlas_j/kondo /grid/atlas_j/kondo: Is a directory $ lfc-rm -r /grid/atlas_j/kondo $
グリッドジョブが入力ファイルとして何を使うかをJDLファイルの中に記述することが出来ます。これにより、リソースブローカはそのファイルのレプリカが存在するSEの近くにあるCEにジョブを回そうとします。
InputData = { "lfn:/grid/atlas_j/kondo/test.txt" };
などとします。ただし、これはJDLで記述するだけのもので、ジョブの実行される場所にこのファイルのコピーを作ったりはしてくれません。先に説明したようにlcg-cpでファイルをダウンロードして使う必要があります。この章で説明したデータ管理コマンドはワーカーノードでも同様に使えます。
一方、出力については
OutputData = { [ OutputFile = "myoutput.pool.root"; LogicalFileName = "run10001.pool.root"; StorageElement = "dg05.cc.kek.jp"; ] };
などとしてジョブ終了時に登録することが可能です。(ユーザガイドによるとそうですが、実際には働いていないようです。)
また、
OutputSE = "dg05.cc.kek.jp";
と指定することによって、ジョブがその近くのCEで実行できるよう指示することが出来ます。
Replica Localtion Service (RLS)