Clojure and Mesos: Mesos Examples Using Mesomatic
About ↟
This project started as a port of the standard Mesos Java examples to Clojure and Mesomatic. Since then, other examples have begun making their way into the codebase, and the repo is now home to several Mesomatic examples.
So far, these include:
- scheduler-only - a minimalist framework that simply sets up a scheduler and nothing else
- exception-framework - a minimalist framework that only shows how an exception is handled by the Mesos framework
- bash-scheduler (IN PROGRESS) - a simple framwork that XXX
- framework (IN PROGRESS) - A Mesomatic port of
- hello-framework (IN PROGRESS) - A highly simplified, mostly minimal example of Mesomatic in action
- container-framework (IN PROGRESS) - [add description]
We plan on adding the multi-executor framework as well a few other examples.
Note that these examples, for the most part, attempt to demonstrate creating
Mesos frameworks using bare-bones Clojure (the exception to this is the
example which will demonstrate the use of the
Component library, allosing one
to treat the framework like a system). Also, unlike the Java examples, none of
these Mesomatic examples create bash scripts to kick off executors and
frameworks from the command-line. Instead, they use lein mesomatic aliases
(defined in project.clj).
Dependencies ↟
Mesomatic depends upon having the following installed and, where applicable, running on your machine (or cluster):
- Java
- Maven
lein- The native Mesos library (matching the version used in this project).
The latest version of these examples is built against Mesos 0.28.2 and
a mesomatic 0.28.0-r0. However, since there are Mesomatic features missing
and bugs fixed which haven't yet been merged upstream, you will need to clone
the fork that has these (from the mesomatic-examples clone directory):
$ mkdir checkouts
$ cd checkouts
$ git clone https://github.com/clojusc/mesomatic
Note that the default branch, deploy, has merged all of the feature and
bug fix branches.
All other dependencies (including the Java bindings) are downloaded
automatically by lein when you run the examples.
Set Up ↟
You'll need to have mesos running in order to see these examples in action. If
you've built your own Mesos, you can switch to the build directory, and after
running make check (which run tests and generates necessary files/dirs for
you), you can start up a local mesos:
$ ./bin/mesos-local.shAlternatively, you may download and run one of our docker images:
$ docker run -d -p 5050:5050 clojusc/mesos:1.0.1If you're using docker, you'll want to set the LIBPROCESS_IP environment
variable, using the IP address of Docker host interface, e.g. docker0:
$ export LIBPROCESS_IP=172.17.0.1In both cases, you'll need to set the MESOS_NATIVE_JAVA_LIBRARY environment
variable, e.g.:
$ export MESOS_NATIVE_JAVA_LIBRARY=/opt/mesos/1.0.1/build/src/.libs/libmesos.soUsage ↟
With the necessary set up complete and after having changed directory to the
the mesomatic-examples clone directory, you can run the various example
as shown below. Note that lein mesomatic is an alias defined in this repo's
project.clj file.
For convenience, we'll set a MASTER environment variable for these examples,
e.g.:
export MASTER=127.0.0.1:5050Or, if using Docker, the IP address of the Mesos container. This can be obtained suchly:
$ docker inspect <container-id> | jq .[0].NetworkSettings.IPAddressThen:
export MASTER=172.17.0.3:5050Scheduler-Only Framework ↟
$ lein mesomatic $MASTER scheduler-only-frameworkSimple Bash Scheduler Framework ↟
$ lein mesomatic $MASTER bash-scheduler-frameworkJava Framework Port ↟
$ lein mesomatic $MASTER frameworkJava Exception Framework Port ↟
$ lein mesomatic $MASTER exception-frameworkJava Multiple-Executors Framework Port ↟
TBD
'Hello, World!' Framework ↟
$ lein mesomatic $MASTER hello-framework'Hello, World!' Docker Framework ↟
$ lein mesomatic $MASTER container-framework'Hello, World!' + Component Framework ↟
TBD
Documentation ↟
The project's auto-generated documentation (such that it is) is available here:
License ↟
Copyright © 2016-2017 Duncan McGreggor Copyright © 2017 Clojure-Aided Enrichment Center
Apache License, Version 2.0.

