<html> <b>Authors:</b><br> J Taylor Childers (ANL HEP)<br> Tom Uram (ANL ALCF)<br> </html>
<html> <p>Balsam is an interface to a batch system's local scheduler. The each scheduler is abstracted such that Balsam remains scheduler independent.</p>
<p>ARGO is a workflow manager. ARGO can submit jobs to any system on which Balsam is running.</p>
<p>Both ARGO and Balsam are implemented in <a href=“http://www.python.org/” target=“_blank”>Python</a> as <a href=“http://www.djangoproject.com/” target=“_blank”>django</a> apps. This was done because <a href=“http://www.djangoproject.com/” target=“_blank”>django</a> provides some services by default that are needed such as database handling and web interfaces for monitoring job statuses. <a href=“http://www.djangoproject.com/” target=“_blank”>django</a> version 1.6 has been used and <a href=“http://www.python.org/” target=“_blank”>Python</a> 2.6.6 (with GCC 4.4.7 20120313 (Red Hat 4.4.7-3)).</p>
<p>The communication layer is handled using <a href=“http://www.rabbitmq.com/” target=“_blank”>RabbitMQ</a> and <a href=“http://github.com/pika/pika” target=“_blank”>pika</a>. <a href=“http://www.rabbitmq.com/” target=“_blank”>RabbitMQ</a> is a message queue system. Message queues were an easy alternative to writing a custom TCP/IP interface. This requires installing and running a <a href=“http://www.rabbitmq.com/” target=“_blank”>RabbitMQ</a> server. <a href=“http://www.rabbitmq.com/” target=“_blank”>RabbitMQ</a> 3.3.1 is used with Erlang R16B02.</p>
<p>The data transport is handled using <a href=“http://toolkit.globus.org/toolkit/docs/latest-stable/gridftp/” target=“_blank”>GridFTP</a>. This requires installing and running a <a href=“http://toolkit.globus.org/toolkit/docs/latest-stable/gridftp/” target=“_blank”>GridFTP</a> server. Globus version 5.2.0 is used.</p> </html>
<html>Jobs are submitted to ARGO via a <a href=“http://www.rabbitmq.com/” target=“_blank”>RabbitMQ</a> message queue. The messages use the python <a href=“http://docs.python.org/2/library/json.html” target=“_blank”>json</a> serialization format. An example submission is: </html>
'''
{
"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', )
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'your_table_name_goes_here', 'USER': 'your_login', 'PASSWORD': 'your_password', 'HOST': '127.0.0.1', 'PORT': '', 'CONN_MAX_AGE': 2000000, } }
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
python manage.py migrate --fake-initial
<html><a href=“https://trac.alcf.anl.gov/projects/balsam/browser” target=“_blank”>Git Browser</a></html>
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