You are welcome to use any editor you like, however many of the myriad developers use IntelliJ IDEA. The build process described below uses gradle. The build script is configured with the idea plugin to create an intellij project structure. This is accomplished with the following command:
./gradlew idea
# to open on a mac
open myriad.ipr
NOTE: if you are interested in using eclipse, there is a plugin for that. Either send in a pull request, or send a message on the dev mail list that you would make use of it.
System requirements:
- JDK 1.7+
- Gradle
- Hadoop 2.5.0
Myriad requires two components to be built:
- Myriad Scheduler - This component plugs into Resource Manager process and negotiates resources from Mesos. It is responsible to launch Node Manager processes via Mesos.
- Myriad Executor - This component implements Mesos Executor interface. It is launched by Myriad Scheduler via Mesos and runs as a separate process on each mesos-slave. Myriad Executor is responsible for launching Node Manager process as a Mesos Task.
The project is a multi-project build using gradle. You can go to the $PROJECT_HOME
(which is where you cloned the git project to) and type ./gradlew build
which will build all projects or you can go into each individual project and build them separately.
Before building you may still want to follow the instructions in Building Myriad Scheduler in order to build with the appropriate yml file.
To build all, from the $PROJECT_HOME
, run:
./gradlew build
At this point the jars will be located in the following directories (relative to $PROJECT_HOME).
# scheduler jars
./myriad-scheduler/build/libs/
# executor jar
./myriad-executor/build/libs/
Before building Myriad Scheduler, please modify myriad-config-default.yml with appropriate configuration properties (Please read Myriad Configuration Properties). This is needed because currently myriad-config-default.yml will be embedded into Myriad Scheduler jar.
To build Myriad Scheduler, from $PROJECT_HOME/myriad-scheduler
run:
./gradlew build
This will build myriad-x.x.x.jar and download the runtime jars and place them inside ./build/libs/
directory (relative to $PROJECT_HOME/myriad-scheduler
).
To build self-contained executor jar, from $PROJECT_HOME/myriad-executor
run:
./gradlew build
This will build myriad-executor-runnable-xxx.jar and place it inside PROJECT_HOME/myriad-executor/build/libs/
directory.
To deploy Myriad Scheduler, please follow the below steps:
- Build Myriad Scheduler
- Copy all jars under
PROJECT_HOME/myriad-scheduler/build/libs/
directory, to YARN ResourceManager's classpath. For ex: Copy all jars to$YARN_HOME/share/hadoop/yarn/lib/
To deploy Myriad Executor, please follow the below steps:
- Build Myriad Executor
- Copy myriad-executor-runnable-xxx.jar from
PROJECT_HOME/myriad-executor/build/libs/
to each mesos slave's/usr/local/libexec/mesos
directory.
Note: For advanced readers one can also copy myriad-executor-runnable-xxx.jar to any other directory on slave filesystem, or it can be copied to HDFS as well. In either case, one needs to update the executor's path property in myriad-config-default.yml file, and prepend the path with either file://
or hdfs://
, as appropriate.
To run Myriad Scheduler, you need to follow following steps:
- Add
MESOS_NATIVE_JAVA_LIBRARY
environment variable to ResourceManager's environment variables, for ex: Add following to$YARN_HOME/etc/hadoop/hadoop-env.sh
:
export MESOS_NATIVE_JAVA_LIBRARY=/usr/local/lib/libmesos.so
- Add following to
$YARN_HOME/etc/hadoop/yarn-site.xml
:
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>${nodemanager.resource.cpu-vcores}</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>${nodemanager.resource.memory-mb}</value>
</property>
<!--These options enable dynamic port assignment by mesos -->
<property>
<name>yarn.nodemanager.address</name>
<value>${myriad.yarn.nodemanager.address}</value>
</property>
<property>
<name>yarn.nodemanager.webapp.address</name>
<value>${myriad.yarn.nodemanager.webapp.address}</value>
</property>
<property>
<name>yarn.nodemanager.webapp.https.address</name>
<value>${myriad.yarn.nodemanager.webapp.address}</value>
</property>
<property>
<name>yarn.nodemanager.localizer.address</name>
<value>${myriad.yarn.nodemanager.localizer.address}</value>
</property>
<!-- Configure Myriad Scheduler here -->
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>com.ebay.myriad.scheduler.yarn.MyriadFairScheduler</value>
<description>One can configure other scehdulers as well from following list: com.ebay.myriad.scheduler.yarn.MyriadCapacityScheduler, com.ebay.myriad.scheduler.yarn.MyriadFifoScheduler</description>
</property>
<property>
<description>A comma separated list of services where service name should only contain a-zA-Z0-9_ and can not start with numbers</description>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle,myriad_executor</value>
<!-- If using MapR distribution
<value>mapreduce_shuffle,mapr_direct_shuffle,myriad_executor</value> -->
</property>
<property>
<name>yarn.nodemanager.aux-services.myriad_executor.class</name>
<value>com.ebay.myriad.executor.MyriadExecutorAuxService</value>
</property>
- Add following to
$YARN_HOME/etc/hadoop/mapred-site.xml
:
<!--This option enables dynamic port assignment by mesos -->
<property>
<name>mapreduce.shuffle.port</name>
<value>${myriad.mapreduce.shuffle.port}</value>
</property>
Optional: If you would like to enable cgroups, please add following to yarn-site.xml
:
<!-- Cgroups specific configuration -->
<property>
<description>who will execute(launch) the containers.</description>
<name>yarn.nodemanager.container-executor.class</name>
<value>${yarn.nodemanager.container-executor.class}</value>
</property>
<property>
<description>The class which should help the LCE handle resources.</description>
<name>yarn.nodemanager.linux-container-executor.resources-handler.class</name>
<value>${yarn.nodemanager.linux-container-executor.resources-handler.class}</value>
</property>
<property>
<name>yarn.nodemanager.linux-container-executor.cgroups.hierarchy</name>
<value>${yarn.nodemanager.linux-container-executor.cgroups.hierarchy}</value>
</property>
<property>
<name>yarn.nodemanager.linux-container-executor.cgroups.mount</name>
<value>${yarn.nodemanager.linux-container-executor.cgroups.mount}</value>
</property>
<property>
<name>yarn.nodemanager.linux-container-executor.cgroups.mount-path</name>
<value>${yarn.nodemanager.linux-container-executor.cgroups.mount-path}</value>
</property>
<property>
<name>yarn.nodemanager.linux-container-executor.group</name>
<value>${yarn.nodemanager.linux-container-executor.group}</value>
</property>
<property>
<name>yarn.nodemanager.linux-container-executor.path</name>
<value>${yarn.home}/bin/container-executor</value>
</property>
And, following to $YARN_HOME/etc/hadoop/myriad-config-default.yml
:
...
nodemanager:
cgroups: true
...
- Start Resource Manager. Myriad Scheduler will run inside Resource Manager as a plugin.
yarn-daemon.sh start resourcemanager
Myriad Executor and Node Managers are launched automatically by Myriad Scheduler as a response to flexup REST API.