Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Prerequisites

You have compiled REEF locally and set the JAVA_HOME environment variable.

Running your first REEF program: Hello, REEF! (Java)

The module REEF Examples in the folder reef-examples contains several simple programs built on REEF to help you get started with development. As always, the simplest of those is our "Hello World": Hello REEF. Upon launch, it grabs a single Evaluator and submits a single Task to it. That Actvity, fittingly, prints 'Hello REEF!' to stdout. To launch it, navigate to REEF_HOME and use the following command (put the correct number of your REEF version in {$REEF_VERSION}:

Code Block
languagebash
titleRUN
> java -cp lang/java/reef-examples/target/reef-examples-{$REEF_VERSION}-SNAPSHOT-shaded.jar org.apache.reef.examples.hello.HelloREEF

This invokes the shaded jar within the target directory and launches HelloREEF on the local runtime of REEF. During the run, you will see something similar to this output:

Code Block
languagebash
titleOUTPUT
Powered by
     ___________  ______  ______  _______
    /  ______  / /  ___/ /  ___/ /  ____/
   /     _____/ /  /__  /  /__  /  /___
  /  /\  \     /  ___/ /  ___/ /  ____/
 /  /  \  \   /  /__  /  /__  /  /
/__/    \__\ /_____/ /_____/ /__/

...
INFO: REEF Version: 0.1014.0-incubatingSNAPSHOT
...
INFO: The Job HelloREEF is running.
...
INFO: The Job HelloREEF is done.
...
INFO: REEF job completed: COMPLETED

...

Where's

...

the

...

output?

The local runtime simulates a cluster of machines: It executes each Evaluator in a separate process on your machine. Hence, the Evaluator that printed "Hello, REEF" is not executed in the same process as the program you launched above. So, how do you get to the output of the Evaluator? The local runtime creates one folder per job it executes in REEF_LOCAL_RUNTIME:

Code Block
languagebash
titleREEF LOCAL RUNTIME FOLDER
> cd REEF_LOCAL_RUNTIME
> ls Hello*
Mode   LastWriteTime       Length  Name
----   -------------       ------  ----
d---- 1 10/2612/2015 117:2153 AM          HelloREEF-13754823384681444603999205

The job folder names are comprised of the job's name (here, HelloREEF) and the time stamp of its submission (here, 13754823384681444603999205). If you submit the same job multiple times, you will get multiple folders here. Let's move on:

Code Block
languagebash
titleREEF LOCAL JOB FOLDER
> cd HelloREEF-13754823384681444603999205
> ls
Mode   LastWriteTime       Length  Name
----   -------------       ------  ----
d---- 1 10/2612/2015 117:2153 AM          driver
d---- 1 10/2612/2015 117:2153 AM          Node-12-13754823392661444604000469

Inside of the job's folder, you will find one folder for the job's Driver (named driver) and one per Evaluator. Their name comprises of the virtual node simulated by the local runtime (here, Node-12) followed by the time stamp of when this Evaluator was allocated on that node, here 13754823392661444604000469. As the HelloREEF example program only allocated one Evaluator, we only see one of these folders here. Let's peek inside:

Code Block
languagebash
titleEVALUATOR OUTPUT
> cd Node-12-13754823392661444604000469
> ls evaluator*
Mode   LastWriteTime       Length  Name
----   -------------       ------  ----
-a--- 1 10/2612/2015 117:2153 AM 1303   2690  evaluator.stderr
-a---  110/2612/2015 117:2153 AM      14  evaluator.stdout

evaluator.stderr contains the output on stderr of this Evaluator, which mostly consists of logs helpful in debugging. evaluator.stdout contains the output on stdout. And, sure enough, this is where you find the "Hello, REEF!" message.

...