DRMAA (Distributed Resource Management Application API) appears to be an open API that describes a specification for submission and management of work submitted to some grid/cluster. If your scheduler is DRMAA compliant, my guess would be that using snakemake
's --drmaa
flag will afford you the additional controls exposed by that API.
As mentioned in your question with DRMAA support, a Ctrl+C on one's console would be passed on to the grid to kill or stop submitted jobs. A task that would otherwise require use of the qdel
command on Sun Grid Engine
, for example.
I could see why the suggestion would be to enable --drmaa
where possible as it's likely to expose functionality (such as control of jobs, and availability of logs and errors) that makes the submission and management of jobs a little easier for you and snakemake
. Perhaps someone with snakemake
experience can explain a little more, but I hope this helps?
For what it's worth, I use Sun Grid Engine without DRMAA and it's quite a pain to get good information out of qstat
, and its qacct
log format is quite possibly the worst file format I have ever encountered. I suspect DRMAA provides a nice (or at least more reasonable) API for snakemake
(and others) to get at this information more readily.
Appended:
Under the hood, the flags are parsed by Python's argparse
module in the __init__.py
. A mutually exclusive group of options forces a selection of --cluster
or --drmaa
(or --cluster-sync
).
--cluster
or -c
requires you to specify an argument; the command for which to submit a job on your cluster (the example names qsub
). The --drmaa
flag just seems to indicate to snakemake
that DRMAA is to be used, which doesn't change a lot in terms of how the command you run from your console is processed in the __init__.py
or workflow.py
.
However, when it is time to interface with your scheduler (as specified in scheduler.py
), an elif
statement checks whether you're in some form of cluster mode and the else
catches the case where you've raised the --drmaa
flag instead.
Here's where the magic happens, as now your job is submitted with the DRMAAExecutor
as specified in executors.py, instead of the default executor.
Without investigating much more, I can see that the DRMAAExecutor
features some more class attributes and exposes additional functions when compared to the others.
Hope this is of more use? Again, I've only just looked at the code myself but in lieu of a snakemake
user chiming in, I thought I'd have a nose.
snakemake
will afford you the additional controls as supported by that API -- including as per your question, the ability to pass on a Ctrl+C at your console to the grid -- a scenario that would require use of theqdel
command on Sun Grid Engine, for example. So if you've infrastructure with a scheduler that has DRMAA support, I can see why you might as well use--drmaa
. $\endgroup$