Executor - a Simple Directory/File-based Distributed Computing System
Looking for security information? Check here.
To get an overall view of how to use this software, please check the
quick start guide or
these nice images.
This software is released under the modified BSD
license.
Examples
You'll find some example programs for the simple Java executor here.
AskTell.jar
a simple Java demo that plays "guess a number" with you
hello.bat
outputs hello followed by the program's parameters (if any)
hello.sh a similar program for Unix shells
salesmen.py the classic traveling salesman
program with 11 cities. Can take many (10) minutes on lower end computers.
darts, an example for the R statistics package.
This ZIP file contains both the data and the executable, but you can just
upload it as File#1 in the Executor. Using a sample from
https://www.dartmouth.edu/~chance/teaching_aids/data.html
(originally Wall Street Journal), we calculate
some summaries and indicate that in general trained experts trade a bit
better than can be gained by throwing darts on the stock index.
What does Executor do?
Executor is a small but perfectly functional Java (1.5 or higher)
JAR executable that is used to run programs in shared computer
resources like a pool of computers that you and your friends own. Moreover,
it can be used as a simple file sharing program: you can access the
files of your home computer from your office computer.
Executor
uses a shared or synchronized file system. The user creates a task in
one computer (just by uploading a file) and another computer that has
the required program will execute the task.
A class diagram of the program is
here.
Who wrote it/uses it? What's the aim/status? Where can I get it?
I am node0, the program was written during my spare time 2013- and
I use it daily. Mail: Executor-all@nongnu.org
I plan to incorporate changes and more functionality but I want to keep
it small and simple.
You can download the software from
savannah.
FAQ
Q: Why would I use Executor?
A: If you have a powerfull desktop computer with lots of installed
programs, and a small laptop, you can launch your tasks using the
laptop, they are executed in the desktop computer and the results
delivered in the shared directory so you can recover them with the laptop.
Q: Why wouldn't I use something better like Condor, SGE, BOINC?
A: You should. But this one is really simple to set up and use.
Q: So, can I use Microsoft Office that is in my Windows computer by
submitting a Word file by Executor in my Linux box?
A: Sadly, no. We can only manage batch type processing. Executor
cannot transfer the GUI of MSoft Office into your Linux.
Q: What about security?
A: Optional, based on GnuPG. Please see
here
Q: What is the protocol by which computing requests are submitted and
executed?
A: The protocol is completely file-based. When a user submits a task by
the submit GUI, Executor (1) creates a file with uniqueID.jd (jd for job
description). When Executor (2) finds a jd file, it checks if it can execute
it. If it can, it creates a file with the same uniqueID and
extension "run". Data about execution (exec host, start time..) is written
in this file.
After the execution, the exit code is written in this file, too.
Executor (3) can notify the user that the task has been executed, simply
by observing the .run files.
Q: There is no scheduling?
A: Yes, very primitive. All computers write a .info file in the shared
directory. This contains some characteristics (cpu, memory, supported
programs) of the host. When a task arrives, any computer will check if they can
run it. But if the host notices (by checking the files) that there is another
more powerfull computer available for the task, it will wait for some
time. If after the wait none has adopted the task, it will. This is
why the scheduler class is called PoliteScheduler.
Q: How about interactive tasks, tasks that ask input from the user?
A: There is a simple (file-based, again) protocol called ASK-TELL.
A program that wants input writes a question in its stdout, like this
ASK what is your name?
Executor stdout notices this question and creates a pop-up in the host
where the job was submitted. The program reads the answer in its stdin.
Please note that process management is a bit tricky. Your program must
flush the stdout instantly after writing the ASK question, otherwise
it will just wait forever. Moreover, when reading the reply, your
program must be prepared to strip flow control characters \002 \004 from
the reply.
Q: What is the syntax of the job description file?
A: Some of the attribute names can sound peculiar since they
have been adopted from a more complicated program, but here they are:
clientid=xxxx.info defines the Executor who submitted the task
binaryinputfilename=filename the file that was given as File #1 by the submit GUI
workercommandline=command that the Executor will run
arguments=[optional] extra arguments from the submit GUI
datainputfilename=[optional] more input files
Q: Is there a Java API?
A: Yes, it is included in the same JAR file:
* Submit a task such that the executable is in myFilename and myCmd is
* its command line.
public String submitTask(String myFileName, String myCmd, String taskName)
* API-type method: returns hosts/nodes that can execute your task.
* @param exTension extension like "sh" or a file name like "foo.sh"
* @param coreWeigth if true, return N*H for H where N is available cores.
* @return list of info file names
public String[] getIdsSuitableForTask(String exTension,
boolean coreWeigth
Q: Is there a command line interface?
A: Yes, it is included in the same JAR file:
-H filename: list hosts that can execute filename
-C filename: list cores that can execute filename
-S filename: submit task
Q: What new functionality is planned next?
A: If you look at a job description file, it actually looks like a sequence of variables.
I have been thinking: could we support programming language constructs like FOR loops in
these files, too? However, we would need to support this by the GUI, and it can become
messy.