6591: Improve install docs around $external_client variable.
[arvados.git] / doc / install / install-crunch-dispatch.html.textile.liquid
1 ---
2 layout: default
3 navsection: installguide
4 title: Install the Crunch dispatcher
5
6 ...
7
8 The dispatcher normally runs on the same host/VM as the API server.
9
10 h2. Perl SDK dependencies
11
12 Install the Perl SDK on the controller.
13
14 * See "Perl SDK":{{site.baseurl}}/sdk/perl/index.html page for details.
15
16 h2. Python SDK dependencies
17
18 Install the Python SDK and CLI tools on controller and all compute nodes.
19
20 * See "Python SDK":{{site.baseurl}}/sdk/python/sdk-python.html page for details.
21
22 h2(#slurm). Set up SLURM
23
24 On the API server, install SLURM and munge, and generate a munge key.
25
26 On Debian-based systems:
27
28 <notextile>
29 <pre><code>~$ <span class="userinput">sudo /usr/bin/apt-get install slurm-llnl munge</span>
30 ~$ <span class="userinput">sudo /usr/sbin/create-munge-key</span>
31 </code></pre>
32 </notextile>
33
34 On Red Hat-based systems, "install SLURM and munge from source following their installation guide":https://computing.llnl.gov/linux/slurm/quickstart_admin.html.
35
36 Now we need to give SLURM a configuration file in @/etc/slurm-llnl/slurm.conf@. Here's an example:
37
38 <notextile>
39 <pre>
40 ControlMachine=uuid_prefix.your.domain
41 SlurmctldPort=6817
42 SlurmdPort=6818
43 AuthType=auth/munge
44 StateSaveLocation=/tmp
45 SlurmdSpoolDir=/tmp/slurmd
46 SwitchType=switch/none
47 MpiDefault=none
48 SlurmctldPidFile=/var/run/slurmctld.pid
49 SlurmdPidFile=/var/run/slurmd.pid
50 ProctrackType=proctrack/pgid
51 CacheGroups=0
52 ReturnToService=2
53 TaskPlugin=task/affinity
54 #
55 # TIMERS
56 SlurmctldTimeout=300
57 SlurmdTimeout=300
58 InactiveLimit=0
59 MinJobAge=300
60 KillWait=30
61 Waittime=0
62 #
63 # SCHEDULING
64 SchedulerType=sched/backfill
65 SchedulerPort=7321
66 SelectType=select/cons_res
67 SelectTypeParameters=CR_CPU_Memory
68 FastSchedule=1
69 #
70 # LOGGING
71 SlurmctldDebug=3
72 #SlurmctldLogFile=
73 SlurmdDebug=3
74 #SlurmdLogFile=
75 JobCompType=jobcomp/none
76 #JobCompLoc=
77 JobAcctGatherType=jobacct_gather/none
78 #
79 # COMPUTE NODES
80 NodeName=DEFAULT
81 PartitionName=DEFAULT MaxTime=INFINITE State=UP
82 PartitionName=compute Default=YES Shared=yes
83
84 NodeName=compute[0-255]
85
86 PartitionName=compute Nodes=compute[0-255]
87 </pre>
88 </notextile>
89
90 Please make sure to update the value of the @ControlMachine@ parameter to the hostname of your dispatcher (API server).
91
92 h2. Enable SLURM job dispatch
93
94 In your API server's @application.yml@ configuration file, add the line @crunch_job_wrapper: :slurm_immediate@ under the appropriate section.  (The second colon is not a typo.  It denotes a Ruby symbol.)
95
96 h2. Crunch user account
97
98 Run @sudo adduser crunch@.  The crunch user should have the same UID, GID, and home directory on all compute nodes and on the dispatcher (API server).
99
100 h2. Git Repositories
101
102 Crunch scripts must be in Git repositories in the directory configured as @git_repositories_dir@/*.git (see the "API server installation":install-api-server.html#git_repositories_dir).
103
104 Once you have a repository with commits -- and you have read access to the repository -- you should be able to create a new job:
105
106 <pre>
107 read -rd $'\000' newjob <<EOF; arv job create --job "$newjob"
108 {"script_parameters":{"input":"f815ec01d5d2f11cb12874ab2ed50daa"},
109  "script_version":"master",
110  "script":"hash",
111  "repository":"arvados"}
112 EOF
113 </pre>
114
115 Without getting this error:
116
117 <pre>
118 ArgumentError: Specified script_version does not resolve to a commit
119 </pre>
120
121 h2. Running jobs
122
123 * @services/api/script/crunch-dispatch.rb@ must be running.
124 * @crunch-dispatch.rb@ needs @services/crunch/crunch-job@ in its @PATH@.
125 * @crunch-job@ needs the installation path of the Perl SDK in its @PERLLIB@.
126 * @crunch-job@ needs the @ARVADOS_API_HOST@ (and, if necessary in a development environment, @ARVADOS_API_HOST_INSECURE@) environment variable set.
127
128 Example @/var/service/arvados_crunch_dispatch/run@ script:
129
130 <pre>
131 #!/bin/sh
132 set -e
133
134 rvmexec=""
135 ## uncomment this line if you use rvm:
136 #rvmexec="/usr/local/rvm/bin/rvm-exec 2.1.1"
137
138 export PATH="$PATH":/path/to/arvados/services/crunch
139 export ARVADOS_API_HOST={{ site.arvados_api_host }}
140 export CRUNCH_DISPATCH_LOCKFILE=/var/lock/crunch-dispatch
141
142 fuser -TERM -k $CRUNCH_DISPATCH_LOCKFILE || true
143
144 ## Only if your SSL cert is unverifiable:
145 # export ARVADOS_API_HOST_INSECURE=yes
146
147 cd /path/to/arvados/services/api
148 export RAILS_ENV=production
149 exec $rvmexec bundle exec ./script/crunch-dispatch.rb 2>&1
150 </pre>