使用snakemake为集群作业移动元数据存储。

问题描述 投票:0回答:1

我正在使用 snakemake 将作业从 AFS 文件系统提交到 HTCondor 队列。提交开始时很好。作业提交并成功完成。但是到了一定程度之后,提交就崩溃了,出现了以下错误。

OSError: [Errno 27] File too large: '/afs/cern.ch/work/a/avenkate/private/MyKstTauTau/.snakemake/metadata/cm9vdDovL2Vvc2xoY2IuY2Vybi5jaC8vZW9zL2xoY2IvdXNlci9hL2F2ZW5rYXRlL0tzdFRhdVRhdS9Cc0JrZ01DL1ByZXNlbC8yMDE2X01VLzIwMjBfMDQvMzY1OTMyLzM2NTkzMjE4Ny9udHVwbGVfVE0ucm9vdA=='

当我查到这个错误的时候,我了解到... https:/sites.google.comastanford.edurcpediahow-do-iwhy-do-i-keep-getting-errno-27-file-to-large。 这和 AFS 有关,而不是 snakemake。似乎是AFS中一个目录的文件数量有限制(错误信息本身就有误导性,这个元数据文件的大小是以字节为单位的。这个元数据文件的文件大小是以字节为单位的。但是文件名很长)。)

所以我想知道有没有什么办法可以解决元数据文件堆积这个问题。当崩溃发生时,我的元数据目录里有10268个文件,而且都是一次运行snakemake的结果。

有没有可能让 snakemake 不把元数据文件存储在本地,而是存储在作业运行的任何节点的临时目录中?我在命令行选项中看到我们可以指定 --shadow-prefix 来告诉 snakemake 在哪里存放影子目录。元数据也有类似的功能吗?

如果有任何关于这个问题的意见,我将非常感激。我的提交命令是

snakemake     --cluster 'condor_qsub -V -l procs={threads}' --forceall    --latency-wait 30     --rerun-incomplete     --max-jobs-per-second 100     --printshellcmds     --restart-times 0     --local-cores 8     --keep-going     -j 100     -s Snakefile_Data   --shadow-prefix $TMPDIR/MyKstTauTau.snakemake```
snakemake
1个回答
0
投票

我从来没有使用过AFS,但它的工作原理似乎与slurm类似。我猜测这些元数据文件是作业的stdout和stderr。你应该可以用-o和-e来重定向stdout和stderr的存储位置,按照这个方法。人页.

所以像这样的东西应该让 snakemake (实际上是 AFS) 不做任何这些文件。

snakemake ... --cluster "condor_qsub -o /dev/null -e /dev/null ..."

编辑:

所以元数据是 的stdout和stderr,我的错。我实在想不出一个 "真正 "的解决方案,但这里有两个选择,你可以试试。

  1. 简单的清理元数据 snakemake --cleanup-metadata. 如果你幸运的话,有很多以前运行的东西可以删除,解决了这个问题!
  2. 少用并行作业。尽管100个作业并不多,但每个作业都会有一些元数据被跟踪。所以少跑作业就意味着少用元数据文件。
© www.soinside.com 2019 - 2024. All rights reserved.