系统相关
首页 > 系统相关> > 用于Condor的Sandboxing R(在Linux上)

用于Condor的Sandboxing R(在Linux上)

作者:互联网

我的大学运行一个神鹰计算网格(计算节点正在运行Linux),我想用它在R中运行模拟.问题是网格上只有一些机器安装了R.到目前为止,我看到两个选项,但我不知道如何实现任何一个,所以我希望你能帮助我(请记住,我不是一个系统管理员,并且不能做很多改变设置计算节点):

1)检查带有我的condor提交文件的ClassAds,以要求在具有/usr/bin/R的节点上计算作业.

2)将R及其所有依赖项打包到一个自包含的目录中,该目录可以发送到计算节点并可以运行我的模拟.我已经尝试了几个小时来做​​这个,但Linux版本的R(不同于OSX和Windows版本)似乎针对分布在文件系统中的库运行,我想不出一种实用的方法来收集它们全部进入R可以找到它们的位置.

有任何想法吗?
提前致谢.

解决方法:

最终为我工作的是解决方案(1).在这里,我将讨论如何在我的condor提交文件和我的worker shell脚本中实现(1).

这是shell脚本.重要的变化是通过以下方式检查R是否安装在计算节点上:if [-f /usr/bin/R].如果找到R,我们沿着以返回值0结束的路径向下.如果找不到R,则返回1(这是行的意思,退出0并退出1).

mkdir output
if [ -f /usr/bin/R ]
then
    if $(uname -m |grep '64')
    then
            Rscript code/simulations-x86_64.r $*
    else
            Rscript code/simulations-i386.r $*
    fi

    tar -zcvf output/output-$1-$2.tgz2 output/*.csv
    exit 0
else
    exit 1
fi

现在condor提交文件.关键的变化是倒数第二行(on_exit_remove =(ExitBySignal == False)&&&(ExitCode == 0)).它检查来自计算节点的每个作业的返回值 – 如果返回值不为零(即,如果在计算节点上未找到R),则将作业放回队列中以重新运行.否则,作业将被视为已完成,并将从队列中删除.

universe = vanilla
log = logs/log_$(Cluster)_$(Process).log
error = logs/err_$(Cluster)_$(Process).err
output = logs/out_$(Cluster)_$(Process).out
executable = condor/worker.sh
arguments = $(Cluster) $(Process)
requirements = (Target.OpSys=="LINUX" && regexp("stat", Machine))
should_transfer_files = YES
when_to_transfer_output = ON_EXIT_OR_EVICT
transfer_input_files = code, R-libs, condor, seeds.csv
transfer_output_files = output
notification = Never
on_exit_remove = (ExitBySignal == False) && (ExitCode == 0)
queue 1800

标签:linux,r,condor
来源: https://codeday.me/bug/20190709/1411167.html