software:java:caviness

This is an old revision of the document!


Projects in Java on Caviness

Below is a basic Java example below, you can follow the steps and apply to your filename.java. Remember Unix is case sensitive so it is very important for the filename HelloWorld.java match the class name defined in the file as HelloWorld.

HelloWorld.java
public class HelloWorld
{
  public static void main(String[] args)
  {
    System.out.println("Hello, World!");
  }
}

Check the version of the java compiler and java available on Caviness by using

$ javac -version
$ java -version

and determine if this is acceptable for your java application to compile and create the HelloWorld.class file. The following example is based on the user traine in workgroup it_css on Caviness using commands to create a directory /work/it_css/traine/java to store all the files associated with this example, salloc to a compute node, compile and test HellowWorld, and lastly exit the compute node and return to the head node.

 
[anita@login00 ~]$ workgroup -g it_css
[(it_css:traine)@login00 ~]$ cd $WORKDIR/traine/java
[(it_css:traine)@login00 java]$ cat HelloWorld.java
public class HelloWorld
{
  public static void main(String[] args)
  {
    System.out.println("Hello, World!");
  }
}
[(it_css:traine)@login00 java]$ javac HelloWorld.java
[(it_css:traine)@login00 java]$ ls
HelloWorld.class  HelloWorld.java
[(it_css:traine)@login00 java]$ java HelloWorld
Hello, World!
[(it_css:traine)@login00 java]$ 

If you want to run your java job in batch, then you will need a job submission script. For this simple example, copy serial.qs from /opt/templates/ on Caviness, name it submit.qs, and modify it to run the HelloWorld executable.

submit.qs
#!/bin/bash -l
#
# Sections of this script that can/should be edited are delimited by a
# [EDIT] tag.  All Slurm job options are denoted by a line that starts
# with "#SBATCH " followed by flags that would otherwise be passed on
# the command line.  Slurm job options can easily be disabled in a
# script by inserting a space in the prefix, e.g. "# SLURM " and
# reenabled by deleting that space.
#
# This is a batch job template for a program using a single processor
# core/thread (a serial job).
#
#SBATCH --ntasks=1
#
# [EDIT] All jobs have memory limits imposed.  The default is 1 GB per
#        CPU allocated to the job.  The default can be overridden either
#        with a per-node value (--mem) or a per-CPU value (--mem-per-cpu)
#        with unitless values in MB and the suffixes K|M|G|T denoting
#        kibi, mebi, gibi, and tebibyte units.  Delete the space between
#        the "#" and the word SBATCH to enable one of them:
#
# SBATCH --mem=8G
# SBATCH --mem-per-cpu=1024M
#
# [EDIT] Each node in the cluster has local scratch disk of some sort
#        that is always mounted as /tmp.  Per-job and per-step temporary
#        directories are automatically created and destroyed by the
#        auto_tmpdir plugin in the /tmp filesystem.  To ensure a minimum
#        amount of free space on /tmp when your job is scheduled, the
#        --tmp option can be used; it has the same behavior unit-wise as
#        --mem and --mem-per-cpu.  Delete the space between the "#" and the
#        word SBATCH to enable:
#
# SBATCH --tmp=1T
#
# [EDIT] It can be helpful to provide a descriptive (terse) name for
#        the job:
#
#SBATCH --job-name=java_serial_job
#
# [EDIT] The partition determines which nodes can be used and with what
#        maximum runtime limits, etc.  Partition limits can be displayed
#        with the "sinfo --summarize" command.
#
#SBATCH --partition=standard
#
# [EDIT] The maximum runtime for the job; a single integer is interpreted
#        as a number of seconds, otherwise use the format
#
#          d-hh:mm:ss
#
#        Jobs default to the maximum runtime limit of the chosen partition
#        if this option is omitted.
#
#SBATCH --time=0-00:20:00
#
# [EDIT] By default SLURM sends the job's stdout to the file "slurm-<jobid>.out"
#        and the job's stderr to the file "slurm-<jobid>.err" in the working
#        directory.  Override by deleting the space between the "#" and the
#        word SBATCH on the following lines; see the man page for sbatch for
#        special tokens that can be used in the filenames:
#
# SBATCH --output=%x-%j.out
# SBATCH --error=%x-%j.out
#
# [EDIT] Slurm can send emails to you when a job transitions through various
#        states: NONE, BEGIN, END, FAIL, REQUEUE, ALL, TIME_LIMIT,
#        TIME_LIMIT_50, TIME_LIMIT_80, TIME_LIMIT_90, ARRAY_TASKS.  One or more
#        of these flags (separated by commas) are permissible for the
#        --mail-type flag.  You MUST set your mail address using --mail-user
#        for messages to get off the cluster.
#
# SBATCH --mail-user='my_address@udel.edu'
# SBATCH --mail-type=END,FAIL,TIME_LIMIT_90
#
# [EDIT] By default we DO NOT want to send the job submission environment
#        to the compute node when the job runs.
#
#SBATCH --export=NONE
#
 
#
# Do general job environment setup:
#
. /opt/shared/slurm/templates/libexec/common.sh
 
#
# [EDIT] Add your script statements hereafter, or execute a script or program
#        using the srun command.
#
java HelloWorld

Now submit the job using sbatch submit.qs on the head node. The example below shows the output from the job submission and how to view the results of the job run.

[(it_css:traine)@login00 java]$ sbatch submit.qs
Submitted batch job 1231                                                                   1
[(it_css:traine)@login00 java]$ ls
HelloWorld.class  HelloWorld.java  slurm-1231.out  submit.qs
[(it_css:traine)@login00 java]$ cat slurm-1231.out
Hello, World!
[(it_css:traine)@login00 java]$
Please review the templates for job submission scripts in /opt/templates on Caviness. If you do not specify any resources, by default you will get the default partition, with 1 core and 1GB of memory (a simple serial job) and 20 minutes runtime on Caviness.
  • software/java/caviness.1533936074.txt.gz
  • Last modified: 2018-08-10 17:21
  • by anita