5 title: "Running on an Arvados cluster"
8 This tutorial demonstrates how to create a pipeline to run your crunch script on an Arvados cluster. Cluster jobs can scale out to multiple nodes, and use @git@ and @docker@ to store the complete system snapshot required to achieve reproducibilty.
10 {% include 'tutorial_expectations' %}
12 This tutorial uses @$USER@ to denote your username. Replace @$USER@ with your user name in all the following examples.
14 Also, this tutorial uses the @tutorial@ arvados repository created in "Adding a new arvados repository":add-new-repository.html as the example repository.
16 h2. Clone arvados repository
18 All Crunch scripts are managed through the Git revision control system. Before you start using Git, you should do some basic configuration (you only need to do this the first time):
21 <pre><code>~$ <span class="userinput">git config --global user.name "Your Name"</span>
22 ~$ <span class="userinput">git config --global user.email $USER@example.com</span></code></pre>
25 On the Arvados Workbench, click on the dropdown menu icon <span class="fa fa-lg fa-user"></span> <span class="caret"></span> in the upper right corner of the top navigation menu to access the user settings menu, and click on the menu item *Manage account* to go to the account management page.
27 On the *Manage account* page, you will see *Repositories* panel. In this panel, you should see the @$USER/tutorial@ repository listed in the *name* column. Next to *name* is the column *URL*. Copy the *URL* value associated with your repository. This should look like <notextile><code>https://git.{{ site.arvados_api_host }}/$USER/tutorial.git</code></notextile>. Alternatively, you can use <notextile><code>git@git.{{ site.arvados_api_host }}:$USER/tutorial.git</code></notextile>
29 Next, on the Arvados virtual machine, clone your Git repository:
32 <pre><code>~$ <span class="userinput">cd $HOME</span> # (or wherever you want to install)
33 ~$ <span class="userinput">git clone https://git.{{ site.arvados_api_host }}/$USER/tutorial.git</span>
34 Cloning into 'tutorial'...</code></pre>
37 This will create a Git repository in the directory called @tutorial@ in your home directory. Say yes when prompted to continue with connection.
38 Ignore any warning that you are cloning an empty repository.
40 {% include 'notebox_begin' %}
41 For more information about using Git, try
43 notextile. <pre><code>$ <span class="userinput">man gittutorial</span></code></pre>
45 or *"search Google for Git tutorials":http://google.com/#q=git+tutorial*.
46 {% include 'notebox_end' %}
48 h2. Creating a Crunch script
50 Start by entering the @tutorial@ directory created by @git clone@. Next create a subdirectory called @crunch_scripts@ and change to that directory:
53 <pre><code>~$ <span class="userinput">cd $USER</span>
54 ~/$USER$ <span class="userinput">mkdir crunch_scripts</span>
55 ~/$USER$ <span class="userinput">cd crunch_scripts</span></code></pre>
58 Next, using @nano@ or your favorite Unix text editor, create a new file called @hash.py@ in the @crunch_scripts@ directory.
60 notextile. <pre>~/tutorial/crunch_scripts$ <code class="userinput">nano hash.py</code></pre>
62 Add the following code to compute the MD5 hash of each file in a collection (if you already completed "Writing a Crunch script":tutorial-firstscript.html you can just copy the @hash.py@ file you created previously.)
64 <notextile> {% code 'tutorial_hash_script_py' as python %} </notextile>
66 Make the file executable:
68 notextile. <pre><code>~/tutorial/crunch_scripts$ <span class="userinput">chmod +x hash.py</span></code></pre>
70 Next, add the file to the staging area. This tells @git@ that the file should be included on the next commit.
72 notextile. <pre><code>~/tutorial/crunch_scripts$ <span class="userinput">git add hash.py</span></code></pre>
74 Next, commit your changes. All staged changes are recorded into the local git repository:
77 <pre><code>~/tutorial/crunch_scripts$ <span class="userinput">git commit -m"my first script"</span>
78 [master (root-commit) 27fd88b] my first script
79 1 file changed, 45 insertions(+)
80 create mode 100755 crunch_scripts/hash.py</code></pre>
83 Finally, upload your changes to the Arvados server:
86 <pre><code>~/tutorial/crunch_scripts$ <span class="userinput">git push origin master</span>
87 Counting objects: 4, done.
88 Compressing objects: 100% (2/2), done.
89 Writing objects: 100% (4/4), 682 bytes, done.
90 Total 4 (delta 0), reused 0 (delta 0)
91 To git@git.qr1hi.arvadosapi.com:$USER/tutorial.git
92 * [new branch] master -> master</code></pre>
95 h2. Create a pipeline template
97 Next, create a new template using @arv create pipeline_template@:
100 <pre><code>~$ <span class="userinput">arv create pipeline_template</span></code></pre>
103 In the editor, enter the following template:
105 <notextile> {% code 'tutorial_submit_job' as javascript %} </notextile>
107 * @"repository"@ is the name of a git repository to search for the script version. You can access a list of available git repositories on the Arvados Workbench in the *Manage account* page using the <span class="fa fa-lg fa-user"></span> <span class="caret"></span> top navigation menu icon.
108 * @"script_version"@ specifies the version of the script that you wish to run. This can be in the form of an explicit Git revision hash, a tag, or a branch (in which case it will use the HEAD of the specified branch). Arvados logs the script version that was used in the run, enabling you to go back and re-run any past job with the guarantee that the exact same code will be used as was used in the previous run.
109 * @"script"@ specifies the filename of the script to run. Crunch expects to find this in the @crunch_scripts/@ subdirectory of the Git repository.
110 * @"runtime_constraints"@ describes the runtime environment required to run the job. These are described in the "job record schema":{{site.baseurl}}/api/schema/Job.html
112 h2. Running your pipeline
114 Your new pipeline template should appear at the top of the Workbench "pipeline templates":{{site.arvados_workbench_host}}/pipeline_templates page. You can run your pipeline "using Workbench":tutorial-pipeline-workbench.html or the "command line.":{{site.baseurl}}/user/topics/running-pipeline-command-line.html
116 For more information and examples for writing pipelines, see the "pipeline template reference":{{site.baseurl}}/api/schema/PipelineTemplate.html