You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by ey...@apache.org on 2019/04/22 20:58:29 UTC

[hadoop] branch trunk updated: YARN-8551. Project setup for MaWo application. Contributed by Yesha Vora

This is an automated email from the ASF dual-hosted git repository.

eyang pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/hadoop.git


The following commit(s) were added to refs/heads/trunk by this push:
     new a54c1e3  YARN-8551. Project setup for MaWo application.            Contributed by Yesha Vora
a54c1e3 is described below

commit a54c1e3ace5a1eea2ada55ae3990fcfde0dcc4b1
Author: Eric Yang <ey...@apache.org>
AuthorDate: Mon Apr 22 16:56:26 2019 -0400

    YARN-8551. Project setup for MaWo application.
               Contributed by Yesha Vora
---
 hadoop-project/pom.xml                             |   5 +
 .../dev-support/findbugs-exclude.xml               |  17 +
 .../dev-support/findbugs-exclude.xml               |  17 +
 .../hadoop-yarn-applications-mawo-core/pom.xml     | 173 +++++++
 .../src/assembly/bin.xml                           |  41 ++
 .../mawo/server/common/AbstractTask.java           | 246 ++++++++++
 .../mawo/server/common/CompositeTask.java          |  42 ++
 .../applications/mawo/server/common/DieTask.java   |  32 ++
 .../mawo/server/common/MawoConfiguration.java      | 502 +++++++++++++++++++++
 .../applications/mawo/server/common/NullTask.java  |  33 ++
 .../mawo/server/common/SimpleTask.java             |  57 +++
 .../applications/mawo/server/common/Task.java      |  83 ++++
 .../applications/mawo/server/common/TaskId.java    | 149 ++++++
 .../mawo/server/common/TaskStatus.java             | 347 ++++++++++++++
 .../applications/mawo/server/common/TaskType.java  |  45 ++
 .../mawo/server/common/TeardownTask.java           |  48 ++
 .../mawo/server/common/WorkAssignmentProtocol.java |  65 +++
 .../mawo/server/common/package-info.java           |  20 +
 .../applications/mawo/server/master/job/JobId.java | 128 ++++++
 .../mawo/server/master/job/package-info.java       |  20 +
 .../applications/mawo/server/worker/WorkerId.java  | 162 +++++++
 .../mawo/server/worker/package-info.java           |  20 +
 .../src/main/resources/mawo-default.properties     |  41 ++
 .../mawo/server/common/TestMaWoConfiguration.java  |  60 +++
 .../src/test/resources/mawo.properties             |  28 ++
 .../hadoop-yarn-applications-mawo/pom.xml          |  37 ++
 .../hadoop-yarn/hadoop-yarn-applications/pom.xml   |   1 +
 .../src/site/markdown/yarn-service/MasterWorker.md |  36 ++
 28 files changed, 2455 insertions(+)

diff --git a/hadoop-project/pom.xml b/hadoop-project/pom.xml
index 1dc0baa..865e03d 100644
--- a/hadoop-project/pom.xml
+++ b/hadoop-project/pom.xml
@@ -1101,6 +1101,11 @@
         <version>2.23.4</version>
       </dependency>
       <dependency>
+        <groupId>org.mockito</groupId>
+        <artifactId>mockito-all</artifactId>
+        <version>1.8.5</version>
+      </dependency>
+      <dependency>
         <groupId>org.objenesis</groupId>
         <artifactId>objenesis</artifactId>
         <version>1.0</version>
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/dev-support/findbugs-exclude.xml b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/dev-support/findbugs-exclude.xml
new file mode 100644
index 0000000..e4e59d9
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/dev-support/findbugs-exclude.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+       http://www.apache.org/licenses/LICENSE-2.0
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+<FindBugsFilter>
+</FindBugsFilter>
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/dev-support/findbugs-exclude.xml b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/dev-support/findbugs-exclude.xml
new file mode 100644
index 0000000..e4e59d9
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/dev-support/findbugs-exclude.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+       http://www.apache.org/licenses/LICENSE-2.0
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+<FindBugsFilter>
+</FindBugsFilter>
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/pom.xml b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/pom.xml
new file mode 100644
index 0000000..02e0fdc
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/pom.xml
@@ -0,0 +1,173 @@
+<!--
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+    http://www.apache.org/licenses/LICENSE-2.0
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License. See accompanying LICENSE file.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>hadoop-applications-mawo</artifactId>
+        <groupId>org.apache.hadoop.applications.mawo</groupId>
+        <version>3.3.0-SNAPSHOT</version>
+    </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <!-- <groupId>org.apache.hadoop.applications.mawo</groupId> -->
+  <artifactId>hadoop-applications-mawo-core</artifactId>
+  <packaging>jar</packaging>
+
+  <name>Apache Hadoop YARN Application MaWo Core</name>
+  <url>http://maven.apache.org</url>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.hadoop</groupId>
+      <artifactId>hadoop-common</artifactId>
+    </dependency>
+
+      <dependency>
+          <groupId>org.apache.hadoop</groupId>
+          <artifactId>hadoop-common</artifactId>
+          <type>test-jar</type>
+          <scope>test</scope>
+      </dependency>
+
+    <dependency>
+      <groupId>com.google.inject</groupId>
+      <artifactId>guice</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.curator</groupId>
+      <artifactId>curator-framework</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.curator</groupId>
+      <artifactId>curator-client</artifactId>
+    </dependency>
+
+      <dependency>
+          <groupId>org.apache.curator</groupId>
+          <artifactId>curator-test</artifactId>
+          <scope>test</scope>
+      </dependency>
+
+    <dependency>
+      <groupId>commons-io</groupId>
+      <artifactId>commons-io</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>commons-cli</groupId>
+      <artifactId>commons-cli</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.zookeeper</groupId>
+      <artifactId>zookeeper</artifactId>
+      <exclusions>
+        <exclusion>
+        <!-- otherwise seems to drag in junit 3.8.1 via jline -->
+          <groupId>junit</groupId>
+          <artifactId>junit</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>com.sun.jdmk</groupId>
+          <artifactId>jmxtools</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>com.sun.jmx</groupId>
+          <artifactId>jmxri</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.jboss.netty</groupId>
+          <artifactId>netty</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>com.googlecode.json-simple</groupId>
+      <artifactId>json-simple</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.httpcomponents</groupId>
+      <artifactId>httpclient</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.httpcomponents</groupId>
+      <artifactId>httpcore</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.mockito</groupId>
+      <artifactId>mockito-all</artifactId>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-assembly-plugin</artifactId>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <configuration>
+          <descriptors>
+            <descriptor>src/assembly/bin.xml</descriptor>
+          </descriptors>
+          <finalName>hadoop-applications-mawo-core-${project.version}</finalName>
+        </configuration>
+        <executions>
+          <execution>
+            <phase>package</phase>
+            <goals>
+              <goal>single</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.rat</groupId>
+        <artifactId>apache-rat-plugin</artifactId>
+        <configuration>
+          <excludes>
+              <exclude>target/**/*</exclude>
+          </excludes>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/assembly/bin.xml b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/assembly/bin.xml
new file mode 100644
index 0000000..6f2d9a8
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/assembly/bin.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+    http://www.apache.org/licenses/LICENSE-2.0
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License. See accompanying LICENSE file.
+-->
+<assembly>
+   <id>bin</id>
+   <formats>
+      <format>tar.gz</format>
+   </formats>
+   <fileSets>
+      <fileSet>
+         <includes>
+            <include>README*</include>
+         </includes>
+      </fileSet>
+
+      <!-- Packaging the bin scripts -->
+      <fileSet>
+         <directory>src/main/bin</directory>
+         <outputDirectory>bin</outputDirectory>
+      </fileSet>
+
+      <!-- Package the main artifcats -->
+      <fileSet>
+         <directory>target</directory>
+         <outputDirectory>/</outputDirectory>
+         <includes>
+            <include>*.jar</include>
+         </includes>
+      </fileSet>
+
+   </fileSets>
+</assembly>
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/AbstractTask.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/AbstractTask.java
new file mode 100644
index 0000000..f27c4ee
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/AbstractTask.java
@@ -0,0 +1,246 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.applications.mawo.server.common;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.apache.hadoop.io.IntWritable;
+import org.apache.hadoop.io.Text;
+import org.apache.hadoop.io.WritableUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+/**
+ * Abstract class for MaWo Task.
+ */
+public abstract class AbstractTask implements Task {
+  /**
+   * Task identifier.
+   */
+  private TaskId taskID = new TaskId();
+  /**
+   * Task environment.
+   */
+  private Map<String, String> environment = new HashMap<String, String>();
+  /**
+   * Command which need to be executed as Task.
+   */
+  private String taskCmd;
+  /**
+   * Type of task.
+   */
+  private TaskType taskType;
+  /**
+   * Task timeout.
+   */
+  private long timeout;
+  /**
+   * logger for abstract class.
+   */
+  static final Logger LOG = LoggerFactory.getLogger(AbstractTask.class);
+
+  /**
+   * AbstractTask constructor.
+   */
+  public AbstractTask() {
+  }
+
+  /**
+   * AbstrackTask constructor.
+   * @param taskId : Task identifier
+   * @param localenvironment : Task environment vars
+   * @param taskCMD : Cmd to run
+   * @param localtimeout : Task timeout in seconds
+   */
+
+  public AbstractTask(final TaskId taskId,
+      final Map<String, String> localenvironment,
+      final String taskCMD, final long localtimeout) {
+    this();
+    setTaskId(taskId);
+    setEnvironment(localenvironment);
+    setTaskCmd(taskCMD);
+    setTimeout(localtimeout);
+    LOG.info("Created Task - type: " + this.taskType + ", TaskId: "
+        + this.taskID.toString() + ", cmd: '" + taskCMD + "' Timeout: "
+        + timeout);
+  }
+
+  /**
+   * Get environment for a Task.
+   * @return environment of a Task
+   */
+  @Override
+  public final Map<String, String> getEnvironment() {
+    return environment;
+  }
+
+  /**
+   * Set environment for a Task.
+   * @param localenvironment : Map of environment vars
+   */
+  @Override
+  public final void setEnvironment(final Map<String, String> localenvironment) {
+    this.environment = localenvironment;
+  }
+
+  /**
+   * Get TaskCmd for a Task.
+   * @return TaskCMD: Its a task command line such as sleep 10
+   */
+  @Override
+  public final String getTaskCmd() {
+    return taskCmd;
+  }
+
+  /**
+   * Set TaskCmd for a Task.
+   * @param taskCMD : Task command line
+   */
+  @Override
+  public final void setTaskCmd(final String taskCMD) {
+    this.taskCmd = taskCMD;
+  }
+
+  /**
+   * Get TaskId for a Task.
+   * @return TaskID: Task command line
+   */
+  @Override
+  public final TaskId getTaskId() {
+    return taskID;
+  }
+
+  /**
+   * Set Task Id.
+   * @param taskId : Task Identifier
+   */
+  @Override
+  public final void setTaskId(final TaskId taskId) {
+    if (taskId != null) {
+      this.taskID = taskId;
+    }
+  }
+
+  /**
+   * Get TaskType for a Task.
+   * @return TaskType: Type of Task
+   */
+  @Override
+  public final TaskType getTaskType() {
+    return taskType;
+  }
+
+  /**
+   * Set TaskType for a Task.
+   * @param type Simple or Composite Task
+   */
+  public final void setTaskType(final TaskType type) {
+    this.taskType = type;
+  }
+
+  /**
+   * Get Timeout for a Task.
+   * @return timeout in seconds
+   */
+  @Override
+  public final long getTimeout() {
+    return this.timeout;
+  }
+
+  /**
+   * Set Task Timeout in seconds.
+   * @param taskTimeout : Timeout in seconds
+   */
+  @Override
+  public final void setTimeout(final long taskTimeout) {
+    this.timeout = taskTimeout;
+  }
+
+  /**
+   * Write Task.
+   * @param out : dataoutout object.
+   * @throws IOException : Throws IO exception if any error occurs.
+   */
+  @Override
+  public final void write(final DataOutput out) throws IOException {
+    taskID.write(out);
+    int environmentSize = 0;
+    if (environment == null) {
+      environmentSize = 0;
+    } else {
+      environmentSize = environment.size();
+    }
+    new IntWritable(environmentSize).write(out);
+    if (environmentSize != 0) {
+      for (Entry<String, String> envEntry : environment.entrySet()) {
+        new Text(envEntry.getKey()).write(out);
+        new Text(envEntry.getValue()).write(out);
+      }
+    }
+    Text taskCmdText;
+    if (taskCmd == null) {
+      taskCmdText = new Text("");
+    } else {
+      taskCmdText = new Text(taskCmd);
+    }
+    taskCmdText.write(out);
+    WritableUtils.writeEnum(out, taskType);
+    WritableUtils.writeVLong(out, timeout);
+  }
+
+  /**
+   * Read Fields from file.
+   * @param in : datainput object.
+   * @throws IOException : Throws IOException in case of error.
+   */
+  @Override
+  public final void readFields(final DataInput in) throws IOException {
+    this.taskID = new TaskId();
+    taskID.readFields(in);
+    IntWritable envSize = new IntWritable(0);
+    envSize.readFields(in);
+    for (int i = 0; i < envSize.get(); i++) {
+      Text key = new Text();
+      Text value = new Text();
+      key.readFields(in);
+      value.readFields(in);
+      environment.put(key.toString(), value.toString());
+    }
+    Text taskCmdText = new Text();
+    taskCmdText.readFields(in);
+    taskCmd = taskCmdText.toString();
+    taskType = WritableUtils.readEnum(in, TaskType.class);
+    timeout = WritableUtils.readVLong(in);
+  }
+
+  /**
+   * ToString.
+   * @return String representation of Task
+   */
+  @Override
+  public final String toString() {
+    return "TaskId: " + this.taskID.toString() + ", TaskType: " + this.taskType
+        + ", cmd: '" + taskCmd + "'";
+  }
+}
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/CompositeTask.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/CompositeTask.java
new file mode 100644
index 0000000..05c17f8
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/CompositeTask.java
@@ -0,0 +1,42 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.applications.mawo.server.common;
+
+/**
+ * Composite Task is Task with multiple commands.
+ */
+public class CompositeTask extends AbstractTask {
+  /**
+   * Composite Task initializer.
+   */
+  public CompositeTask() {
+    super();
+    setTaskType(TaskType.COMPOSITE);
+  }
+
+  /**
+   * Composite initializer for specific task.
+   * @param task : Task object
+   */
+  public CompositeTask(final Task task) {
+    super(task.getTaskId(), task.getEnvironment(), task.getTaskCmd(),
+        task.getTimeout());
+    this.setTaskType(TaskType.COMPOSITE);
+  }
+}
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/DieTask.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/DieTask.java
new file mode 100644
index 0000000..6ac778f
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/DieTask.java
@@ -0,0 +1,32 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.applications.mawo.server.common;
+
+/**
+ * Die Task is a type of task which indicates app to die.
+ */
+public class DieTask extends AbstractTask {
+  /**
+   * Die Task constructor.
+   */
+  public DieTask() {
+    super();
+    setTaskType(TaskType.DIE);
+  }
+}
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/MawoConfiguration.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/MawoConfiguration.java
new file mode 100644
index 0000000..a019913
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/MawoConfiguration.java
@@ -0,0 +1,502 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.applications.mawo.server.common;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.inject.Singleton;
+
+/**
+ * MaWo configuration class.
+ */
+@Singleton
+public final class MawoConfiguration {
+  /**
+   * logger initialization for mawo config class.
+   */
+  static final Logger LOG = LoggerFactory.getLogger(MawoConfiguration.class);
+  /**
+   * Define comma separator.
+   */
+  static final String COMMA_SPLITTER = ",";
+  /**
+   * MaWo config file name.
+   */
+  public static final String CONFIG_FILE = "mawo.properties";
+
+  /**
+   * RPC server hostname.
+   */
+  private static final String RPC_SERVER_HOSTNAME = "rpc.server.hostname";
+  /**
+   * RPC server port.
+   */
+  private static final String RPC_SERVER_PORT = "rpc.server.port";
+
+  // Default values
+  /**
+   * RPC server hostname default value.
+   */
+  private static final String RPC_SERVER_HOSTNAME_DEFAULT = "localhost";
+  /**
+   * RPC server port default value.
+   */
+  private static final String RPC_SERVER_PORT_DEFAULT = "5121";
+
+  // Curator related Configurations
+  /**
+   * Config to check id Job Queue Storage is enabled.
+   */
+  private static final String JOB_QUEUE_STORAGE_ENABLED =
+      "mawo.job-queue-storage.enabled";
+
+  /**
+   * ZooKeeper property prefix.
+   */
+  private static final String ZK_PREFIX = "zookeeper.";
+  /**
+   * Property for ZooKeeper address.
+   */
+  private static final String ZK_ADDRESS = ZK_PREFIX + "address";
+  /**
+   * Default value for ZooKeeper address.
+   */
+  private static final String ZK_ADDRESS_DEFAULT = "localhost:2181";
+
+  /**
+   * Property for ZooKeeper parent path.
+   */
+  private static final String ZK_PARENT_PATH = ZK_PREFIX + "parent.path";
+  /**
+   * Property for ZooKeeper parent path default value.
+   */
+  private static final String ZK_PARENT_PATH_DEFAULT = "/mawoRoot";
+
+  /**
+   * Property for ZooKeeper retry interval.
+   */
+  private static final String ZK_RETRY_INTERVAL_MS =
+      ZK_PREFIX + "retry.interval.ms";
+  /**
+   * Default value for ZooKeeper retry interval.
+   */
+  private static final String ZK_RETRY_INTERVAL_MS_DEFAULT = "1000";
+
+  /**
+   * Property for Zookeeper session timeout.
+   */
+  private static final String ZK_SESSION_TIMEOUT_MS =
+      ZK_PREFIX + "session.timeout.ms";
+  /**
+   * Default value for ZooKeeper session timeout.
+   */
+  private static final String ZK_SESSION_TIMEOUT_MS_DEFAULT = "10000";
+
+  /**
+   * Property for ZooKeeper retry number.
+   */
+  private static final String ZK_RETRIES_NUM = ZK_PREFIX + "retries.num";
+  /**
+   * Default value for ZooKeeper retry number.
+   */
+  private static final String ZK_RETRIES_NUM_DEFAULT = "1000";
+
+  /**
+   * Property for ZooKeeper acl.
+   */
+  private static final String ZK_ACL = ZK_PREFIX + "acl";
+  /**
+   * Default value for ZooKeeper acl.
+   */
+  private static final String ZK_ACL_DEFAULT = "world:anyone:rwcda";
+
+  /**
+   * Property for setting num of workers.
+   */
+  private static final String WORKER_NUM_TASKS = "worker.num.tasks";
+  /**
+   * Default value for num of workers.
+   */
+  private static final String WORKER_NUM_TASKS_DEFAULT = "10";
+
+  /**
+   * Property for setting job builder class.
+   */
+  public static final String JOB_BUILDER_CLASS = "mawo.job-builder.class";
+  /**
+   * Default value for job builder class = simpleTaskJobBuilder.
+   */
+  private static final String JOB_BUILDER_CLASS_DEFAULT =
+      "org.apache.hadoop.applications.mawo.server.master.job."
+          + "SimpleTaskJobBuilder";
+
+  /**
+   * Property for setting worker workspace.
+   */
+  private static final String WORKER_WORK_SPACE = "worker.workspace";
+  /**
+   * Default value for worker workspace.
+   */
+  private static final String WORKER_WORK_SPACE_DEFAULT = "/tmp";
+
+  /**
+   * Property for resource manager url.
+   */
+  public static final String CLUSTER_MANAGER_URL = "ycloud.url";
+  /**
+   * Default value for resource manager url.
+   */
+  private static final String DEFAULT_CLUSTER_MANAGER_URL = "0.0.0.0:9191";
+
+  /**
+   * Property for setting auto shutdown for worker.
+   */
+  public static final String AUTO_SHUTDOWN_WORKERS =
+      "mawo.master.auto-shutdown-workers";
+  /**
+   * Set auto shutdown of workers to False by default.
+   */
+  private static final boolean DEFAULT_AUTO_SHUTDOWN_WORKERS = false;
+
+  /**
+   * Property for task status log path in master node.
+   */
+  public static final String MASTER_TASKS_STATUS_LOG_PATH
+      = "master.tasks-status.log.path";
+  /**
+   * Default value for task status log path.
+   */
+  private static final String MASTER_TASKS_STATUS_LOG_PATH_DEFAULT = "/tmp";
+
+  /**
+   * Property for drain event timeout.
+   */
+  private static final String MASTER_DRAIN_EVENTS_TIMEOUT =
+      "master.drain-events.timeout";
+  /**
+   * Default value for drain event timeout.
+   */
+  private static final long MASTER_DRAIN_EVENTS_TIMEOUT_DEFAULT = 60000;
+
+  /**
+   * Property for worker white list env.
+   * This environment variables will be set for all tasks.
+   */
+  private static final String WORKER_WHITELIST_ENV = "worker.whitelist.env";
+  /**
+   * Default value for worker white list env.
+   */
+  private static final String WORKER_WHITELIST_ENV_DEFAULT = "";
+
+  /**
+   * Property for teardown worker validity.
+   */
+  private static final String MASTER_TEARDOWN_WORKER_VALIDITY_INTERVAL_MS =
+      "master.teardown-worker.validity-interval.ms";
+  /**
+   * Default value for teardown worker validity.
+   */
+  private static final String
+      MASTER_TEARDOWN_WORKER_VALIDITY_INTERVAL_MS_DEFAULT = "120000";
+
+  /**
+   * Map of MaWo Configs.
+   */
+  private Map<String, String> configsMap;
+
+  /**
+   * Mowo configuration initializer.
+   */
+  public MawoConfiguration() {
+    this(readConfigFile());
+  }
+
+  /**
+   * Set up MaWo properties.
+   * @param properties : Map of properties
+   */
+  private MawoConfiguration(final Properties properties) {
+
+    configsMap = new HashMap<String, String>();
+
+    configsMap.put(RPC_SERVER_HOSTNAME, properties
+        .getProperty(RPC_SERVER_HOSTNAME, RPC_SERVER_HOSTNAME_DEFAULT));
+    configsMap.put(RPC_SERVER_PORT,
+        properties.getProperty(RPC_SERVER_PORT, RPC_SERVER_PORT_DEFAULT));
+
+    configsMap.put(ZK_ADDRESS,
+        properties.getProperty(ZK_ADDRESS, ZK_ADDRESS_DEFAULT));
+    configsMap.put(ZK_PARENT_PATH,
+        properties.getProperty(ZK_PARENT_PATH, ZK_PARENT_PATH_DEFAULT));
+    configsMap.put(ZK_RETRY_INTERVAL_MS, properties
+        .getProperty(ZK_RETRY_INTERVAL_MS, ZK_RETRY_INTERVAL_MS_DEFAULT));
+    configsMap.put(ZK_SESSION_TIMEOUT_MS, properties
+        .getProperty(ZK_SESSION_TIMEOUT_MS, ZK_SESSION_TIMEOUT_MS_DEFAULT));
+    configsMap.put(ZK_RETRIES_NUM,
+        properties.getProperty(ZK_RETRIES_NUM, ZK_RETRIES_NUM_DEFAULT));
+    configsMap.put(ZK_ACL, properties.getProperty(ZK_ACL, ZK_ACL_DEFAULT));
+
+    configsMap.put(JOB_BUILDER_CLASS,
+        properties.getProperty(JOB_BUILDER_CLASS, JOB_BUILDER_CLASS_DEFAULT));
+
+    configsMap.put(JOB_QUEUE_STORAGE_ENABLED,
+        properties.getProperty(JOB_QUEUE_STORAGE_ENABLED, "false"));
+
+    configsMap.put(CLUSTER_MANAGER_URL, properties
+        .getProperty(CLUSTER_MANAGER_URL, DEFAULT_CLUSTER_MANAGER_URL));
+
+    configsMap.put(WORKER_NUM_TASKS,
+        properties.getProperty(WORKER_NUM_TASKS, WORKER_NUM_TASKS_DEFAULT));
+
+    configsMap.put(WORKER_WORK_SPACE,
+        properties.getProperty(WORKER_WORK_SPACE, WORKER_WORK_SPACE_DEFAULT));
+
+    configsMap.put(AUTO_SHUTDOWN_WORKERS, properties.getProperty(
+        AUTO_SHUTDOWN_WORKERS, String.valueOf(DEFAULT_AUTO_SHUTDOWN_WORKERS)));
+
+    configsMap.put(MASTER_TASKS_STATUS_LOG_PATH, properties.getProperty(
+        MASTER_TASKS_STATUS_LOG_PATH,
+        String.valueOf(MASTER_TASKS_STATUS_LOG_PATH_DEFAULT)));
+
+    configsMap.put(MASTER_DRAIN_EVENTS_TIMEOUT,
+        properties.getProperty(MASTER_DRAIN_EVENTS_TIMEOUT,
+        String.valueOf(MASTER_DRAIN_EVENTS_TIMEOUT_DEFAULT)));
+
+    configsMap.put(WORKER_WHITELIST_ENV, properties.getProperty(
+        WORKER_WHITELIST_ENV, WORKER_WHITELIST_ENV_DEFAULT));
+
+    configsMap.put(MASTER_TEARDOWN_WORKER_VALIDITY_INTERVAL_MS,
+        properties.getProperty(MASTER_TEARDOWN_WORKER_VALIDITY_INTERVAL_MS,
+            MASTER_TEARDOWN_WORKER_VALIDITY_INTERVAL_MS_DEFAULT));
+
+  }
+
+  /**
+   * Get MaWo config map.
+   * @return the config map for MaWo properties
+   */
+
+  public Map<String, String> getConfigsMap() {
+    return configsMap;
+  }
+
+  /**
+   * Find, read, and parse the configuration file.
+   *
+   * @return the properties that were found or empty if no file was found
+   */
+  private static Properties readConfigFile() {
+    Properties properties = new Properties();
+
+    // Get property file stream from classpath
+    LOG.info("Configuration file being loaded: " + CONFIG_FILE
+        + ". Found in classpath at "
+        + MawoConfiguration.class.getClassLoader().getResource(CONFIG_FILE));
+    InputStream inputStream = MawoConfiguration.class.getClassLoader()
+        .getResourceAsStream(CONFIG_FILE);
+
+    if (inputStream == null) {
+      throw new RuntimeException(CONFIG_FILE + " not found in classpath");
+    }
+
+    // load the properties
+    try {
+      properties.load(inputStream);
+      inputStream.close();
+    } catch (FileNotFoundException fnf) {
+      LOG.error(
+          "No configuration file " + CONFIG_FILE + " found in classpath.");
+    } catch (IOException ie) {
+      throw new IllegalArgumentException(
+          "Can't read configuration file " + CONFIG_FILE, ie);
+    }
+
+    return properties;
+  }
+
+  /**
+   * Get MaWo RPC server Port.
+   * @return value of rpc.server.port
+   */
+  public int getRpcServerPort() {
+    return Integer.parseInt(configsMap.get(RPC_SERVER_PORT));
+  }
+
+  /**
+   * Get RPC Host map.
+   * @return value of rpc.server.hostname
+   */
+  public String getRpcHostName() {
+    return configsMap.get(RPC_SERVER_HOSTNAME);
+  }
+
+  /**
+   * Check if Job Queue Storage is Enabled.
+   * @return True if Job queue storage is enabled otherwise False
+   */
+  public boolean getJobQueueStorageEnabled() {
+    return Boolean.parseBoolean(configsMap.get(JOB_QUEUE_STORAGE_ENABLED));
+  }
+
+  /**
+   * Get ZooKeeper Address.
+   * @return value of ZooKeeper.address
+   */
+  public String getZKAddress() {
+    return configsMap.get(ZK_ADDRESS);
+  }
+
+  /**
+   * Get ZooKeeper parent Path.
+   * @return value of ZooKeeper.parent.path
+   */
+  public String getZKParentPath() {
+    return configsMap.get(ZK_PARENT_PATH);
+  }
+
+  /**
+   * Get ZooKeeper retry interval value in milli seconds.
+   * @return value of ZooKeeper.retry.interval.ms
+   */
+  public int getZKRetryIntervalMS() {
+    return Integer.parseInt(configsMap.get(ZK_RETRY_INTERVAL_MS));
+  }
+
+  /**
+   * Get ZooKeeper session timeout in milli seconds.
+   * @return value of ZooKeeper.session.timeout.ms
+   */
+  public int getZKSessionTimeoutMS() {
+    return Integer.parseInt(configsMap.get(ZK_SESSION_TIMEOUT_MS));
+  }
+
+  /**
+   * Get ZooKeeper retries number.
+   * @return value of ZooKeeper.retries.num
+   */
+  public int getZKRetriesNum() {
+    return Integer.parseInt(configsMap.get(ZK_RETRIES_NUM));
+  }
+
+  /**
+   * Get ZooKeeper Acls.
+   * @return value of ZooKeeper.acl
+   */
+  public String getZKAcl() {
+    return configsMap.get(ZK_ACL);
+  }
+
+  /**
+   * Get number of tasks a worker can run in parallel.
+   * @return value of worker.num.tasks
+   */
+  public int getWorkerConcurrentTasksLimit() {
+    return Integer.parseInt(configsMap.get(WORKER_NUM_TASKS));
+  }
+
+  /**
+   * Get job builder class.
+   * @return value of mawo.job-builder.class
+   */
+  public String getJobBuilderClass() {
+    return configsMap.get(JOB_BUILDER_CLASS);
+  }
+
+  /**
+   * Get worker work space.
+   * @return value of worker.workspace
+   */
+  public String getWorkerWorkSpace() {
+    return configsMap.get(WORKER_WORK_SPACE);
+  }
+
+  /**
+   * Get cluster manager URL.
+   * @return value of ycloud.url
+   */
+  public String getClusterManagerURL() {
+    return configsMap.get(CLUSTER_MANAGER_URL);
+  }
+
+  /**
+   * Check if worker auto shutdown feature is enabled.
+   * @return value of mawo.master.auto-shutdown-workers
+   */
+  public boolean getAutoShutdownWorkers() {
+    return Boolean.parseBoolean(configsMap.get(AUTO_SHUTDOWN_WORKERS));
+  }
+
+  /**
+   * Get Task status log file path on master host.
+   * @return value of master.tasks-status.log.path
+   */
+  public String getMasterTasksStatusLogPath() {
+    return configsMap.get(MASTER_TASKS_STATUS_LOG_PATH);
+  }
+
+  /**
+   * Get Master drain event timeout.
+   * @return value of master.drain-events.timeout
+   */
+  public long getMasterDrainEventsTimeout() {
+    return Long.parseLong(configsMap.get(MASTER_DRAIN_EVENTS_TIMEOUT));
+  }
+
+  /**
+   * Get Worker whitelist env params.
+   * These params will be set in all tasks.
+   * @return list of white list environment
+   */
+  public List<String> getWorkerWhiteListEnv() {
+    List<String> whiteList = new ArrayList<String>();
+    String env = configsMap.get(WORKER_WHITELIST_ENV);
+    if (env != null && !env.isEmpty()) {
+      String[] variables = env.split(COMMA_SPLITTER);
+      for (String variable : variables) {
+        variable = variable.trim();
+        if (variable.startsWith("$")) {
+          variable = variable.substring(1);
+        }
+        if (!variable.isEmpty()) {
+          whiteList.add(variable);
+        }
+      }
+    }
+    return whiteList;
+  }
+
+  /**
+   * Get Teardown worker validity interval.
+   * @return value of master.teardown-worker.validity-interval.ms
+   */
+  public long getTeardownWorkerValidityInterval() {
+    return Long.parseLong(configsMap.get(
+        MASTER_TEARDOWN_WORKER_VALIDITY_INTERVAL_MS));
+  }
+}
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/NullTask.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/NullTask.java
new file mode 100644
index 0000000..c934913
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/NullTask.java
@@ -0,0 +1,33 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.applications.mawo.server.common;
+
+/**
+ * Define Null Task.
+ */
+public class NullTask extends AbstractTask {
+
+  /**
+   * Null Task initializer.
+   */
+  public NullTask() {
+    super();
+    this.setTaskType(TaskType.NULL);
+  }
+}
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/SimpleTask.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/SimpleTask.java
new file mode 100644
index 0000000..1dd87a6
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/SimpleTask.java
@@ -0,0 +1,57 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.applications.mawo.server.common;
+
+import java.util.Map;
+
+/**
+ * Define Simple Task.
+ * Each Task has only one command
+ */
+public class SimpleTask extends AbstractTask {
+  /**
+   * Simple Task default initializer.
+   */
+  public SimpleTask() {
+    super();
+    this.setTaskType(TaskType.SIMPLE);
+  }
+
+  /**
+   * Set up Simple Task with Task object.
+   * @param task : Task object
+   */
+  public SimpleTask(final Task task) {
+    this(task.getTaskId(), task.getEnvironment(), task.getTaskCmd(),
+        task.getTimeout());
+  }
+
+  /**
+   * Create Simple Task with Task details.
+   * @param taskId : task identifier
+   * @param environment : task environment
+   * @param taskCMD : task command
+   * @param timeout : task timeout
+   */
+  public SimpleTask(final TaskId taskId, final Map<String, String> environment,
+      final String taskCMD, final long timeout) {
+    super(taskId, environment, taskCMD, timeout);
+    this.setTaskType(TaskType.SIMPLE);
+  }
+}
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/Task.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/Task.java
new file mode 100644
index 0000000..e6b42ac
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/Task.java
@@ -0,0 +1,83 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.applications.mawo.server.common;
+
+import java.util.Map;
+
+import org.apache.hadoop.io.Writable;
+
+/**
+ * Define Task Interface.
+ */
+public interface Task extends Writable {
+
+  /**
+   * Get TaskId of a Task.
+   * @return value of TaskId
+   */
+  TaskId getTaskId();
+
+  /**
+   * Get Environment of Task.
+   * @return map of environment
+   */
+  Map<String, String> getEnvironment();
+
+  /**
+   * Get Task cmd.
+   * @return value of Task cmd such "sleep 1"
+   */
+  String getTaskCmd();
+
+  /**
+   * Get Task type such as Simple, Composite.
+   * @return value of TaskType
+   */
+  TaskType getTaskType();
+
+  /**
+   * Set TaskId.
+   * @param taskId : Task identifier
+   */
+  void setTaskId(TaskId taskId);
+
+  /**
+   * Set Task environment such as {"HOME":"/user/A"}.
+   * @param environment : Map of environment variables
+   */
+  void setEnvironment(Map<String, String> environment);
+
+  /**
+   * Set Task command.
+   * @param taskCMD : Task command to be executed
+   */
+  void setTaskCmd(String taskCMD);
+
+  /**
+   * Get Task Timeout in seconds.
+   * @return value of TaskTimeout
+   */
+  long getTimeout();
+
+  /**
+   * Set Task Timeout.
+   * @param timeout : value of Task Timeout
+   */
+  void setTimeout(long timeout);
+}
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/TaskId.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/TaskId.java
new file mode 100644
index 0000000..19f8cbe
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/TaskId.java
@@ -0,0 +1,149 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.applications.mawo.server.common;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.hadoop.applications.mawo.server.master.job.JobId;
+import org.apache.hadoop.io.Writable;
+import org.apache.hadoop.io.WritableUtils;
+
+/**
+ * Defines TaskId for MaWo app.
+ */
+public class TaskId implements Writable {
+
+  /**
+   * MaWo TaskIds prefix.
+   */
+  static final String TASK_ID_PREFIX = "mawo_task_";
+
+  /**
+   * MaWo Job ID.
+   */
+  private JobId jobId = new JobId();
+  /**
+   * Mawo TaskId.
+   */
+  private long taskId;
+
+  /**
+   * TaskId constructor.
+   */
+  public TaskId() {
+  }
+
+  /**
+   * TaskId constructor with jobId and taskId.
+   * @param localjobId : Job identifier
+   * @param id : Task identifier
+   */
+  public TaskId(final JobId localjobId, final int id) {
+    this.jobId = localjobId;
+    this.taskId = id;
+  }
+
+  /**
+   * Getter method for jobId.
+   * @return JobID: Job identifier
+   */
+  public final int getJobId() {
+    return jobId.getID();
+  }
+
+  /**
+   * Getter method for TaskID.
+   * @return TaskId: Task identifier
+   */
+  public final long getId() {
+    return taskId;
+  }
+
+  /**
+   * Print method for TaskId.
+   * @return : Full TaskId which is TaskId_prefix + jobId + _ + TaskId
+   */
+  public final String toString() {
+    return TASK_ID_PREFIX + jobId.getID() + "_" + taskId;
+  }
+
+  @Override
+  /**
+   * Hashcode method for TaskId.
+   */
+  public final int hashCode() {
+    final int prime = 31;
+    final int bits = 32;
+    int result = 1;
+    int jobHash = 0;
+    if (jobId == null) {
+      jobHash = 0;
+    } else {
+      jobHash = jobId.hashCode();
+    }
+    result = prime * result + jobHash;
+    result = prime * result + (int) (taskId ^ (taskId >>> bits));
+    return result;
+  }
+
+  @Override
+  /**
+   * Equal method override for TaskId.
+   */
+  public final boolean equals(final Object obj) {
+    if (this == obj) {
+      return true;
+    }
+    if (obj == null) {
+      return false;
+    }
+    if (getClass() != obj.getClass()) {
+      return false;
+    }
+
+    TaskId other = (TaskId) obj;
+    if (jobId == null) {
+      if (other.jobId != null) {
+        return false;
+      }
+    } else if (!jobId.equals(other.jobId)) {
+      return false;
+    }
+    if (taskId != other.taskId) {
+      return false;
+    }
+    return true;
+  }
+
+  /** {@inheritDoc} */
+  public final void write(final DataOutput out) throws IOException {
+    jobId.write(out);
+    WritableUtils.writeVLong(out, taskId);
+  }
+
+  /** {@inheritDoc} */
+  public final void readFields(final DataInput in) throws IOException {
+    jobId = new JobId();
+    jobId.readFields(in);
+    this.taskId = WritableUtils.readVLong(in);
+  }
+
+}
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/TaskStatus.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/TaskStatus.java
new file mode 100644
index 0000000..4f780d8
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/TaskStatus.java
@@ -0,0 +1,347 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.applications.mawo.server.common;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.hadoop.applications.mawo.server.worker.WorkerId;
+import org.apache.hadoop.io.Writable;
+import org.apache.hadoop.io.WritableUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Defines TaskStatus for MaWo app.
+ */
+public class TaskStatus implements Writable, Cloneable {
+
+  /**
+   * Set logger.
+   */
+  private static final Logger LOG = LoggerFactory.getLogger(TaskStatus.class);
+
+  /**
+   * TaskId is a unique task identifier.
+   */
+  private TaskId taskId = new TaskId();
+  /**
+   * epoch time for a task starttime.
+   */
+  private long startTime;
+  /**
+   * epoch time for a task endtime.
+   */
+  private long endTime;
+  /**
+   * Unique worker identifier.
+   */
+  private WorkerId workerId = new WorkerId();
+  /**
+   * Task exit code.
+   */
+  private int exitCode = -1;
+  /**
+   * Task cmd.
+   */
+  private String taskCMD;
+  /**
+   * Task type.
+   */
+  private String taskType;
+
+  /**
+   * Possible Task States.
+   */
+  public enum State {
+    /**
+     * INIT State refers to Task initialization.
+     */
+    INIT,
+    /**
+     * RUNNING State refers to Task in Running state.
+     */
+
+    RUNNING,
+    /**
+     * SUCCEEDED State is assigned when task finishes successfully.
+     */
+    SUCCEEDED,
+    /**
+     * FAILED State is assigned when task fails.
+     */
+    FAILED,
+    /**
+     * KILLED State refers to when a task is killed.
+     */
+    KILLED,
+    /**
+     * EXPIRE State refers to when a task is expired.
+     */
+    EXPIRE
+  }
+
+  /**
+   * Current Task state.
+   */
+  private volatile State runState;
+
+  /**
+   * Task status constructor.
+   */
+  public TaskStatus() {
+  }
+
+  /**
+   * Task status constructor with workerId, TaskId, TaskCmd, TaskType.
+   * @param localworkerId : Worker ID
+   * @param localtaskId : Task ID
+   * @param localtaskCMD : Task command line
+   * @param localtaskType : Type of Task
+   */
+  public TaskStatus(final WorkerId localworkerId, final TaskId localtaskId,
+                    final String localtaskCMD, final String localtaskType) {
+    this(localworkerId, localtaskId,
+        TaskStatus.State.INIT, localtaskCMD,
+        localtaskType);
+  }
+
+  /**
+   * Task status constructor with workerId, TaskId,
+   * TaskCmd, TaskType and Run State.
+   * @param localworkerId : Worker Id
+   * @param localtaskId : Task Id
+   * @param localrunState : Task run State
+   * @param localtaskCMD : Task cmd
+   * @param localtaskType : Task type
+   */
+  public TaskStatus(final WorkerId localworkerId, final TaskId localtaskId,
+      final State localrunState, final String localtaskCMD,
+      final String localtaskType) {
+    setWorkerId(localworkerId);
+    setTaskId(localtaskId);
+    setRunState(localrunState);
+    setTaskCMD(localtaskCMD);
+    setTaskType(localtaskType);
+  }
+
+  /**
+   * Get status of a Task.
+   * @return Status of a Task
+   */
+  public final State getRunState() {
+    return runState;
+  }
+
+  /**
+   * Update status of a Task.
+   * @param localrunState : Status of a Task
+   */
+  public final void setRunState(final State localrunState) {
+    this.runState = localrunState;
+  }
+
+  /**
+   * Set exitcode of a Task.
+   * @param localexitCode : Exitcode of a Task
+   */
+  public final void setExitCode(final int localexitCode) {
+    this.exitCode = localexitCode;
+  }
+
+  /**
+   * Get exitcode of a Task.
+   * @return exitCode of Task
+   */
+  public final int getExitCode() {
+    return exitCode;
+  }
+
+  /**
+   * Set Task cmd of a Task.
+   * @param localcmd : command line which need to be executed
+   */
+  public final void setTaskCMD(final String localcmd) {
+    this.taskCMD = localcmd;
+  }
+
+  /**
+   * Get Task cmd of a Task.
+   * @return TaskCmd : command line which need to be executed
+   */
+  public final String getTaskCMD() {
+    return taskCMD;
+  }
+
+  /**
+   * Set Task Type.
+   * @param localtaskType : TaskType such as SimpleTask, NullTask
+   */
+  public final void setTaskType(final String localtaskType) {
+    this.taskType = localtaskType;
+  }
+
+  /**
+   * Get Task Type.
+   * @return TaskType : TaskType such as SimpleTask, NullTask
+   */
+  public final String getTaskType() {
+    return taskType;
+  }
+
+  /**
+   * Get Task Id.
+   * @return TaskId : Task identifier
+   */
+  public final TaskId getTaskId() {
+    return taskId;
+  }
+
+  /**
+   * Set TaskId.
+   * @param localtaskId : Task identifier
+   */
+  public final void setTaskId(final TaskId localtaskId) {
+    if (localtaskId != null) {
+      this.taskId = localtaskId;
+    }
+  }
+
+  /**
+   * Set staus of a Task.
+   * @param localtaskId : TaskId of a task
+   * @param localrunState : Run state of a task
+   */
+  public final void setTaskState(final TaskId localtaskId,
+      final State localrunState) {
+    setTaskId(localtaskId);
+    setRunState(localrunState);
+  }
+
+  /**
+   * Get Task status of a Task.
+   * @param localtaskId : Task Id
+   * @return TaskStatus for valid Task otherwise Null
+   */
+  public final State getTaskState(final TaskId localtaskId) {
+    if (localtaskId.equals(this.taskId)) {
+      return getRunState();
+    } else {
+      return null;
+    }
+  }
+
+  /**
+   * Get starttime of a Task.
+   * @return StartTime of Task
+   */
+  public final long getStartTime() {
+    return startTime;
+  }
+
+  /**
+   * Set current time as start time of a Task.
+   */
+  public final void setStartTime() {
+    this.startTime = getCurrentTime();
+    LOG.debug("Start Time for " + this.taskId + " is " + this.startTime);
+  }
+
+  /**
+   * Set task start time to a specific time value.
+   * @param time : epoch timestamp
+   */
+  private void setStartTime(final long time) {
+    this.startTime = time;
+  }
+
+  /**
+   * Get task end time.
+   * @return End time of task.
+   */
+  public final long getEndTime() {
+    return endTime;
+  }
+
+  /**
+   * Set task end time to current time.
+   */
+  public final void setEndTime() {
+    this.setEndTime(getCurrentTime());
+  }
+
+  /**
+   * Set task end time to a specific time value.
+   * @param time : epoch timestamp
+   */
+  private void setEndTime(final long time) {
+    this.endTime = time;
+    LOG.debug("End Time for " + this.taskId + " is " + this.endTime);
+  }
+
+  /**
+   * Get current time in milliseconds.
+   * @return Current time in milliseconds
+   */
+  private long getCurrentTime() {
+    return System.currentTimeMillis();
+  }
+
+  /** {@inheritDoc} */
+  public final void write(final DataOutput dataOutput) throws IOException {
+    workerId.write(dataOutput);
+    taskId.write(dataOutput);
+    WritableUtils.writeEnum(dataOutput, runState);
+    WritableUtils.writeVLong(dataOutput, getStartTime());
+    WritableUtils.writeVLong(dataOutput, getEndTime());
+    WritableUtils.writeString(dataOutput, taskCMD);
+    WritableUtils.writeString(dataOutput, taskType);
+    WritableUtils.writeVInt(dataOutput, exitCode);
+  }
+
+
+  /** {@inheritDoc} */
+  public final void readFields(final DataInput dataInput) throws IOException {
+    workerId.readFields(dataInput);
+    taskId.readFields(dataInput);
+    setRunState(WritableUtils.readEnum(dataInput, State.class));
+    setStartTime(WritableUtils.readVLong(dataInput));
+    setEndTime(WritableUtils.readVLong(dataInput));
+    setTaskCMD(WritableUtils.readString(dataInput));
+    setTaskType(WritableUtils.readString(dataInput));
+    setExitCode(WritableUtils.readVInt(dataInput));
+  }
+
+  /**
+   * Get workerId.
+   * @return workerId : Worker identifier
+   */
+  public final WorkerId getWorkerId() {
+    return workerId;
+  }
+
+  /**
+   * Set WorkerId.
+   * @param localworkerId : Worker identifier
+   */
+  public final void setWorkerId(final WorkerId localworkerId) {
+    this.workerId = localworkerId;
+  }
+}
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/TaskType.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/TaskType.java
new file mode 100644
index 0000000..b7f22ee
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/TaskType.java
@@ -0,0 +1,45 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.applications.mawo.server.common;
+
+/**
+ * Define MaWo Task Type.
+ */
+public enum TaskType {
+  /**
+   * Its a Simple Task.
+   */
+  SIMPLE,
+  /**
+   * Its a composite task which consists of multiple simple tasks.
+   */
+  COMPOSITE,
+  /**
+   * Its a null task.
+   */
+  NULL,
+  /**
+   * Die Task is to signal for suicide.
+   */
+  DIE,
+  /**
+   * Teardown Task is a task which runs after all tasks are finished.
+   */
+  TEARDOWN
+}
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/TeardownTask.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/TeardownTask.java
new file mode 100644
index 0000000..959e2cb
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/TeardownTask.java
@@ -0,0 +1,48 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.applications.mawo.server.common;
+
+import java.util.Map;
+
+/**
+ * Define Teardown Task.
+ */
+public class TeardownTask extends SimpleTask {
+  /**
+   * Teardown task default constructor.
+   */
+  public TeardownTask() {
+    super();
+    setTaskType(TaskType.TEARDOWN);
+  }
+
+  /**
+   * Teardown Task constructor.
+   * @param taskId : Teardown task Id
+   * @param environment : Environment map for teardown task
+   * @param taskCMD : Teardown task command
+   * @param timeout : Timeout for Teardown task
+   */
+  public TeardownTask(final TaskId taskId,
+      final Map<String, String> environment,
+      final String taskCMD, final long timeout) {
+    super(taskId, environment, taskCMD, timeout);
+    setTaskType(TaskType.TEARDOWN);
+  }
+}
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/WorkAssignmentProtocol.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/WorkAssignmentProtocol.java
new file mode 100644
index 0000000..39cb283
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/WorkAssignmentProtocol.java
@@ -0,0 +1,65 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.applications.mawo.server.common;
+
+import org.apache.hadoop.applications.mawo.server.worker.WorkerId;
+import org.apache.hadoop.io.Text;
+import org.apache.hadoop.ipc.ProtocolInfo;
+
+/**
+ * Define work assignment protocol.
+ */
+@ProtocolInfo(protocolName = "WorkAssignmentProtocol", protocolVersion = 1)
+public interface WorkAssignmentProtocol {
+
+  /**
+   * Get next workerId to which new task will be assigned.
+   * @return return workerId text
+   */
+  Text getNewWorkerId();
+
+  /**
+   * Register Worker.
+   * When worker will be launched first, it needs to be registered with Master.
+   * @param workerId : Worker Id
+   * @return Task instance
+   */
+  Task registerWorker(WorkerId workerId);
+
+  /**
+   * De Register worker.
+   * When worker is de-registered, no new task will be assigned to this worker.
+   * @param workerId : Worker identifier
+   */
+  void deRegisterWorker(WorkerId workerId);
+
+  /**
+   * Worker sends heartbeat to Master.
+   * @param workerId : Worker Id
+   * @param taskStatusList : TaskStatus list of all tasks assigned to worker.
+   * @return Task instance
+   */
+  Task sendHeartbeat(WorkerId workerId, TaskStatus[] taskStatusList);
+
+  /**
+   * Add Task to the list.
+   * @param task : Task object
+   */
+  void addTask(Task task);
+}
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/package-info.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/package-info.java
new file mode 100644
index 0000000..f00c547
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/common/package-info.java
@@ -0,0 +1,20 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership.  The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.hadoop.applications.mawo.server.common;
+/**
+ * Helper classes for the mawo server common operations.
+ */
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/master/job/JobId.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/master/job/JobId.java
new file mode 100644
index 0000000..f056f57
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/master/job/JobId.java
@@ -0,0 +1,128 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.applications.mawo.server.master.job;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+import java.util.Random;
+
+import org.apache.hadoop.io.Writable;
+import org.apache.hadoop.io.WritableUtils;
+
+/**
+ * Define MaWo JobId.
+ */
+public class JobId implements Writable {
+
+  /**
+   * MaWo job prefix.
+   */
+  private static final String JOB_PREFIX = "mawo_job_";
+
+  /**
+   * Create unique random JobId.
+   * @return unique random JobId
+   */
+  static JobId newJobId() {
+    Random rn = new Random();
+    final int range = 900000;
+    final int randomadd = 100000;
+    int randomNum = rn.nextInt(range) + randomadd;
+    return new JobId(randomNum);
+  }
+
+  /**
+   * Unique Id.
+   */
+  private int jobIdentifier;
+
+  /**
+   * JobId default constructor.
+   */
+  public JobId() {
+
+  }
+
+  /**
+   * JobId constructor with Id.
+   * @param id : unique id
+   */
+  public JobId(final int id) {
+    this.jobIdentifier = id;
+  }
+
+  /**
+   * Get JobId.
+   * @return unique ID
+   */
+  public final int getID() {
+    return jobIdentifier;
+  }
+
+  /**
+   * Print JobId.
+   * @return JobId
+   */
+  public final String toString() {
+    return JOB_PREFIX + jobIdentifier;
+  }
+
+  @Override
+  /**
+   * Hashcode for jobId.
+   */
+  public final int hashCode() {
+    final int prime = 31;
+    int result = 1;
+    result = prime * result + jobIdentifier;
+    return result;
+  }
+
+  @Override
+  /**
+   * Implement equals method for jobId.
+   */
+  public final boolean equals(final Object obj) {
+    if (this == obj) {
+      return true;
+    }
+    if (obj == null) {
+      return false;
+    }
+    if (getClass() != obj.getClass()) {
+      return false;
+    }
+    JobId other = (JobId) obj;
+    if (jobIdentifier != other.jobIdentifier) {
+      return false;
+    }
+    return true;
+  }
+
+  /** {@inheritDoc} */
+  public final void write(final DataOutput out) throws IOException {
+    WritableUtils.writeVInt(out, jobIdentifier);
+  }
+
+  /** {@inheritDoc} */
+  public final void readFields(final DataInput in) throws IOException {
+    this.jobIdentifier = WritableUtils.readVInt(in);
+  }
+}
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/master/job/package-info.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/master/job/package-info.java
new file mode 100644
index 0000000..c945380
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/master/job/package-info.java
@@ -0,0 +1,20 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership.  The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.hadoop.applications.mawo.server.master.job;
+/**
+ * Helper classes for the mawo master job.
+ */
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/worker/WorkerId.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/worker/WorkerId.java
new file mode 100644
index 0000000..dfb356b
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/worker/WorkerId.java
@@ -0,0 +1,162 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.applications.mawo.server.worker;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import org.apache.hadoop.io.Text;
+import org.apache.hadoop.io.Writable;
+
+/**
+ * Define WorkerId for Workers.
+ */
+public class WorkerId implements Writable {
+  /**
+   * WorkerId is a unique identifier for workers.
+   */
+  private Text workerId = new Text();
+  /**
+   * Hostname of worker node.
+   */
+  private Text hostname = new Text();
+  /**
+   * Ip address of worker node.
+   */
+  private Text ipAdd = new Text();
+
+  /**
+   * Default constructor for workerId.
+   * Set Hostname and Ip address of the machine where worker is running.
+   */
+  public WorkerId() {
+    try {
+      this.hostname =
+          new Text(InetAddress.getLocalHost().getHostName());
+      this.ipAdd =
+          new Text(InetAddress.getLocalHost().getHostAddress().toString());
+    } catch (UnknownHostException e) {
+      e.printStackTrace();
+    }
+  }
+
+  /**
+   * Get hostname for Worker.
+   * @return hostname of worker node
+   */
+  public final Text getHostname() {
+    return hostname;
+  }
+
+  /**
+   * Set hostname for Worker.
+   * @param wkhostname : Hostname of worker
+   */
+  public final void setHostname(final Text wkhostname) {
+    this.hostname = wkhostname;
+  }
+
+  /**
+   * Get Worker IP address.
+   * @return IP address of worker node
+   */
+  public final String getIPAddress() {
+    return this.ipAdd.toString();
+  }
+
+  /**
+   * Print workerId.
+   * @return workeId in string
+   */
+  public final String toString() {
+    return workerId.toString();
+  }
+
+  /**
+   * Get workerId.
+   * @return workerId : Worker identifier
+   */
+  public final String getWorkerId() {
+    return this.workerId.toString();
+  }
+
+  /**
+   * Set workerId.
+   * @param localworkerId : Worker identifier
+   */
+  public final void setWorkerId(final String localworkerId) {
+    this.workerId = new Text(localworkerId);
+  }
+
+  @Override
+  /**
+   * Implememt equals method for WorkerId.
+   */
+  public final boolean equals(final Object o) {
+    WorkerId x = (WorkerId) o;
+    return x.getHostname().equals(this.hostname);
+  }
+
+  /** {@inheritDoc} */
+  public final void write(final DataOutput dataOutput) throws IOException {
+    workerId.write(dataOutput);
+    hostname.write(dataOutput);
+    ipAdd.write(dataOutput);
+  }
+
+  /** {@inheritDoc} */
+  public final void readFields(final DataInput dataInput) throws IOException {
+    workerId.readFields(dataInput);
+    hostname.readFields(dataInput);
+    ipAdd.readFields(dataInput);
+  }
+
+  @Override
+  /**
+   * Override hashcode method for WorkerId.
+   */
+  public final int hashCode() {
+    final int prime = 31;
+    int result = 1;
+    int workerHash = 0;
+    if (workerId == null) {
+      workerHash = 0;
+    } else {
+      workerHash = workerId.hashCode();
+    }
+    int hostHash = 0;
+    if (hostname == null) {
+      hostHash = 0;
+    } else {
+      hostHash = hostname.hashCode();
+    }
+    int ipHash = 0;
+    if (ipAdd == null) {
+      ipHash = 0;
+    } else {
+      ipHash = ipAdd.hashCode();
+    }
+    result = prime * result + workerHash;
+    result = prime * result + hostHash;
+    result = prime * result + ipHash;
+    return result;
+  }
+}
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/worker/package-info.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/worker/package-info.java
new file mode 100644
index 0000000..7fa0d55
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/java/org/apache/hadoop/applications/mawo/server/worker/package-info.java
@@ -0,0 +1,20 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership.  The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.hadoop.applications.mawo.server.worker;
+/**
+ * Helper classes for the mawo worker.
+ */
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/resources/mawo-default.properties b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/resources/mawo-default.properties
new file mode 100644
index 0000000..5ebe59e
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/main/resources/mawo-default.properties
@@ -0,0 +1,41 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+rpc.server.hostname=localhost
+rpc.server.port=5120
+
+#curator related configurations
+zookeeper.parent.path=/mawoRoot
+zookeeper.address=localhost:2181
+zookeeper.retry.interval.ms=1000
+zookeeper.session.timeout.ms=10000
+zookeeper.retries.num=1000
+zookeeper.acl=world:anyone:rwcda
+worker.num.tasks=10
+mawo.job-queue-storage.enabled=true
+mawo.job-builder.class=org.apache.hadoop.applications.mawo.server.master.job.SimpleTaskJsonJobBuilder
+worker.workspace=/tmp
+
+ycloud.url=0.0.0.0:9191
+
+task.block-size.min=10
+task.uber-time.min=12
+
+master.tasks-status.log.path=/tmp
+
+master.teardown-worker.validity-interval.ms=120000
+#a comma-separated list of environment variables needed by all the tasks
+worker.whitelist.env=
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/test/java/org/apache/hadoop/applications/mawo/server/common/TestMaWoConfiguration.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/test/java/org/apache/hadoop/applications/mawo/server/common/TestMaWoConfiguration.java
new file mode 100644
index 0000000..e189bcb
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/test/java/org/apache/hadoop/applications/mawo/server/common/TestMaWoConfiguration.java
@@ -0,0 +1,60 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.applications.mawo.server.common;
+
+
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * Test MaWo configuration.
+ */
+public class TestMaWoConfiguration {
+
+  /**
+   * Validate default MaWo Configurations.
+   */
+  @Test
+  public void testMaWoConfiguration() {
+
+    MawoConfiguration mawoConf = new MawoConfiguration();
+
+    // validate Rpc server port
+    Assert.assertEquals(mawoConf.getRpcServerPort(), 5120);
+
+    // validate Rpc hostname
+    Assert.assertTrue("localhost".equals(mawoConf.getRpcHostName()));
+
+    // validate job queue storage conf
+    boolean jobQueueStorage = mawoConf.getJobQueueStorageEnabled();
+    Assert.assertTrue(jobQueueStorage);
+
+    // validate default teardownWorkerValidity Interval
+    Assert.assertEquals(mawoConf.getTeardownWorkerValidityInterval(), 120000);
+
+    // validate Zk related configs
+    Assert.assertTrue("/tmp/mawoRoot".equals(mawoConf.getZKParentPath()));
+    Assert.assertTrue("localhost:2181".equals(mawoConf.getZKAddress()));
+    Assert.assertEquals(1000, mawoConf.getZKRetryIntervalMS());
+    Assert.assertEquals(10000, mawoConf.getZKSessionTimeoutMS());
+    Assert.assertEquals(1000, mawoConf.getZKRetriesNum());
+  }
+
+
+}
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/test/resources/mawo.properties b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/test/resources/mawo.properties
new file mode 100644
index 0000000..0d5ea31
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/hadoop-yarn-applications-mawo-core/src/test/resources/mawo.properties
@@ -0,0 +1,28 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+rpc.server.hostname=localhost
+rpc.server.port=5120
+
+#curator related configurations
+zookeeper.parent.path=/tmp/mawoRoot
+zookeeper.address=localhost:2181
+zookeeper.retry.interval.ms=1000
+zookeeper.session.timeout.ms=10000
+zookeeper.retries.num=1000
+zookeeper.acl=world:anyone:rwcda
+worker.num.tasks=10
+mawo.job-queue-storage.enabled=true
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/pom.xml b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/pom.xml
new file mode 100644
index 0000000..4b71022
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-mawo/pom.xml
@@ -0,0 +1,37 @@
+<!--
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+    http://www.apache.org/licenses/LICENSE-2.0
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License. See accompanying LICENSE file.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>hadoop-yarn-applications</artifactId>
+        <groupId>org.apache.hadoop</groupId>
+        <version>3.3.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>org.apache.hadoop.applications.mawo</groupId>
+    <artifactId>hadoop-applications-mawo</artifactId>
+    <packaging>pom</packaging>
+
+    <name>Apache Hadoop YARN Application MaWo</name>
+    <url>http://maven.apache.org</url>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <modules>
+        <module>hadoop-yarn-applications-mawo-core</module>
+    </modules>
+
+</project>
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/pom.xml b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/pom.xml
index 78b709a..17a5b49 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/pom.xml
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/pom.xml
@@ -38,6 +38,7 @@
     <module>hadoop-yarn-applications-unmanaged-am-launcher</module>
     <module>hadoop-yarn-services</module>
     <module>hadoop-yarn-applications-catalog</module>
+    <module>hadoop-yarn-applications-mawo</module>
   </modules>
 
  <profiles>
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-site/src/site/markdown/yarn-service/MasterWorker.md b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-site/src/site/markdown/yarn-service/MasterWorker.md
new file mode 100644
index 0000000..ca49d30
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-site/src/site/markdown/yarn-service/MasterWorker.md
@@ -0,0 +1,36 @@
+<!---
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License. See accompanying LICENSE file.
+-->
+
+# MaWo: A Master Worker framework on YARN Services
+
+## Overview
+
+MaWo is a YARN service based framework which handles Master Worker based workload.
+This is an app which can take an input job specification with tasks, their expected durations and have a Master dish the tasks off to a predetermined set of workers.
+The components will be responsible to finish the job within specific time duration.
+
+## MaWo Components
+
+MaWo app is a YARN Service Application. It has mainly two components.
+
+* Master
+ - Read MaWo-Payload file and create a queue of Tasks
+ - Register Worker
+ - Assign tasks to worker nodes
+ - Monitor status of Tasks
+ - Log Task status
+
+* Worker
+ - Send heartbeat to Worker
+ - Execute Task
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org