software:java:caviness

Projects in Java on Caviness

Below is a basic Java example and steps you can follow 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 utilizing the directory /work/it_css/traine/java to store all the files associated with this example, and compiling and testing HellowWorld on the login (head) node.

[traine@login00 ~]$ workgroup -g it_css
[(it_css:traine)@login00 ~]$ javac -version
javac 1.8.0_161
[(it_css:traine)@login00 ~]$ java -version
openjdk version "1.8.0_161"
OpenJDK Runtime Environment (build 1.8.0_161-b14)
OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode)
[(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 compile on a compute node, use salloc –partition=devel to make sure you are allocated a compute node with the development tools, libraries, etc. which are needed for compilers. It is a good idea to use a compute node especially for lengthy compiles or those requiring multiple threads to reduce the compilation time. The following example is the same as above except the compile and test HelloWorld is done on a compute node r00n56 based on the job allocated from salloc –partition=devel.

[traine@login00 ~]$ workgroup -g it_css
[(it_css:traine)@login00 ~]$ salloc --partition=devel
salloc: Pending job allocation 7299417
salloc: job 7299417 queued and waiting for resources
salloc: job 7299417 has been allocated resources
salloc: Granted job allocation 7299417
salloc: Waiting for resource configuration
salloc: Nodes r00n56 are ready for job
[traine@r00n56 ~]$ javac -version
javac 1.8.0_161
[traine@r00n56 ~]$ java -version
openjdk version "1.8.0_161"
OpenJDK Runtime Environment (build 1.8.0_161-b14)
OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode)
[traine@r00n56 ~]$ cd $WORKDIR/traine/java
[traine@r00n56 java]$ cat HelloWorld.java
public class HelloWorld
{
  public static void main(String[] args)
  {
    System.out.println("Hello, World!");
  }
}
[traine@r00n56 java]$ javac HelloWorld.java
[traine@r00n56 java]$ ls
HelloWorld.class  HelloWorld.java
[traine@r00n56 java]$ java HelloWorld
Hello, World!
[traine@r00n56 java]$ exit
exit
salloc: Relinquishing job allocation 7299417
[(it_css:traine)@login00 ~]$

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/shared/templates/slurm/generic on Caviness, name it submit.qs, and modify it to run the HelloWorld executable. Keep in mind the standard partition is available to everyone which means your job could get preempted (killed) in order to make room for workgroup-specific resources. For testing purposes only, the partition has been modified from standard to devel for this example. Please read about all of the partitions to make sure your job is scheduled appropriately based on the limits defined for each partition. If you want to use the standard partition, please read about how to handle your job if it is preempted by using Checkpointing.

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=devel
#
# [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 after you make sure you are in your workgroup. The example below shows the output from the job submission and how to view the results of the job run.

[traine@login00 ~]$ workgroup -g it_css
[(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/shared/templates on Caviness. There are README.md files in each subdirectory to explain the use of these templates. If you do not specify any resources, by default you will get the standard partition, with 1 core and 1GB of memory (a simple serial job) and 20 minutes runtime on Caviness.
  • software/java/caviness.txt
  • Last modified: 2021-04-27 16:21
  • by 127.0.0.1