This is an old revision of the document!
Authors:
J Taylor Childers (ANL HEP)
Tom Uram (ANL ALCF)
Balsam is an interface to a batch system's local scheduler. The each scheduler is abstracted such that Balsam remains scheduler independent.
ARGO is a workflow manager. ARGO can submit jobs to any system on which Balsam is running.
Both ARGO and Balsam are implemented in Python as django apps. This was done because django provides some services by default that are needed such as database handling and web interfaces for monitoring job statuses. django version 1.6 has been used and Python 2.6.6 (with GCC 4.4.7 20120313 (Red Hat 4.4.7-3)).
The communication layer is handled using RabbitMQ and pika. RabbitMQ is a message queue system. Message queues were an easy alternative to writing a custom TCP/IP interface. This requires installing and running a RabbitMQ server. RabbitMQ 3.3.1 is used with Erlang R16B02.
The data transport is handled using GridFTP. This requires installing and running a GridFTP server. Globus version 5.2.0 is used.
Jobs are submitted to ARGO via a RabbitMQ message queue. The messages use the python json serialization format. An example submission is:
'''
{
"preprocess": null,
"preprocess_args": null,
"postprocess": null,
"postprocess_args": null,
"input_url":"gsiftp://www.gridftpserver.com/path/to/input/files",
"output_url":"gsiftp://www.gridftpserver.com/path/to/output/files",
"username": "bob",
"email_address": "[email protected]",
"jobs":[
{
"executable": "zjetgen90_mpi",
"executable_args": "alpout.input.0",
"input_files": ["alpout.input.0","cteq6l1.tbl"],
"nodes": 1,
"num_evts": -1,
"output_files": ["alpout.grid1","alpout.grid2"],
"postprocess": null,
"postprocess_args": null,
"preprocess": null,
"preprocess_args": null,
"processes_per_node": 1,
"scheduler_args": null,
"wall_minutes": 60,
"target_site": "argo_cluster"
},
{
"executable": "alpgenCombo.sh",
"executable_args": "zjetgen90_mpi alpout.input.1 alpout.input.2 32",
"input_files": ["alpout.input.1","alpout.input.2","cteq6l1.tbl","alpout.grid1","alpout.grid2"],
"nodes": 2,
"num_evts": -1,
"output_files": ["alpout.unw","alpout_unw.par","directoryList_before.txt","directoryList_after.txt","alpgen_postsubmit.err","alpgen_postsubmit.out"],
"postprocess": "alpgen_postsubmit.sh",
"postprocess_args": "alpout",
"preprocess": "alpgen_presubmit.sh",
"preprocess_args": null,
"processes_per_node": 32,
"scheduler_args": "--mode=script",
"wall_minutes": 60,
"target_site": "vesta"
}
]
}
'''
soft add +python
(to get python 2.7)wget –no-check-certificate http://pypi.python.org/packages/source/v/virtualenv/virtualenv-13.1.0.tar.gz
mkdir /path/to/installation/argobalsam
export INST_PATH=/path/to/installation/argobalsam
cd $INST_PATH
virtualenv argobalsam_env
module load virtualenv
module load python/2.7
. argobalsam_env/bin/activate
pip
you need a certificate so run mk_pip_cabundle.sh
, then include –cert ~/.pip/cabundle
in all your pip commands.pip install django
pip install django=1.6.2
pip install south
pip install pika
pip install MySql
(only if needed)yum install mysql mysql-devel mysql-server
django-admin.py startproject argobalsam
cd argobalsam
git clone [email protected]:balsam.git argobalsam_git
mv argobalsam_git/* ./
rm -rf argobalsam_git/
argobalsam/settings.py
: from site_settings.mira_settings import *
INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'south', 'balsam_core', 'argo_core', )
python manage.py syncdb
python manage.py schemamigration balsam_core --initial
python manage.py migrate balsam_core --fake
python manage.py schemamigration argo_core --initial
python manage.py migrate argo_core --fake
python manage.py syncdb
5.0
group_identifier
to ArgoDbEntry so that jobs can be grouped together and searched for easier.4.1
4.0
3.2
3.1
3.0