ATLAS日本基礎ネットワーク LCGミドルウエアトレーニングコース

第四回 レプリカカタログ~データの扱い

ここでの目標

1.レプリカカタログの概要

1.1.レプリカカタログとは

グリッドではジョブをどこにでも投げることが出来ました。その先々で様々なデータファイルが作られます。それらのデータファイルはジョブレベルではローカルに出来るのですが、それを世界中のどこからでも参照できるようにレプリカカタログに登録する必要があります。

レプリカというのは複製という意味ですが、いろいろなユーザが同じファイルにアクセスする可能性があるので、同じファイルの複製をいろいろなところに置く方が効率が良いという考え方から、ファイルのレプリカを分散配置する仕組みを考えます。このとき、レプリカであっても同じファイルを参照するので、同じファイルのレプリカはそのファイルの識別番号でまず区別されます。GUID(Grid Unique ID)という40バイトの文字列表現が用いられます。

このGUIDというのは16進数の表現ですので実用には向いていません。そのため、そのGUIDに対応する論理ファイル名(LFN)をつけます。この論理ファイル名は対応するGUIDを持っています。

論理ファイル名には別名をつけることが出来ます。UNIXファイルシステムとのアナロジーからシンボリックリンクと呼ばれています。

1.2.ファイルの実体との対応

一方、GUIDには複数のレプリカが対応します。それぞれ、格納されているSEの名前やそこでの格納場所などの情報で表されます。物理ファイル名に該当しますがSURL(Storage URL)と呼ばれます。一つのGUIDには任意数のSURLが割り当てられることになります。

SURLは場所を表していますが、そのレプリカ(複製)にアクセスするためにはそこのSEがサポートする転送プロトコルを知る必要があります。SURLから作られるTURL(Transport URL)という表現を用いることによってファイル転送に必要な情報を得ることが出来ます。

1.3.LCGファイルカタログ(LFC)

以前使われたRLSは性能上問題があり、それを克服するために新しいレプリカカタログとしてLFCが開発されました。

LFCでは論理名として/gridで始まるUNIXのようなファイル階層構造を用います。/grid/VOnameという構造で、例えば/grid/atlas_jというサブディレクトリがあります。この下に任意のディレクトリを作ることが出来ます。

2.カタログを使う用意

LFCカタログを使うためにまず環境変数の設定をします。

$ export LCG_CATALOG_TYPE=lfc
$ export LFC_HOST=gridtb07.icepp.jp

カタログのタイプとしては以前に使われていたrls(replica location service)と新しいlfcの二つが設定可能ですが、ここではlfcを使います。それに合わせてLFC_HOSTの値を設定します。

これにより、lcg-xxxxというカタログ操作コマンドがLFCを対象として実行されることになります。

3.カタログを調べる

カタログを見るには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

を試してみましょう。

4.ディレクトリを切る

これから自分の作業をするためのディレクトリを作りましょう。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メンバーとして作業しています。人が作ったものを消したりすることも出来てしまいます。ご注意ください。

5.ファイルを登録する(アップロード)

それでは実際にファイルをカタログに登録しましょう。テストのために小さいファイルを作ります。ファイルの大きさには基本的に制限はありません。内容にももちろん制限はありません。

$ 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を得ることが出来ました。

6.カタログファイルのローカルコピーを作る(ダウンロード)

作られたレプリカを今度はダウンロードしましょう。ローカルにコピーを作ります。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:とかです。

7.レプリカを作る

lcg-rep

8.論理名に別名を与える(シンボリックリンク)

一つのファイルの複数の論理名を与えるために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

となります。

9.カタログを削除する

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
$

10.グリッドジョブの中でのカタログの使用

グリッドジョブが入力ファイルとして何を使うかを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で実行できるよう指示することが出来ます。

11.古いカタログシステム

Replica Localtion Service (RLS)



2005年12月22日更新