加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

用于Condor的Sandboxing R(在Linux上)

发布时间:2020-12-13 23:24:11 所属栏目:Linux 来源:网络整理
导读:我的大学运行一个神鹰计算网格(计算节点正在运行 Linux),我想用它在R中运行模拟.问题是网格上只有一些机器安装了R.到目前为止,我看到两个选项,但我不知道如何实现任何一个,所以我希望你能帮助我(请记住,我不是一个系统管理员,并且不能做很多改变设置计算节点
我的大学运行一个神鹰计算网格(计算节点正在运行 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读