Merge branch 'master' into 1786-replace-jekyll-with-zenweb
[arvados.git] / doc / user / tutorials / tutorial-firstscript.textile
1 ---
2 layout: default
3 navsection: userguide
4 navmenu: Tutorials
5 title: "Writing a Crunch script"
6 navorder: 13
7 ...
8
9 h1. Writing a Crunch script
10
11 In this tutorial, we will write the "hash" script demonstrated in the first tutorial.
12
13 *This tutorial assumes that you are "logged into an Arvados VM instance":{{site.basedoc}}/user/getting_started/ssh-access.html#login, and have a "working environment.":{{site.basedoc}}/user/getting_started/check-environment.html*
14
15 This tutorial uses _you_ to denote your username.  Replace _you_ with your user name in all the following examples.
16
17 h2. Setting up Git
18
19 As discussed in the previous tutorial, all Crunch scripts are managed through the @git@ revision control system.
20
21 First, you should do some basic configuration for git (you only need to do this the first time):
22
23 <notextile>
24 <pre><code>$ <span class="userinput">git config --global user.name "Your Name"</span>
25 $ <span class="userinput">git config --global user.email you@example.com</span></code></pre>
26 </notextile>
27
28 On the Arvados Workbench, navigate to _Access %(rarr)&rarr;% Repositories._  You should see two repositories, one named "arvados" (under the *name* column) and a second with your user name.  Next to *name* is the column *push_url*.  Copy the *push_url* cell associated with your repository.  This should look like <code>git@git.{{ site.arvados_api_host }}:you.git</code>.
29
30 Next, on the Arvados virtual machine, clone your git repository:
31
32 <notextile>
33 <pre><code>$ <span class="userinput">git clone git@git.{{ site.arvados_api_host }}:you.git</span>
34 Cloning into 'you'...</code></pre>
35 </notextile>
36
37 This will create an git checkout in the directory called @you@.
38
39 {% include notebox-begin.html %}
40 For more information about using @git@, try
41
42 notextile. <pre><code>$ <span class="userinput">man gittutorial</span></code></pre>
43
44 or <b>"click here to search Google for git tutorials":http://google.com/#q=git+tutorial</b>
45 {% include notebox-end.html %}
46
47 h2. Creating a Crunch script
48
49 Start by entering the @you@ directory created by @git clone@.  Next create a subdirectory called @crunch_scripts@ and change to that directory:
50
51 <notextile>
52 <pre><code>$ <span class="userinput">cd you</span>
53 $ <span class="userinput">mkdir crunch_scripts</span>
54 $ <span class="userinput">cd crunch_scripts</span></code></pre>
55 </notextile>
56
57 Next, using @nano@ or your favorite Unix text editor, create a new file called @hash.py@ in the @crunch_scripts@ directory.
58
59 notextile. <pre>$ <code class="userinput">nano hash.py</code></pre>
60
61 Add the following code to compute the md5 hash of each file in a collection:
62
63 <pre><code class="userinput">{% include tutorial_hash_script.py %}</code></pre>
64
65 Make the file executable:
66
67 notextile. <pre><code>$ <span class="userinput">chmod +x hash.py</span></code></pre>
68
69 Next, add the file to @git@ staging.  This tells @git@ that the file should be included on the next commit.
70
71 notextile. <pre><code>$ <span class="userinput">git add hash.py</span></code></pre>
72
73 Next, commit your changes to git.  All staged changes are recorded into the local @git@ repository:
74
75 <notextile>
76 <pre><code>$ <span class="userinput">git commit -m"my first script"</span>
77 [master (root-commit) 27fd88b] my first script
78  1 file changed, 33 insertions(+)
79  create mode 100755 crunch_scripts/hash.py</code></pre>
80 </notextile>
81
82 Finally, upload your changes to the Arvados server:
83
84 <notextile>
85 <pre><code>$ <span class="userinput">git push origin master</span>
86 Counting objects: 4, done.
87 Compressing objects: 100% (2/2), done.
88 Writing objects: 100% (4/4), 682 bytes, done.
89 Total 4 (delta 0), reused 0 (delta 0)
90 To git@git.qr1hi.arvadosapi.com:you.git
91  * [new branch]      master -> master</code></pre>
92 </notextile>
93
94 You should now be able to run your script using Crunch, similar to how we did it in the "first tutorial.":tutorial-job1.html  The field @"script_version"@ should be @you:master@ to tell Crunch to run the script at the head of the "master" git branch, which you just uploaded.
95
96 <notextile>
97 <pre><code>$ <span class="userinput">cat &gt;the_job &lt;&lt;EOF
98 {
99  "script": "hash.py",
100  "script_version": "you:master",
101  "script_parameters":
102  {
103   "input": "c1bad4b39ca5a924e481008009d94e32+210"
104  }
105 }
106 EOF</span>
107 $ <span class="userinput">arv -h job create --job "$(cat the_job)"</span>
108 {
109  ...
110  "uuid":"qr1hi-xxxxx-xxxxxxxxxxxxxxx"
111  ...
112 }
113 $ <span class="userinput">arv -h job get --uuid qr1hi-xxxxx-xxxxxxxxxxxxxxx</span>
114 {
115  ...
116  "output":"880b55fb4470b148a447ff38cacdd952+54",
117  ...
118 }
119 $ <span class="userinput">arv keep get 880b55fb4470b148a447ff38cacdd952+54/md5sum.txt</span>
120 44b8ae3fde7a8a88d2f7ebd237625b4f var-GS000016015-ASM.tsv.bz2
121 </code></pre>
122 </notextile>
123
124 Next, "debugging a crunch script.":tutorial-job-debug.html