Installing Apache Mesos 1.6.0 on Ubuntu 18.04

DZone 's Guide to

Installing Apache Mesos 1.6.0 on Ubuntu 18.04

In this article, we go over a topic crucial to big data practitioners, namely, how to get Apache Mesos set up on a machine that's running Ubuntu.

· Big Data Zone ·
Free Resource

In this post, I will show you how to install Mesos on Ubuntu 18.04. This article is part of my new series on Fast Data Architecture. I have installed Mesos on other versions of Ubuntu but had some difficulties getting everything working on Ubuntu 18.04. We will overcome each one and get Mesos 1.6.0 installed.

Cluster Design

This cluster will be similar to other Mesos/Marathon clusters I have created. I will make this one a little beefier because I want to use it as a training platform for the Fast Data Architecture using a SMACK stack. I will go more in-depth on what a SMACK stack is in a later post. But, to sum up, it is a Fast Data Architecture that utilizes Spark, Mesos, Akka, Cassandra, and Kafka to implement one form of Big Data. You can find out more from this free ebook from the folks at Mesosphere which inspired this series of posts.

I built 5 virtual machines. Three of them are going to be Mesos Masters and have 4 vCPUs and 4 GB of memory. I made them this big so that when I compiled Mesos it would not take all night. The last two virtual machines are the Mesos Slaves and I made them pretty stout at 8 vCPUs and 8 GB of memory each. I knew I needed a little horsepower to run my little lab so these guys are pretty strong (for my lab environment that is).

Here are the systems including hostnames and IP configurations.

Mesos Master 1 - mesos1.admintome.lab
Mesos Master 2 - mesos2.admintome.lab
Mesos Master 3 - mesos3.admintome.lab

Mesos Slave 1 - mslave1.admintome.lab
Mesos Slave 2 - mslave2.admintome.lab

All systems have a static IP address and I set up my local DNS servers with the hostnames so that NS lookups on the systems would point to the correct IP. If you don't have local DNS servers then simply update your /etc/hosts file to look like this on each server:  mesos1.admintome.lab   mesos1  mesos2.admintome.lab   mesos2  mesos3.admintome.lab   mesos3  mslave1.admintome.lab  mslave1  mslave2.admintome.lab  mslave2

You will of course have to change the domain to match yours or if you don't have a domain exclude that second entry on each line. Enough of the boring stuff, time to get started configuring Mesos on Ubuntu 18.04!

Install Mesos on Ubuntu 18.04

You will need to run the commands in this section on all your virtual machines including the Mesos Slaves.

As with most of my how-tos, we need to first update and upgrade a fresh install of Ubuntu 18.04.

# apt update && apt upgrade -y

Reboot your system and we can begin installing the dependencies.

# apt install openjdk-8-jdk -y
# export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
# apt -y install build-essential python-dev libcurl4-nss-dev libsasl2-dev libsasl2-modules maven libapr1-dev libsvn-dev zlib1g-dev
# apt install unzip

I discovered that there is a bug with Ubuntu 18.04 and Java that causes an issue with Maven during the compile and shows an error similar to this:

java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty

I beat my head on the wall for two hours trying to find the fix until I came across this awesome StackOverflow answer that fixes the issue. Run these commands and you won't have the same problem:

# /usr/bin/printf '\xfe\xed\xfe\xed\x00\x00\x00\x02\x00\x00\x00\x00\xe2\x68\x6e\x45\xfb\x43\xdf\xa4\xd9\x92\xdd\x41\xce\xb6\xb2\x1c\x63\x30\xd7\x92' > /etc/ssl/certs/java/cacerts
# /var/lib/dpkg/info/ca-certificates-java.postinst configure

Your systems are now set up to compile everything successfully.

Compile the Source Code

I found that this works best if you run this section on one server at a time. We will compile Mesos on each and every node in the cluster. Which sucks because it takes forever. I don't know if you can compile on one server and install on the remaining servers so I asked a question on StackOverflow. Hopefully, the experts will show me what I am doing wrong and make this install a lot quicker.

The first thing we have to do is download the source for Apache Mesos 1.6.0:

# wgethttp://www.apache.org/dist/mesos/1.6.0/mesos-1.6.0.tar.gz

Unzip the tarball and configure the build:

# tar -xzvf mesos-1.6.0.tar.gz
# cd mesos-1.6.0
# mkdir build
# cd build

# ../configure

Now we need to start compiling the source code. The Apache Mesos page says to use the number of cores when setting the -j parameter. I have found that when I did this the virtual machines would run out of memory no matter how much I gave it and would stop compiling. They would just freeze. This cost me a couple of nights of pain. It turns out that what worked for me was to make this number equal to half the number of cores your virtual machine has. Unless, of course, your virtual machine only has one core then set the value to 1. In this example, I was compiling on a virtual machine that had 4 cores so I set the value to 2:

# make -j 2 V=0

Sit back and relax (read some other great articles from the AdminTome Blog) because this is gonna take a while. Once it is complete, you can install the binaries with these commands:

# make install
# ldconfig

That completes the source compile section. Now move on to your next Mesos server and repeat this step. Once you have the source code compiled on all your servers move on to the next section.

Configuring the Mesos Masters

This section will walk you through configuring your Mesos Master servers only. Our first step is to get Apache Zookeeper installed. Apache Zookeeper is a distributed key/value store.

Installing Apache Zookeeper

We will use the built-in canonical deployment of Zookeeper to keep things simple.

# apt install zookeeperd -y

To configure Zookeeper, we need to edit a couple of files. First, open your favorite editor and edit /etc/zookeeper/conf/myid. This will be a simple number that represents the ID of the Zookeeper node. Since I have three nodes, I numbered them 1 through 3. For example, on my mesos1.admintome.lab system I have '1' as the contents of /etc/zookeeper/conf/myid.

Next, edit /etc/zookeeper/conf/zoo.cfg. Find the three files that look like this:


Uncomment them and change them to reflect your three Mesos Masters.


Save and exit the file. We can start and enable the Zookeeper service.

# systemctl start zookeeper
# systemctl enable zookeeper

Complete this step on all three of your Mesos Master servers before continuing

SystemD Service for Apache Mesos Masters

Make a new directory

# mkdir /etc/mesos-master

Next, we need to make a /etc/mesos-master/zk file:


For the zk parameter, make sure you keep the port after each IP ':2181' because it has to be there. Save and exit the file.

Open up your favorite editor again and create a new file, /etc/systemd/system/mesos-master.service, with the following content:

Description=Mesos Master Service

ExecStart=/usr/local/sbin/mesos-master --ip= --work_dir=/var/lib/mesos --zk=file://etc/mesos-master/zk --quorum=2 --cluster=admintome


Make sure all the IPs match your three Mesos Master servers. Also, make sure that the -ip parameter matches the IP address for the current master server you are configuring. The last parameter is just what the name of the cluster will be when we look at the Web UI for Apache Mesos. You can make it anything you want. Save the file and exit.

Start and Enable the Service

Time to start our new Apache Mesos SystemD service.

# systemctl daemon-reload
# systemctl start mesos-master.service
# systemctl enable mesos-master

Complete this step on all three of your Mesos Masters. Your masters are now configured and ready to go. To verify that everything is working correctly so far you can go to the following URL.

http://{mesos master IP}:5050

You can pick any one of your Mesos Master IP's here. When Mesos starts up on all three servers it will use Zookeeper to pick a master that will handle all the work. If you browse to a server that was not elected as the master you will be automatically redirected to the master server.

You should see the Mesos Web GUI now:

Image title

Pat yourself on the back, you are halfway through installing Mesos on Ubuntu 18.04. Now on to configuring those Mesos Slaves.

Configuring the Mesos Slaves

You should already have Mesos compiled on your slaves from the beginning of this post. Now, all we have to do is create our SystemD service on each one of the slaves.

Make a new directory:

# mkdir /etc/mesos-slave

Next, we need to make a /etc/mesos-slave/master file:


For the zk parameter, make sure you keep the port after each IP as ':2181' because it has to be there. Save and exit the file.

Open up your favorite editor again and create a new file, /etc/systemd/system/mesos-slave.service, with the following content:

Description=Mesos Slave Service

ExecStart=/usr/local/sbin/mesos-slave --master=file://etc/mesos-slave/master --work_dir=/var/lib/mesos


Save and exit.

Start and Enable the Service

Time to start our new Apache Mesos Slave SystemD service.

# systemctl daemon-reload
# systemctl start mesos-slave.service
# systemctl enable mesos-slave

Complete this step on both of your Mesos Slaves.

To verify that they are both working you can view the Mesos Web UI again. You should see two activated agents like below:

Image title

As you can see here, we have 2 activated nodes and, under resources, we can see that we have 8 CPUs, ~6GB of memory and 200GB of disk space! Our two slaves are up and operational.


Congratulations! You made it through and now have a complete Apache Mesos cluster installed on Ubuntu 18.04! It was a long process but well worth the time if you are studying big data. This was a ton to go through - if you wanted to set up a production cluster, however, this wouldn't be recommended. In past versions, I used configuration management systems like Puppet to configure the cluster. This wasn't an option at this time because Puppet Enterprise doesn't have a puppet agent on Ubuntu 18.04. I'm sure that will change soon so keep checking back for a post on how to setup Mesos using Puppet on Ubuntu 18.04. Thanks for sticking with me through this post, I know it was a long one but one. I have been itching to write this ever since Ubuntu 18.04 was released.


I hope you have enjoyed this article. If so, please leave a comment below. Thanks again for reading this post!

apache mesos ,big data ,ubuntu

Published at DZone with permission of Bill Ward , DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}