7.2 LHAASO
概述
LHAASO实验目前有两个计算集群,分别是北京本地计算集群和稻城海子山计算集群。北京本地计算集群是LHAASO实验数据处理的中心站点,负责LHAASO实验数据的存储、处理、分析以及长期保存等功能;稻城海子山计算集群主要用于对在线获取的数据进行快速预处理和压缩。
由于稻城计算集群主要由特殊用户使用,因此本手册主要介绍北京本地计算集群使用情况。
7.2.1 计算服务
申请计算集群账号
请参考
第2章内容
,得到LHAASO实验计算负责人同意后,用户可获得afs账号。作业提交和管理
请参考第
3.2.1
小节中关于作业提交的说明。此外计算平台还提供LHAASO用户运行Hadoop作业,请参考
3.2.3
小节中关于hadoop作业提交的说明。
7.2.1.1 环境设置
计算集群上使用HepJob工具集
来管理作业,在使用之前,建议首先进行环境变量设置,具体方法为:
HepJob涉及的所有命令在/afs/ihep.ac.cn/soft/common/sysgroup/hep_job/bin
下,建议将该目录加入用户环境变量 PATH 中:
bash 用户
$ export PATH=/afs/ihep.ac.cn/soft/common/sysgroup/hep_job/bin:$PATH
tcsh 用户
$ setenv PATH /afs/ihep.ac.cn/soft/common/sysgroup/hep_job/bin:$PATH
提交 HTCodor 计算集群的作业文件必须具备可执行权限。可使用以下命令查看和赋予文件权限:
查看文件权限
$ /bin/ls –l job.sh -rw-r--r-- 1 jiangxw u07 85 Aug 29 18:23 job.sh
上面的例子中 job.sh 不具有可执行权限,执 行如下命令可赋予文件可执行权限
$ /bin/chmod +x job.sh
7.2.1.2 计算作业提交
在作业提交和查询时,需要指定所使用的用户组,即-g选项。对于北京集群,须指定使用lhaaso组;对于稻城集群,须指定使用lhaasorun组。具体使用方法如下:
1)北京计算集群作业提交
作业提交
$ hep_sub -g lhaaso jobfile
作业查询
$ hep_q -g lhaaso -u userid
作业删除
$ hep_rm -g lhaaso jobid
需要注意:
-g lhaaso
并不是必选项,如果集群账号的主组是lhaaso,则不需要添加此选项。查看集群账号主组的方法是:
$ id username
比如,查看km2amc账号的信息:
$ id km2amc
uid=13014(km2amc) gid=580(lhaaso) groups=580(lhaaso),340(lhaasorun)
这里,gid即为km2amc账号的主组,这里是lhaaso,则提交作业不需要再加-g lhaaso
选项。
如果想要修改集群账号的主组,由ybj改为lhaaso,请向ihep_computing_service@ihep.ac.cn发送邮件申请,并抄送吴超勇老师wucy@ihep.ac.cn。
2)稻城计算集群作业提交
作业提交
$ hep_sub -g lhaasorun jobfile
作业查询
$ hep_q -g lhaasorun -u userid
作业删除
$ hep_rm -g lhaasorun jobid
7.2.1.3 作业提交高级用法
对于需要批量提交的作业,可使用以下方法进行作业提交,可极大优化提交效率。
实例说明:此实例所要解决的问题是原始数据目录下子文件很多时,需大批量产生作业脚本,再提交脚本运行,造成集群卡顿的问题。
解决方式:使用带参数批量提交作业,将脚本数量较少到几个。
这里提供两种方式:非Cluster的方式提交和Cluster的方式提交,其中Cluster的方式是目前hep_sub支持的,能够大大提升作业提交的速度。
比如原始目录下有很多个dat文件,需要分别提交作业。
Raw_1.dat Raw_2.dat Raw_3.dat ...
方法1:非Cluster的方式提交
1)首先需要提前写好要执行的带外部输入变量的运行脚本(test.sh)
$ cat test.sh
rawfile=you want
outfile=you want
./run.exe ${rawfile}/${1} ${outfile}/${1}.root
2)带参数提交作业(subjob.sh)
$ cat subjob.sh
run=1
run1=3
while [ $run -le $run1 ]
do
hep_sub test.sh -g lhaaso -argu “Raw_${run}.dat”
run=`expr $run + 1`
done
方法2:使用Cluster的方式提交
1)首先需要提前写好要执行的带外部输入变量的运行脚本(test.sh)
$ cat test.sh
procid=$1
raw_id=$(expr $1 + 1)
input=”Raw_${raw_id}.txt”
rawfile=you want
outfile=you want
./run.exe ${rawfile}/${input} ${outfile}/${1}.root
2)使用Cluster方式提交作业(subjob.sh)
$ hep_sub test.sh -g lhaaso -argu "%{ProcId}" -n 3
7.2.1.4 北京计算集群作业时长及优先级
1)LHAASO作业时长及优先级 在登录节点上,可运行命令,按组查看作业时长限制. 具体命令为:
$ hep_clus -g lhaaso --walltime
2)作业优先级设置
对于北京计算集群,为保证公用账号的作业任务,依据LHAASO实验组要求,设定一些账号的作业优先级。具体情况为:
账号名 | 作业优先级数量 |
---|---|
wfctamc | 2000 |
lhaasorec | 2000 |
wcdarec | 1000 |
wcdaplusrec | 500 |
wfctarec | 400 |
gmxiang | 500 |
7.2.2 存储服务
针对实验数据使用的不同场景,计算集群提供不同的存储系统。目前按数据访问场景分为四类,分别是home目录,软件目录,实验数据存储目录,用户脚本存储目录。
数据存储场景 | 用途 | 目录名称 | 空间限额/文件数限额 | 访问方式 | 查看使用份额命令 |
---|---|---|---|---|---|
Home目录 | afs账号配置文件,脚本 | /afs/ihep.ac.cn/users/a-z/username | 500MB/none | 直接访问 | fs listquota /afs/ihep.ac.cn/users/username |
软件目录 | 公共软件 | /cvmfs/lhaaso.ihep.ac.cn/anysw | - | 直接访问 | 只有实验联系人有权限发布软件 |
实验数据存储 | 用于存放实验原始数据,重建数据,部分分析数据,模拟数据,刻度数据 | /eos/lhaaso | - | 无法直接访问,需通过xrootd方式访问 | - |
实验数据存储 | 实验数据,如一些模拟作业数据,不能够使用xrootd协议访问的 | /lhaasofs/data | - | 直接访问 | - |
个人实验数据存储 | 存储个人实验数据 | /eos/user/a-z/username | 1TB/25万个 | 无法直接访问,需通过xrootd方式访问 | eos quota |
个人工作目录 | 用于存放用户脚本,作业日志输出文件 | /home/lhaaso/username | 200GB/30万个 | 直接访问 | homequota |
在申请集群账号时,用户通常只有/afs/ihep.ac.cn/users/a-z/username和/eos/user/a-z/user,如果需要申请/lhaaosofs/user/username目录,请向陈松战(chensz@ihep.ac.cn)和(zham@ihep.ac.cn)两位老师申请,申请批准后,将会建立该目录账号。
7.2.2.1 /eos/lhaaso实验数据目录说明
目录名称 | 空间限额/文件数限额 | 查看使用份额的命令 | 存放用途 | 负责人 |
---|---|---|---|---|
/eos/lhaaso/raw | none/none | eos quota /eos/lhaaso/raw | 原始数据 | 计算中心 |
/eos/lhaaso/spt | none/none | eos quota /eos/lhaaso/spt | 各实验单粒子数据 | 计算中心 |
/eos/lhaaso/decode | none/none | eos quota /eos/lhaaso/decode | decode数据 | LHAASO组 |
/eos/lhaaso/rec | none/none | eos quota /eos/lhaaso/rec | 重建数据 | LHAASO组 |
/eos/lhaaso/cal | none/none | eos quota /eos/lhaaso/cal | 标定参数数据 | LHAASO组 |
/eos/lhaaso/monitor | none/none | eos quota /eos/lhaaso/monitor | 数据质量监测数据及月影和Crab监测数据 | LHAASO组 |
上述每个目录下设 km2a wcda km2a wcda km2a wcda wcdapls wfcta wfcta ,每个目录由相应实验专人负责。数据 按年/月/日/分级目录存储。
7.2.2.2 磁带数据
LHAASO 目前使用的 Castor 和 stager 服务器是 nslhaaso.ihep.ac.cn, 磁带库服务器是 tplhaaso01.ihep.ac.cn。磁带备份目录是在 /castor/ihep.ac.cn/lhaaso/raw
,目前是按照年/月
即 yyyy/mm
进行存储。
7.2.2.3 EOS使用说明
EOS文件系统是一套基于xrootd框架的面向EB级数据存储的分布式文件系统。具体情况请参考3.3.5 EOS文件存储
。
1)EOS访问文件
xrootd协议访问EOS系统,访问方式为:
root://EOS_MGM_URL//filepath
说明:
- Xrootd默认使用用1094端口
- 在端口后需要使用”//”
- filepath需要使用绝对路径
此处的EOS_MGM_URL为实例的服务器地址,北京EOS集群服务器地址为:root://eos01.ihep.ac.cn,稻城EOS集群服务器地址为:root://lhmteos01.lhaaso.ihep.ac.cn,该环境变量已配置在登录节点和计算节点中,可通过以下命令是否存在:
北京集群:
$ echo $EOS_MGM_URL
root://eos01.ihep.ac.cn/
如果不存在,请自行设置:
$ export EOS_MGM_URL=root://eos01.ihep.ac.cn/
稻城集群:
$ echo $EOS_MGM_URL
root://lhmteos01.lhaaso.ihep.ac.cn/
如果不存在,请自行设置:
$ export EOS_MGM_URL=root://lhmteos01.lhaaso.ihep.ac.cn/
提醒:可以将EOS_MGM_URL环境变量,写入~/.bash_profile文件中,这样每次登录时,会自动加载。
$ echo "export EOS_MGM_URL=root://eos01.ihep.ac.cn/" >> ~/.bash_profile
注意:当用户在使用/eos盘时,只能通过eos命令来访问。
eos命令与系统命令对照表
Eos命令(推荐使用) | Linux命令(不可用) | 说明 |
---|---|---|
eos ls | ls | 查看文件列表 |
eos cp | cp | 拷贝文件 |
eos mv eos file rename | mv | 移动文件 |
eos cp /eos/user/myfile -|cat | cat | 查看文件内容 |
eos cp /eos/user/myfile -|tail | tail | 查看文件内容 |
eos mkdir | mkdir | 创建文件夹 |
eos touch | touch | 创建文件 |
eos newfind -f /eos/mypath | 无 | 查找某一个目录下所有文件列表(包含子目录) |
eos newfind -d /eos/mypath | 无 | 查找某一个目录下所有目录列表(包含子目录) |
eos ln | ln | 创建软链接 |
eos quota | 无 | 查看个人空间使用大小(/eos/user/a-z/username) |
eos stat | -f | 判断文件是否存在,如果不存在,返回值为空 |
eos file info | stat | 可查看文件的Modify修改时间和Change状态改动时间 |
其中, Linux 下的 cat
和 tail
命令 可以用 xrdfs 相应命令代替, 需要在 xrdfs
后面加上 EOS 的域名, 比如 LHAASO EOS, 就是 eos01
或 eos01.ihep.ac.cn
:
- 查看文件全部内容:
xrdfs eos01 cat /eos/user/myfile
- 查看文件尾部 N bytes 内容:
xrdfs eos01 tail -c N /eos/user/myfile
- 实时查看文件尾部内容:
xrdfs eos01 tail -f /eos/user/myfile
2)作业中访问EOS
作业中使用xrootd的的前提是作业中使用xrootd读写文件的前提是物理软件需要支持xrootd协议。 对于ROOT软件,目前已支持xrootd方式,但需要注意目前有三种方式产生Tfile对象:
- 声明:
TFile(PATHNAME)
--不支持xrootd - 新文件:
new TFile (PATHNAME)
-- 不支持xrootd - 打开方法:
TFile::Open(PATHNAME)
--支持xrootd
举例:
对于ROOT格式的文件,可以直接用TFile::Open打开:
TFile *filein = TFile::Open("root://eos01.ihep.ac.cn//eos_absolute_path_filein_name.root")
对于非ROOT格式的文件,也可以用ROOT的TFile类可以直接读写,需要在文件名后增加一个参数“?filetype=raw"。举例:
void rawfile(){
int size;
char buf[1024];
TFile *rf = TFile::Open("root://eos01.ihep.ac.cn//eos/user/c/chyd/set.log?filetype=raw");
size = rf->GetSize();
printf("size is %d\n", size);
memset(buf, 0, 1024);
rf->ReadBuffer(buf, 1024);
printf("%s\n", buf);
rf->Close();
}
3)支持xroot的hadd
hadd
支持通过xrootd方式对文件进行合并,需要首先source环境变量,之后通过histadd
命令就可以使用了。具体使用方式为:
$ source /cvmfs/lhaaso.ihep.ac.cn/anysw/slc5_ia64_gcc73/external/envf.sh
$ histadd -h
Function: An alternative "hadd" made by <zhiguo.yao@ihep.ac.cn>
SYNOPSIS:
histadd [ -o outfile ]
[ -topdir | +topdir ] [ -folder folder1 [ -folder folder2 ... ] ]
[ -tree | +tree ]
[ -list listfile1 [ -list listfile2 ... ] ]
[ -inclhist histname1 [ -inclhist histname2 ... ] ]
[ -exclhist histname1 [ -exclhist histname2 ... ] ]
[ filename1 [ filename2 ... ] ]
BRIEF EXPLANATIONS:
-topdir: Add objects in the top directory of every root file (default).
+topdir: Ignore all objects in the top directory.
-folder folder: Activate adding the TFolder "folder".
*** Note: Only folders specfied by option "-folder folder" are added.
-tree: Add TTree objects (default).
+tree: Ignore all TTree objects.
-inclhist histname: include histname in the top directory. Default: all.
-exclhist histname: exclude histname in the top directory. Default: nothing.
-list listfile: Add every lines in "listfile" to the input list.
*** Note: Lines with leading "#" will be ignored!
filename: Add "filename" to the input list.
*** Note: (Many) list files and file names can be specified simultanously.
*** Note: EOS files will be automatically accessed via the xrootd protocol.
7.2.3 LHAASO提交作业实例
1)应用程序:支持xrootd访问/eos盘文件
- 确保在使用ROOT打开文件时,使用TFile::Open()方式打开
- 对于EOS盘上的文件,传入参数时,添加EOS_MGM_URL=“root://eos01.ihep.ac.cn/”前缀
- 记住调用TFile::Close()关闭文件
2)作业脚本:批量提交
- hep_sub test.sh -g lhaaso -argu "%{ProcId}" -n number
7.2.4 注意事项
1)单一目录下不要有过多(几万以上)数据或脚本等文件,建议按照一定规律创建子目录,将文件放在子目录下,单目录文件数量控制在1000以内。
2)作业中避免使用ls *或rm *之类的操作,如果确需使用,建议在登录节点上提前将需要用到的目录生成一个文件列表,在作业中通过查找文件列表来访问数据。另外在登录节点,如果只需查看文件名信息,可以使用/bin/ls代替ls命令,可以加快速度。如果需要查看/eos目录,则使用“eos ls 目录绝对路径”,速度会更快。
3)任务脚本写成一个模板,将要分析的文件名、数据目录和其他程序参数作为脚本参数在用 hep_sub 提交时传递给脚本,例如 hep_sub my_job.sh -argu "aaa" "bbb", 而不用生成许多类似的脚本, 如 my_job_aaa.sh、my_job_bbb.sh。
4)直接将生成的数据文件放在 eos 上(可以使用xrootd方式读写文件), 后面有需要可以用 eos file rename 将文件移动到指定目录。
5)对于hadd操作,避免使用“hadd *.root”,这样如果目录内文件很多,对文件系统压力会非常大。建议提前将需要合并的文件生成到一个列表里,再用hadd进行合并;而对于root文件存在于/eos上,因为hadd操作可以支持xrootd方式的,所以只需要在文件名(绝对路径)前面增加root://eos01.ihep.ac.cn/这个前缀就可以。
6)体积不大的个人程序文件(几MB) 如 my_program 如果没有存放在cvmfs上,则可以在脚本中用eos cp命令将程序复制到运行节点的/tmp/目录下,在复制之前可以先判断是否存在,不存在时再复制,然后运行/tmp/my_program my_para。
7.2.5 稻城集群使用
注意:稻城现在的个人目录在WCDA开始比较正式的快速重建后将会被全部清除掉,仅只保留wcdarec ,wcdaplsrec 两个公共目录(理论上)。
1)稻城计算集群说明
目前稻城计算集群有1748个cpu核,1.63PB存储空间,有2个登录节点。
2)提交稻城集群作业步骤
a)使用afs账号登录稻城登录节点
节点名:lhmtlogin01.lhaaso.ihep.ac.cn,lhmtlogin02.lhaaso.ihep.ac.cn
登录方式:afs账号名,密码
目前已建立wcdarec账号,路径是/eos/daocheng/user/w/wcdarec。
b)拷贝作业脚本
目前稻城计算节点上有两个挂载目录,一个是afs目录,另一个是/eos/daocheng的存储目录。所以,需要把相关作业脚本通过rsync命令拷贝到/eos/daocheng下面。
c)提交作业
由于afs目录不能写文件,如果要使用afs目录来提交作业的话,需要重定向一下作业输出和错误输出文件位置。
可以直接在/eos/daocheng目录下提交作业。
d)作业拷回
目前只支持通过rsync 拷贝回本地。
3)作业提交及查询命令
提交作业:
$ hep_sub -site daocheng -g lhaasorun -os SL7 myjob.sh
查询作业:
$ hep_q -site daocheng -u username
删除作业:
$ hep_rm -stie daocheng jobid
查看作业held原因:
$ hep_q -site daocheng -u username -hold
7.2.5.1 XCache 缓存代理服务
为降低访问时延, 计算中心为 LHAASO 用户访问稻城 EOS 数据提供了 XCache
缓存代理服务, 服务器地址是 lhaasocache.ihep.ac.cn
。使用方法也很简单, 在访问稻城数据时, 将稻城 EOS 地址直接替换为前面的地址即可。
root://lhmteos01.lhaaso.ihep.ac.cn//eos/daocheng/user/l/lihaibo/bill.root
替换为:
root://lhaasocache.ihep.ac.cn//eos/daocheng/user/l/lihaibo/bill.root
1)在北京登录节点,通过root访问稻城EOS集群数据
登录lxlogin,执行:
$ root -l root://lhaasocache.ihep.ac.cn//eos/daocheng/user/l/lihaibo/bill.root
2)查看稻城EOS集群数据情况
首先登录lxlogin,执行:
$ /usr/bin/xrdfs root://lhaasocache.ihep.ac.cn/
进入xrdfs的命令行后,可以敲入help查看相关命令,比如查看目录情况:
[lhmteos01.lhaaso.ihep.ac.cn:1094] / > ls /eos/daocheng/raw
注意:
- 目前采用的缓存代理服务,只提供只读权限,即只能查看稻城EOS集群上的文件,而不能进行修改。
- 由于目前是缓存代理服务,所以初次访问时速度并不会增快,随着数据访问越来越多,越来越频繁,缓存的数据也就越多,缓存命中率也就越高,届时文件访问速度也会有明显改善。
- 如果使用了 cvmfs 上的 lhaaso 环境, 默认会使用 cvmfs 上的 xrdfs, 由于目前 cvmfs 上的依赖包不全, 会找不到相应的库, 所以建议直接使用系统自带的 xrdfs -
/usr/bin/xrdfs
.
FAQ
- 不要在~/.bashrc中source存储文件系统(如/workfs,/)的文件,因为这样会在登录到集群时,如果某个存储文件系统盘卡住,会造成无法登录或登录时间太长。比如这种不建议:
$cat ~/.bashrc $source /workfs/ybj/username
- 有些作业删除后显示“X”状态,对于这种作业,需要使用
hep_rm -forcex jobid
来删除这种状态的作业。