You are viewing a plain text version of this content. The canonical link for it is here.
Posted to submarine-dev@hadoop.apache.org by li...@apache.org on 2019/10/17 04:47:18 UTC

[hadoop-submarine] branch master updated: SUBMARINE-172. [PoC] Split the core module to client and server module

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

liuxun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hadoop-submarine.git


The following commit(s) were added to refs/heads/master by this push:
     new 90284bd  SUBMARINE-172. [PoC] Split the core module to client and server module
90284bd is described below

commit 90284bde3be5e05f44f4efd2f560c70132fe8646
Author: Wanqiang Ji <wa...@gmail.com>
AuthorDate: Tue Oct 15 00:38:24 2019 +0800

    SUBMARINE-172. [PoC] Split the core module to client and server module
    
    ### What is this PR for?
    PoC for the SUBMARINE-154 design. Design doc link: https://docs.google.com/document/d/1vCjt2z3DoagfeaVQV0nfyWqSYLymoP53rDcPcz-YcSc
    
    ### What type of PR is it?
    [Refactoring]
    
    ### Todos
    
    ### What is the Jira issue?
    https://issues.apache.org/jira/browse/SUBMARINE-172
    
    ### How should this be tested?
    https://travis-ci.org/jiwq/hadoop-submarine/builds/597733767
    
    ### Screenshots (if appropriate)
    
    ### Questions:
    * Does the licenses files need update? No
    * Is there breaking changes for older versions? No
    * Does this needs documentation? No
    
    Author: Wanqiang Ji <wa...@gmail.com>
    
    Closes #48 from jiwq/SUBMARINE-172 and squashes the following commits:
    
    cfc64d9 [Wanqiang Ji] SUBMARINE-172. [PoC] Split the core module to client and server module
---
 .travis.yml                                        |   2 +-
 pom.xml                                            |  35 +--
 submarine-all/pom.xml                              |  77 ++----
 submarine-client/pom.xml                           | 126 +++++++++
 .../apache/submarine/client/cli/AbstractCli.java   |  52 ++++
 .../java/org/apache/submarine/client/cli/Cli.java  |  27 +-
 .../apache/submarine/client/cli/CliConstants.java  |  23 +-
 .../org/apache/submarine/client/cli/CliUtils.java  |  33 ++-
 .../org/apache/submarine/client/cli/Command.java   |  15 +-
 .../apache/submarine/client/cli/ShowJobCli.java    |  37 +--
 .../submarine/client/cli/param/ConfigType.java     |  15 +-
 .../submarine/client/cli/param/Localization.java   |  19 +-
 .../client/cli/param/ParametersHolder.java         |  23 +-
 .../submarine/client/cli/param/Quicklink.java      |  23 +-
 .../submarine/client/cli/param/RunParameters.java  |  33 ++-
 .../client/cli/param/ShowJobParameters.java        |  25 ++
 .../cli/param/runjob/PyTorchRunJobParameters.java  |  24 +-
 .../client/cli/param/runjob/RunJobParameters.java  |  42 ++-
 .../param/runjob/TensorFlowRunJobParameters.java   |  37 +--
 .../submarine/client/cli/param/yaml/Configs.java   |  15 +-
 .../submarine/client/cli/param/yaml/PsRole.java    |  15 +-
 .../submarine/client/cli/param/yaml/Role.java      |  15 +-
 .../submarine/client/cli/param/yaml/Roles.java     |  15 +-
 .../client/cli/param/yaml/Scheduling.java          |  15 +-
 .../submarine/client/cli/param/yaml/Security.java  |  15 +-
 .../submarine/client/cli/param/yaml/Spec.java      |  15 +-
 .../client/cli/param/yaml/TensorBoard.java         |  15 +-
 .../client/cli/param/yaml/WorkerRole.java          |  15 +-
 .../client/cli/param/yaml/YamlConfigFile.java      |  15 +-
 .../client/cli/param/yaml/YamlParseException.java  |  15 +-
 .../client/cli/runjob/RoleParameters.java          |  17 +-
 .../submarine/client/cli/runjob/RunJobCli.java     |  40 ++-
 .../client/cli/TestShowJobCliParsing.java          |  34 +--
 .../submarine/client/cli/YamlConfigTestUtils.java  |  15 +-
 .../cli/runjob/TestRunJobCliParsingCommon.java     |  28 +-
 .../cli/runjob/TestRunJobCliParsingCommonYaml.java |  21 +-
 .../runjob/TestRunJobCliParsingParameterized.java  |  25 +-
 .../pytorch/TestRunJobCliParsingPyTorch.java       |  18 +-
 .../pytorch/TestRunJobCliParsingPyTorchYaml.java   |  22 +-
 .../tensorflow/TestRunJobCliParsingTensorFlow.java |  18 +-
 .../TestRunJobCliParsingTensorFlowYaml.java        |  22 +-
 ...stRunJobCliParsingTensorFlowYamlStandalone.java |  18 +-
 .../src/test/resources/core-site.xml               |   0
 .../src/test/resources/hdfs-site.xml               |   0
 .../runjob-common-yaml/empty-framework.yaml        |   0
 .../runjob-common-yaml/invalid-framework.yaml      |   0
 .../runjob-common-yaml/missing-configs.yaml        |   0
 .../runjob-common-yaml/missing-framework.yaml      |   0
 .../runjob-common-yaml/some-sections-missing.yaml  |   0
 .../runjob-common-yaml/test-false-values.yaml      |   0
 .../runjob-common-yaml/wrong-indentation.yaml      |   0
 .../runjob-common-yaml/wrong-property-name.yaml    |   0
 .../runjob-pytorch-yaml/envs-are-missing.yaml      |   0
 .../invalid-config-ps-section.yaml                 |   0
 .../invalid-config-tensorboard-section.yaml        |   0
 .../security-principal-is-missing.yaml             |   0
 .../valid-config-with-overrides.yaml               |   0
 .../runjob-pytorch-yaml/valid-config.yaml          |   0
 .../runjob-pytorch-yaml/valid-gpu-config.yaml      |   0
 .../runjob-tensorflow-yaml/envs-are-missing.yaml   |   0
 .../security-principal-is-missing.yaml             |   0
 .../tensorboard-dockerimage-is-missing.yaml        |   0
 .../valid-config-with-overrides.yaml               |   0
 .../runjob-tensorflow-yaml/valid-config.yaml       |   0
 .../runjob-tensorflow-yaml/valid-gpu-config.yaml   |   0
 submarine-commons/commons-runtime/pom.xml          | 184 +++++++++++++
 .../ubuntu-16.04/Dockerfile.gpu.pytorch_latest     |   0
 .../src/main/docker/pytorch/build-all.sh           |   0
 .../with-cifar10-models/cifar10_tutorial.py        |   0
 .../ubuntu-16.04/Dockerfile.gpu.pytorch_latest     |   0
 .../base/ubuntu-16.04/Dockerfile.cpu.tf_1.13.1     |   0
 .../base/ubuntu-16.04/Dockerfile.gpu.tf_1.13.1     |   0
 .../src/main/docker/tensorflow/build-all.sh        |   0
 .../ubuntu-16.04/Dockerfile.cpu.tf_1.13.1          |   0
 .../ubuntu-16.04/Dockerfile.gpu.tf_1.13.1          |   0
 .../cifar10_estimator_tf_1.13.1/README.md          |   0
 .../cifar10_estimator_tf_1.13.1/cifar10.py         |   0
 .../cifar10_estimator_tf_1.13.1/cifar10_main.py    |   0
 .../cifar10_estimator_tf_1.13.1/cifar10_model.py   |   0
 .../cifar10_estimator_tf_1.13.1/cifar10_utils.py   |   0
 .../generate_cifar10_tfrecords.py                  |   0
 .../cifar10_estimator_tf_1.13.1/model_base.py      |   0
 .../zeppelin-notebook-example/Dockerfile.gpu       |   0
 .../zeppelin-notebook-example/run_container.sh     |   0
 .../tensorflow/zeppelin-notebook-example/shiro.ini |   0
 .../zeppelin-notebook-example/zeppelin-site.xml    |   0
 .../submarine/commons/runtime}/ClientContext.java  |  38 +--
 .../submarine/commons/runtime}/Framework.java      |  17 +-
 .../submarine/commons/runtime}/JobMonitor.java     |  32 ++-
 .../submarine/commons/runtime/JobSubmitter.java    |  41 +++
 .../submarine/commons/runtime}/RuntimeFactory.java |  38 +--
 .../commons/runtime}/api/JobComponentStatus.java   |  28 +-
 .../submarine/commons/runtime/api/JobState.java    |  54 ++++
 .../submarine/commons/runtime}/api/JobStatus.java  |  28 +-
 .../submarine/commons/runtime/api/PyTorchRole.java |  43 +++
 .../submarine/commons/runtime}/api/Role.java       |  17 +-
 .../submarine/commons/runtime}/api/Runtime.java    |  17 +-
 .../commons/runtime/api/TensorFlowRole.java        |  46 ++++
 .../submarine/commons/runtime/conf/Envs.java       |  32 +++
 .../runtime}/conf/SubmarineConfiguration.java      |  29 ++-
 .../commons/runtime/conf/SubmarineLogs.java        |  36 +++
 .../runtime/exception/SubmarineException.java      |  26 ++
 .../exception/SubmarineRuntimeException.java       |  30 +++
 .../runtime}/fs/DefaultRemoteDirectoryManager.java |  30 ++-
 .../runtime/fs}/FSBasedSubmarineStorageImpl.java   |  35 +--
 .../runtime/fs}/MemorySubmarineStorage.java        |  25 +-
 .../runtime}/fs/RemoteDirectoryManager.java        |  31 ++-
 .../commons/runtime/fs/StorageKeyConstants.java    |  29 +++
 .../commons/runtime/fs}/SubmarineStorage.java      |  31 ++-
 .../commons/runtime}/param/BaseParameters.java     |  33 ++-
 .../submarine/commons/runtime/param/Parameter.java |  41 +++
 .../commons/runtime}/resource/ResourceUtils.java   |  33 ++-
 .../runtime}/resource/UnitsConversionUtil.java     |  21 +-
 .../commons/runtime}/MockClientContext.java        |  22 +-
 .../runtime}/fs/MockRemoteDirectoryManager.java    |  17 +-
 submarine-commons/pom.xml                          |  40 +++
 submarine-core/README.md                           |  51 ----
 submarine-core/pom.xml                             | 289 ---------------------
 .../apache/submarine/client/cli/AbstractCli.java   |  47 ----
 .../client/cli/param/ShowJobParameters.java        |  18 --
 .../submarine/client/cli/param/package-info.java   |  19 --
 .../client/cli/param/runjob/package-info.java      |  20 --
 .../client/cli/param/yaml/package-info.java        |  19 --
 .../submarine/client/cli/runjob/package-info.java  |  19 --
 .../java/org/apache/submarine/common/Envs.java     |  27 --
 .../org/apache/submarine/common/api/JobState.java  |  52 ----
 .../apache/submarine/common/api/PyTorchRole.java   |  54 ----
 .../submarine/common/api/TensorFlowRole.java       |  41 ---
 .../submarine/common/conf/SubmarineLogs.java       |  31 ---
 .../common/exception/SubmarineException.java       |  21 --
 .../exception/SubmarineRuntimeException.java       |  25 --
 .../submarine/common/resource/package-info.java    |  19 --
 .../submarine/runtimes/common/JobSubmitter.java    |  36 ---
 .../runtimes/common/StorageKeyConstants.java       |  24 --
 .../common/TestFSBasedSubmarineStorage.java        |  73 ------
 submarine-dist/pom.xml                             |  77 ++----
 submarine-dist/src/assembly/distribution.xml       |  24 +-
 submarine-runtime/pom.xml                          |  40 ---
 .../runtimes/tony/TonyRuntimeFactory.java          |  55 ----
 .../runtimes/tony/buider/package-info.java         |  14 -
 .../submarine/runtimes/tony/package-info.java      |  14 -
 submarine-server/pom.xml                           |  40 +++
 submarine-server/server-submitter/pom.xml          |  40 +++
 .../server-submitter/submitter-yarn}/README.md     |   0
 .../server-submitter/submitter-yarn}/pom.xml       |  15 +-
 .../submarine/runtimes/tony}/JobStatusBuilder.java |  36 +--
 .../submarine/runtimes/tony/TonyJobMonitor.java    |  37 +--
 .../submarine/runtimes/tony/TonyJobSubmitter.java  |  37 +--
 .../runtimes/tony/TonyRuntimeFactory.java          |  61 +++++
 .../apache/submarine/runtimes/tony/TonyUtils.java  |  34 ++-
 .../src/test/java/TestTonyUtils.java               |  42 +--
 .../submitter-yarnservice}/README.md               |   0
 .../submitter-yarnservice}/pom.xml                 |  15 +-
 .../runtimes/yarnservice/AbstractComponent.java    |   0
 .../runtimes/yarnservice/AbstractServiceSpec.java  |   0
 .../runtimes/yarnservice/FileSystemOperations.java |   0
 .../yarnservice/HadoopEnvironmentSetup.java        |   0
 .../runtimes/yarnservice/ServiceSpec.java          |   0
 .../yarnservice/ServiceSpecFileGenerator.java      |   0
 .../runtimes/yarnservice/ServiceWrapper.java       |   0
 .../yarnservice/WorkerComponentFactory.java        |   0
 .../yarnservice/YarnServiceJobMonitor.java         |   0
 .../yarnservice/YarnServiceJobSubmitter.java       |   0
 .../yarnservice/YarnServiceRuntimeFactory.java     |   0
 .../runtimes/yarnservice/YarnServiceUtils.java     |   0
 .../builder/JobComponentStatusBuilder.java         |   0
 .../yarnservice/builder/JobStatusBuilder.java      |   0
 .../yarnservice/command/AbstractLaunchCommand.java |   0
 .../yarnservice/command/LaunchCommandFactory.java  |   0
 .../yarnservice/command/LaunchScriptBuilder.java   |   0
 .../command/PyTorchLaunchCommandFactory.java       |   0
 .../command/TensorFlowLaunchCommandFactory.java    |   0
 .../runtimes/yarnservice/command/package-info.java |   0
 .../yarnservice/pytorch/PyTorchServiceSpec.java    |   0
 .../command/PyTorchWorkerLaunchCommand.java        |   0
 .../yarnservice/pytorch/command/package-info.java  |   0
 .../pytorch/component/PyTorchWorkerComponent.java  |   0
 .../pytorch/component/package-info.java            |   0
 .../runtimes/yarnservice/pytorch/package-info.java |   0
 .../yarnservice/tensorflow/TensorFlowCommons.java  |   0
 .../tensorflow/TensorFlowServiceSpec.java          |   0
 .../command/TensorBoardLaunchCommand.java          |   0
 .../command/TensorFlowLaunchCommand.java           |   0
 .../command/TensorFlowPsLaunchCommand.java         |   0
 .../command/TensorFlowWorkerLaunchCommand.java     |   0
 .../tensorflow/command/package-info.java           |   0
 .../tensorflow/component/TensorBoardComponent.java |   0
 .../component/TensorFlowPsComponent.java           |   0
 .../component/TensorFlowWorkerComponent.java       |   0
 .../tensorflow/component/package-info.java         |   0
 .../yarnservice/tensorflow/package-info.java       |   0
 .../apache/submarine/utils/ClassPathUtilities.java |   0
 .../apache/submarine/utils/DockerUtilities.java    |   0
 .../submarine/utils/EnvironmentUtilities.java      |   0
 .../submarine/utils/KerberosPrincipalFactory.java  |   0
 .../java/org/apache/submarine/utils/Localizer.java |   0
 .../submarine/utils/SubmarineResourceUtils.java    |   0
 .../org/apache/submarine/utils/ZipUtilities.java   |   0
 .../org/apache/submarine/utils/package-info.java   |   0
 .../apache/submarine/FileUtilitiesForTests.java    |   0
 .../cli/yarnservice/ParamBuilderForTest.java       |   0
 .../cli/yarnservice/TestYarnServiceRunJobCli.java  |   0
 .../TestYarnServiceRunJobCliCommons.java           |   0
 .../TestYarnServiceRunJobCliLocalization.java      |   0
 .../cli/yarnservice/YarnServiceCliTestUtils.java   |   0
 .../runtimes/yarnservice/TestServiceWrapper.java   |   0
 .../yarnservice/TestTFConfigGenerator.java         |   0
 .../command/AbstractTFLaunchCommandTestHelper.java |   0
 .../command/TestLaunchCommandFactory.java          |   0
 .../pytorch/TestPyTorchServiceSpec.java            |   0
 .../command/TestTensorBoardLaunchCommand.java      |   0
 .../command/TestTensorFlowLaunchCommand.java       |   0
 .../tensorflow/component/ComponentTestCommons.java |   0
 .../component/TestTensorBoardComponent.java        |   0
 .../component/TestTensorFlowPsComponent.java       |   0
 .../component/TestTensorFlowWorkerComponent.java   |   0
 .../submarine/utils/TestClassPathUtilities.java    |   0
 .../submarine/utils/TestEnvironmentUtilities.java  |   0
 .../utils/TestKerberosPrincipalFactory.java        |   0
 .../utils/TestSubmarineResourceUtils.java          |   0
 .../src/test/resources/core-site.xml               |   0
 .../src/test/resources/hdfs-site.xml               |   0
 222 files changed, 1896 insertions(+), 1805 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 5a96fc0..c88a454 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -40,7 +40,7 @@ env:
   global:
     # submarine core does not required by workbench-server integration tests
     # If you need to compile Phadoop-3.1 or Phadoop-3.2, you need to add `!submarine-runtime/yarnservice-runtime` in EXCLUDE_SUBMARINE_CORE
-    - EXCLUDE_SUBMARINE_CORE="\"!submarine-all,!submarine-core,!submarine-dist,!submarine-runtime/tony-runtime,!submodules/tony,!submodules/tony/tony-mini,!submodules/tony/tony-core,!submodules/tony/tony-proxy,!submodules/tony/tony-portal,!submodules/tony/tony-azkaban,!submodules/tony/tony-cli\""
+    - EXCLUDE_SUBMARINE_CORE="\"!submarine-all,!submarine-client,!submarine-commons,!submarine-commons/commons-runtime,!submarine-dist,!submarine-server/server-submitter/submitter-yarn,!submodules/tony,!submodules/tony/tony-mini,!submodules/tony/tony-core,!submodules/tony/tony-proxy,!submodules/tony/tony-portal,!submodules/tony/tony-azkaban,!submodules/tony/tony-cli\""
 
 before_install:
   - sudo service mysql restart
diff --git a/pom.xml b/pom.xml
index 63c4378..d02abbd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -104,11 +104,13 @@
   </properties>
 
   <modules>
-    <module>submodules/tony</module>
-    <module>submarine-core</module>
     <module>submarine-all</module>
-    <module>submarine-workbench</module>
+    <module>submarine-client</module>
+    <module>submarine-commons</module>
     <module>submarine-dist</module>
+    <module>submarine-server</module>
+    <module>submarine-workbench</module>
+    <module>submodules/tony</module>
   </modules>
 
   <dependencyManagement>
@@ -234,10 +236,6 @@
         <guava.version>27.0-jre</guava.version>
         <profile-id>hadoop-3.2</profile-id>
       </properties>
-      <modules>
-        <module>submarine-runtime/yarnservice-runtime</module>
-        <module>submarine-runtime/tony-runtime</module>
-      </modules>
     </profile>
 
     <!-- Default profile-->
@@ -252,10 +250,6 @@
         <zookeeper.version>3.4.13</zookeeper.version>
         <profile-id>hadoop-3.1</profile-id>
       </properties>
-      <modules>
-        <module>submarine-runtime/yarnservice-runtime</module>
-        <module>submarine-runtime/tony-runtime</module>
-      </modules>
     </profile>
 
     <profile>
@@ -272,9 +266,6 @@
         <zookeeper.version>3.4.6</zookeeper.version>
         <profile-id>hadoop-2.9</profile-id>
       </properties>
-      <modules>
-        <module>submarine-runtime/tony-runtime</module>
-      </modules>
     </profile>
 
     <profile>
@@ -288,9 +279,6 @@
         <zookeeper.version>3.4.6</zookeeper.version>
         <profile-id>hadoop-2.7</profile-id>
       </properties>
-      <modules>
-        <module>submarine-runtime/tony-runtime</module>
-      </modules>
     </profile>
 
     <profile>
@@ -424,6 +412,19 @@
           </excludes>
         </configuration>
       </plugin>
+
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jar-plugin</artifactId>
+        <version>3.1.2</version>
+        <executions>
+          <execution>
+            <goals>
+              <goal>test-jar</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
     </plugins>
   </build>
 </project>
diff --git a/submarine-all/pom.xml b/submarine-all/pom.xml
index a347bce..5671945 100644
--- a/submarine-all/pom.xml
+++ b/submarine-all/pom.xml
@@ -1,17 +1,22 @@
 <?xml version="1.0"?>
 <!--
-  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
+  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. See accompanying LICENSE file.
--->
+  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.
+  -->
 <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
@@ -52,7 +57,17 @@
   <dependencies>
     <dependency>
       <groupId>org.apache.submarine</groupId>
-      <artifactId>submarine-core</artifactId>
+      <artifactId>commons-runtime</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.submarine</groupId>
+      <artifactId>submarine-client</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.submarine</groupId>
+      <artifactId>submitter-yarn</artifactId>
       <version>${project.version}</version>
     </dependency>
   </dependencies>
@@ -62,22 +77,6 @@
       <id>hadoop-3.2</id>
       <dependencies>
         <dependency>
-          <groupId>org.apache.submarine</groupId>
-          <artifactId>yarnservice-runtime</artifactId>
-          <version>${project.version}</version>
-          <exclusions>
-            <exclusion>
-              <groupId>org.apache.avro</groupId>
-              <artifactId>avro</artifactId>
-            </exclusion>
-          </exclusions>
-        </dependency>
-        <dependency>
-          <groupId>org.apache.submarine</groupId>
-          <artifactId>tony-runtime</artifactId>
-          <version>${project.version}</version>
-        </dependency>
-        <dependency>
           <groupId>org.apache.hadoop</groupId>
           <artifactId>hadoop-hdfs-client</artifactId>
           <version>${hadoop.version}</version>
@@ -101,22 +100,6 @@
       <id>hadoop-3.1</id>
       <dependencies>
         <dependency>
-          <groupId>org.apache.submarine</groupId>
-          <artifactId>yarnservice-runtime</artifactId>
-          <version>${project.version}</version>
-          <exclusions>
-            <exclusion>
-              <groupId>org.apache.avro</groupId>
-              <artifactId>avro</artifactId>
-            </exclusion>
-          </exclusions>
-        </dependency>
-        <dependency>
-          <groupId>org.apache.submarine</groupId>
-          <artifactId>tony-runtime</artifactId>
-          <version>${project.version}</version>
-        </dependency>
-        <dependency>
           <groupId>org.apache.hadoop</groupId>
           <artifactId>hadoop-hdfs-client</artifactId>
           <version>${hadoop.version}</version>
@@ -131,11 +114,6 @@
       </activation>
       <dependencies>
         <dependency>
-          <groupId>org.apache.submarine</groupId>
-          <artifactId>tony-runtime</artifactId>
-          <version>${project.version}</version>
-        </dependency>
-        <dependency>
           <groupId>org.apache.hadoop</groupId>
           <artifactId>hadoop-hdfs-client</artifactId>
           <version>${hadoop.version}</version>
@@ -146,11 +124,6 @@
     <profile>
       <id>hadoop-2.7</id>
       <dependencies>
-        <dependency>
-          <groupId>org.apache.submarine</groupId>
-          <artifactId>tony-runtime</artifactId>
-          <version>${project.version}</version>
-        </dependency>
       </dependencies>
     </profile>
   </profiles>
diff --git a/submarine-client/pom.xml b/submarine-client/pom.xml
new file mode 100644
index 0000000..64a6c30
--- /dev/null
+++ b/submarine-client/pom.xml
@@ -0,0 +1,126 @@
+<?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.
+  -->
+
+<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>submarine</artifactId>
+    <groupId>org.apache.submarine</groupId>
+    <version>0.3.0-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>submarine-client</artifactId>
+  <version>0.3.0-SNAPSHOT</version>
+  <name>Submarine: Client</name>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.submarine</groupId>
+      <artifactId>commons-runtime</artifactId>
+      <version>0.3.0-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>org.yaml</groupId>
+      <artifactId>snakeyaml</artifactId>
+      <version>${snakeyaml.version}</version>
+    </dependency>
+
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>${junit.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.mockito</groupId>
+      <artifactId>mockito-core</artifactId>
+      <version>${mockito.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.submarine</groupId>
+      <artifactId>commons-runtime</artifactId>
+      <version>0.3.0-SNAPSHOT</version>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>
+
+    <!-- Dependencies for Hadoop -->
+    <dependency>
+      <groupId>org.apache.hadoop</groupId>
+      <artifactId>hadoop-common</artifactId>
+      <version>${hadoop.version}</version>
+      <scope>provided</scope>
+      <exclusions>
+        <exclusion>
+          <groupId>org.slf4j</groupId>
+          <artifactId>slf4j-api</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.slf4j</groupId>
+          <artifactId>slf4j-log4j12</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.apache.commons</groupId>
+          <artifactId>commons-lang3</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.apache.httpcomponents</groupId>
+          <artifactId>httpclient</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.apache.httpcomponents</groupId>
+          <artifactId>httpcore</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>commons-lang</groupId>
+          <artifactId>commons-lang</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>commons-collections</groupId>
+          <artifactId>commons-collections</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>commons-logging</groupId>
+          <artifactId>commons-logging</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>com.google.guava</groupId>
+          <artifactId>guava</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>commons-codec</groupId>
+          <artifactId>commons-codec</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.codehaus.jackson</groupId>
+          <artifactId>jackson-core-asl</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.codehaus.jackson</groupId>
+          <artifactId>jackson-mapper-asl</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+  </dependencies>
+
+</project>
diff --git a/submarine-client/src/main/java/org/apache/submarine/client/cli/AbstractCli.java b/submarine-client/src/main/java/org/apache/submarine/client/cli/AbstractCli.java
new file mode 100644
index 0000000..a15397b
--- /dev/null
+++ b/submarine-client/src/main/java/org/apache/submarine/client/cli/AbstractCli.java
@@ -0,0 +1,52 @@
+/*
+ * 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.submarine.client.cli;
+
+import org.apache.commons.cli.ParseException;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.util.Tool;
+import org.apache.hadoop.yarn.exceptions.YarnException;
+import org.apache.submarine.commons.runtime.ClientContext;
+import org.apache.submarine.commons.runtime.exception.SubmarineException;
+
+import java.io.IOException;
+
+public abstract class AbstractCli implements Tool {
+  protected ClientContext clientContext;
+
+  public AbstractCli(ClientContext cliContext) {
+    this.clientContext = cliContext;
+  }
+
+  @Override
+  public abstract int run(String[] args)
+      throws ParseException, IOException, YarnException, InterruptedException,
+      SubmarineException;
+
+  @Override
+  public void setConf(Configuration conf) {
+    clientContext.setSubmarineConfig(conf);
+  }
+
+  @Override
+  public Configuration getConf() {
+    return clientContext.getSubmarineConfig();
+  }
+}
diff --git a/submarine-core/src/main/java/org/apache/submarine/client/cli/Cli.java b/submarine-client/src/main/java/org/apache/submarine/client/cli/Cli.java
similarity index 80%
rename from submarine-core/src/main/java/org/apache/submarine/client/cli/Cli.java
rename to submarine-client/src/main/java/org/apache/submarine/client/cli/Cli.java
index 500335a..f13d208 100644
--- a/submarine-core/src/main/java/org/apache/submarine/client/cli/Cli.java
+++ b/submarine-client/src/main/java/org/apache/submarine/client/cli/Cli.java
@@ -1,24 +1,29 @@
-/**
- * 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
+/*
+ * 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. See accompanying LICENSE file.
+ * 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.submarine.client.cli;
 
 import org.apache.hadoop.conf.Configuration;
 import org.apache.submarine.client.cli.runjob.RunJobCli;
-import org.apache.submarine.common.ClientContext;
 import org.apache.hadoop.yarn.conf.YarnConfiguration;
-import org.apache.submarine.runtimes.RuntimeFactory;
+import org.apache.submarine.commons.runtime.ClientContext;
+import org.apache.submarine.commons.runtime.RuntimeFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/submarine-core/src/main/java/org/apache/submarine/client/cli/CliConstants.java b/submarine-client/src/main/java/org/apache/submarine/client/cli/CliConstants.java
similarity index 76%
rename from submarine-core/src/main/java/org/apache/submarine/client/cli/CliConstants.java
rename to submarine-client/src/main/java/org/apache/submarine/client/cli/CliConstants.java
index 9e7e225..d99d56e 100644
--- a/submarine-core/src/main/java/org/apache/submarine/client/cli/CliConstants.java
+++ b/submarine-client/src/main/java/org/apache/submarine/client/cli/CliConstants.java
@@ -1,15 +1,20 @@
-/**
- * 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
+/*
+ * 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. See accompanying LICENSE file.
+ * 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.submarine.client.cli;
diff --git a/submarine-core/src/main/java/org/apache/submarine/client/cli/CliUtils.java b/submarine-client/src/main/java/org/apache/submarine/client/cli/CliUtils.java
similarity index 79%
rename from submarine-core/src/main/java/org/apache/submarine/client/cli/CliUtils.java
rename to submarine-client/src/main/java/org/apache/submarine/client/cli/CliUtils.java
index 9637cef..d76c44c 100644
--- a/submarine-core/src/main/java/org/apache/submarine/client/cli/CliUtils.java
+++ b/submarine-client/src/main/java/org/apache/submarine/client/cli/CliUtils.java
@@ -1,15 +1,20 @@
-/**
- * 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
- * <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. See accompanying LICENSE file.
+/*
+ * 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.submarine.client.cli;
@@ -17,8 +22,8 @@ package org.apache.submarine.client.cli;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.security.UserGroupInformation;
 import org.apache.submarine.client.cli.param.runjob.RunJobParameters;
-import org.apache.submarine.common.exception.SubmarineRuntimeException;
-import org.apache.submarine.common.fs.RemoteDirectoryManager;
+import org.apache.submarine.commons.runtime.exception.SubmarineRuntimeException;
+import org.apache.submarine.commons.runtime.fs.RemoteDirectoryManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/submarine-core/src/main/java/org/apache/submarine/client/cli/Command.java b/submarine-client/src/main/java/org/apache/submarine/client/cli/Command.java
similarity index 59%
rename from submarine-core/src/main/java/org/apache/submarine/client/cli/Command.java
rename to submarine-client/src/main/java/org/apache/submarine/client/cli/Command.java
index 109e30e..f19cd54 100644
--- a/submarine-core/src/main/java/org/apache/submarine/client/cli/Command.java
+++ b/submarine-client/src/main/java/org/apache/submarine/client/cli/Command.java
@@ -6,12 +6,15 @@
  * 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.
+ *
+ *   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.submarine.client.cli;
diff --git a/submarine-core/src/main/java/org/apache/submarine/client/cli/ShowJobCli.java b/submarine-client/src/main/java/org/apache/submarine/client/cli/ShowJobCli.java
similarity index 75%
rename from submarine-core/src/main/java/org/apache/submarine/client/cli/ShowJobCli.java
rename to submarine-client/src/main/java/org/apache/submarine/client/cli/ShowJobCli.java
index f2917c3..651a542 100644
--- a/submarine-core/src/main/java/org/apache/submarine/client/cli/ShowJobCli.java
+++ b/submarine-client/src/main/java/org/apache/submarine/client/cli/ShowJobCli.java
@@ -1,15 +1,20 @@
-/**
- * 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
- * <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. See accompanying LICENSE file.
+/*
+ * 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.submarine.client.cli;
@@ -23,10 +28,10 @@ import org.apache.commons.cli.ParseException;
 import org.apache.hadoop.yarn.exceptions.YarnException;
 import org.apache.submarine.client.cli.param.ParametersHolder;
 import org.apache.submarine.client.cli.param.ShowJobParameters;
-import org.apache.submarine.common.ClientContext;
-import org.apache.submarine.common.exception.SubmarineException;
-import org.apache.submarine.runtimes.common.StorageKeyConstants;
-import org.apache.submarine.runtimes.common.SubmarineStorage;
+import org.apache.submarine.commons.runtime.ClientContext;
+import org.apache.submarine.commons.runtime.exception.SubmarineException;
+import org.apache.submarine.commons.runtime.fs.StorageKeyConstants;
+import org.apache.submarine.commons.runtime.fs.SubmarineStorage;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/ConfigType.java b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/ConfigType.java
similarity index 59%
rename from submarine-core/src/main/java/org/apache/submarine/client/cli/param/ConfigType.java
rename to submarine-client/src/main/java/org/apache/submarine/client/cli/param/ConfigType.java
index 00f89bd..e5996d1 100644
--- a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/ConfigType.java
+++ b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/ConfigType.java
@@ -6,12 +6,15 @@
  * 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.
+ *
+ *   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.submarine.client.cli.param;
diff --git a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/Localization.java b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/Localization.java
similarity index 91%
rename from submarine-core/src/main/java/org/apache/submarine/client/cli/param/Localization.java
rename to submarine-client/src/main/java/org/apache/submarine/client/cli/param/Localization.java
index 9e5fcf0..18297e1 100644
--- a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/Localization.java
+++ b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/Localization.java
@@ -1,4 +1,4 @@
-/**
+/*
  * 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
@@ -6,14 +6,15 @@
  * 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.
+ *
+ *   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.submarine.client.cli.param;
diff --git a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/ParametersHolder.java b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/ParametersHolder.java
similarity index 95%
rename from submarine-core/src/main/java/org/apache/submarine/client/cli/param/ParametersHolder.java
rename to submarine-client/src/main/java/org/apache/submarine/client/cli/param/ParametersHolder.java
index a88d3ac..a6df357 100644
--- a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/ParametersHolder.java
+++ b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/ParametersHolder.java
@@ -6,12 +6,15 @@
  * 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.
+ *
+ *   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.submarine.client.cli.param;
@@ -34,8 +37,10 @@ import org.apache.submarine.client.cli.param.yaml.Security;
 import org.apache.submarine.client.cli.param.yaml.TensorBoard;
 import org.apache.submarine.client.cli.param.yaml.YamlConfigFile;
 import org.apache.submarine.client.cli.param.yaml.YamlParseException;
-import org.apache.submarine.client.cli.runjob.Framework;
-import org.apache.submarine.common.ClientContext;
+import org.apache.submarine.commons.runtime.param.BaseParameters;
+import org.apache.submarine.commons.runtime.Framework;
+import org.apache.submarine.commons.runtime.ClientContext;
+import org.apache.submarine.commons.runtime.param.Parameter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -59,7 +64,7 @@ import static org.apache.submarine.client.cli.runjob.RunJobCli.YAML_PARSE_FAILED
  * in the future.
  * If both YAML and CLI value is found for a config, this is an error case.
  */
-public final class ParametersHolder {
+public final class ParametersHolder implements Parameter {
   private static final Logger LOG =
       LoggerFactory.getLogger(ParametersHolder.class);
 
diff --git a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/Quicklink.java b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/Quicklink.java
similarity index 66%
rename from submarine-core/src/main/java/org/apache/submarine/client/cli/param/Quicklink.java
rename to submarine-client/src/main/java/org/apache/submarine/client/cli/param/Quicklink.java
index 2206874..80e3c53 100644
--- a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/Quicklink.java
+++ b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/Quicklink.java
@@ -1,15 +1,20 @@
-/**
- * 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
+/*
+ * 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. See accompanying LICENSE file.
+ * 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.submarine.client.cli.param;
diff --git a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/RunParameters.java b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/RunParameters.java
similarity index 66%
rename from submarine-core/src/main/java/org/apache/submarine/client/cli/param/RunParameters.java
rename to submarine-client/src/main/java/org/apache/submarine/client/cli/param/RunParameters.java
index 0de2d68..2bfbb9e 100644
--- a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/RunParameters.java
+++ b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/RunParameters.java
@@ -1,15 +1,20 @@
-/**
- * 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
+/*
+ * 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. See accompanying LICENSE file.
+ * 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.submarine.client.cli.param;
@@ -17,7 +22,9 @@ package org.apache.submarine.client.cli.param;
 import org.apache.commons.cli.ParseException;
 import org.apache.hadoop.yarn.exceptions.YarnException;
 import org.apache.submarine.client.cli.CliConstants;
-import org.apache.submarine.common.ClientContext;
+import org.apache.submarine.commons.runtime.param.BaseParameters;
+import org.apache.submarine.commons.runtime.ClientContext;
+import org.apache.submarine.commons.runtime.param.Parameter;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -33,14 +40,14 @@ public abstract class RunParameters extends BaseParameters {
   private String queue;
 
   @Override
-  public void updateParameters(ParametersHolder parametersHolder,
-      ClientContext clientContext) throws ParseException,
+  public void updateParameters(Parameter parametersHolder, ClientContext clientContext)
+		  throws ParseException,
       IOException, YarnException {
     String savedModelPath = parametersHolder.getOptionValue(
         CliConstants.SAVED_MODEL_PATH);
     this.setSavedModelPath(savedModelPath);
 
-    List<String> envVars = getEnvVars(parametersHolder);
+    List<String> envVars = getEnvVars((ParametersHolder)parametersHolder);
     this.setEnvars(envVars);
 
     String queue = parametersHolder.getOptionValue(
diff --git a/submarine-client/src/main/java/org/apache/submarine/client/cli/param/ShowJobParameters.java b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/ShowJobParameters.java
new file mode 100644
index 0000000..e71b3d7
--- /dev/null
+++ b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/ShowJobParameters.java
@@ -0,0 +1,25 @@
+/*
+ * 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.submarine.client.cli.param;
+
+import org.apache.submarine.commons.runtime.param.BaseParameters;
+
+public class ShowJobParameters extends BaseParameters {
+}
diff --git a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/runjob/PyTorchRunJobParameters.java b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/runjob/PyTorchRunJobParameters.java
similarity index 85%
rename from submarine-core/src/main/java/org/apache/submarine/client/cli/param/runjob/PyTorchRunJobParameters.java
rename to submarine-client/src/main/java/org/apache/submarine/client/cli/param/runjob/PyTorchRunJobParameters.java
index f470c8b..dbbe31a 100644
--- a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/runjob/PyTorchRunJobParameters.java
+++ b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/runjob/PyTorchRunJobParameters.java
@@ -6,12 +6,15 @@
  * 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.
+ *
+ *   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.submarine.client.cli.param.runjob;
@@ -24,10 +27,10 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.yarn.exceptions.YarnException;
 import org.apache.submarine.client.cli.CliConstants;
 import org.apache.submarine.client.cli.CliUtils;
-import org.apache.submarine.client.cli.param.ParametersHolder;
-import org.apache.submarine.common.ClientContext;
+import org.apache.submarine.commons.runtime.ClientContext;
 
 import com.google.common.collect.Lists;
+import org.apache.submarine.commons.runtime.param.Parameter;
 
 /**
  * Parameters for PyTorch job.
@@ -38,8 +41,7 @@ public class PyTorchRunJobParameters extends RunJobParameters {
       "cannot be defined for PyTorch jobs!";
 
   @Override
-  public void updateParameters(ParametersHolder parametersHolder,
-                               ClientContext clientContext)
+  public void updateParameters(Parameter parametersHolder, ClientContext clientContext)
       throws ParseException, IOException, YarnException {
     checkArguments(parametersHolder);
 
@@ -52,7 +54,7 @@ public class PyTorchRunJobParameters extends RunJobParameters {
     executePostOperations(clientContext);
   }
 
-  private void checkArguments(ParametersHolder parametersHolder)
+  private void checkArguments(Parameter parametersHolder)
       throws YarnException, ParseException {
     if (parametersHolder.getOptionValue(CliConstants.N_PS) != null) {
       throw new ParseException(getParamCannotBeDefinedErrorMessage(
diff --git a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/runjob/RunJobParameters.java b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/runjob/RunJobParameters.java
similarity index 86%
rename from submarine-core/src/main/java/org/apache/submarine/client/cli/param/runjob/RunJobParameters.java
rename to submarine-client/src/main/java/org/apache/submarine/client/cli/param/runjob/RunJobParameters.java
index d9e914d..32daae1 100644
--- a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/runjob/RunJobParameters.java
+++ b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/runjob/RunJobParameters.java
@@ -6,26 +6,15 @@
  * 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.
- */
-
-/**
- * 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.
+ * 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.submarine.client.cli.param.runjob;
@@ -38,14 +27,14 @@ import org.apache.hadoop.yarn.exceptions.YarnException;
 import org.apache.submarine.client.cli.CliConstants;
 import org.apache.submarine.client.cli.CliUtils;
 import org.apache.submarine.client.cli.param.Localization;
-import org.apache.submarine.client.cli.param.ParametersHolder;
 import org.apache.submarine.client.cli.param.Quicklink;
 import org.apache.submarine.client.cli.param.RunParameters;
 import org.apache.submarine.client.cli.runjob.RoleParameters;
-import org.apache.submarine.common.ClientContext;
-import org.apache.submarine.common.api.TensorFlowRole;
-import org.apache.submarine.common.fs.RemoteDirectoryManager;
-import org.apache.submarine.common.resource.ResourceUtils;
+import org.apache.submarine.commons.runtime.ClientContext;
+import org.apache.submarine.commons.runtime.param.Parameter;
+import org.apache.submarine.commons.runtime.api.TensorFlowRole;
+import org.apache.submarine.commons.runtime.fs.RemoteDirectoryManager;
+import org.apache.submarine.commons.runtime.resource.ResourceUtils;
 import org.yaml.snakeyaml.introspector.Property;
 import org.yaml.snakeyaml.introspector.PropertyUtils;
 
@@ -77,8 +66,7 @@ public abstract class RunJobParameters extends RunParameters {
       RoleParameters.createEmpty(TensorFlowRole.WORKER);
 
   @Override
-  public void updateParameters(ParametersHolder parametersHolder,
-                               ClientContext clientContext)
+  public void updateParameters(Parameter parametersHolder, ClientContext clientContext)
       throws ParseException, IOException, YarnException {
 
     String input = parametersHolder.getOptionValue(CliConstants.INPUT_PATH);
@@ -248,7 +236,7 @@ public abstract class RunJobParameters extends RunParameters {
   }
 
   RoleParameters getWorkerParameters(ClientContext clientContext,
-      ParametersHolder parametersHolder, String input)
+      Parameter parametersHolder, String input)
       throws ParseException, YarnException, IOException {
     int nWorkers = getNumberOfWorkers(parametersHolder, input);
     Resource workerResource =
@@ -261,7 +249,7 @@ public abstract class RunJobParameters extends RunParameters {
         workerLaunchCmd, workerDockerImage, workerResource);
   }
 
-  private Resource determineWorkerResource(ParametersHolder parametersHolder,
+  private Resource determineWorkerResource(Parameter parametersHolder,
       int nWorkers, ClientContext clientContext)
       throws ParseException, YarnException, IOException {
     if (nWorkers > 0) {
@@ -276,7 +264,7 @@ public abstract class RunJobParameters extends RunParameters {
     return null;
   }
 
-  private int getNumberOfWorkers(ParametersHolder parametersHolder,
+  private int getNumberOfWorkers(Parameter parametersHolder,
       String input) throws ParseException, YarnException {
     int nWorkers = 1;
     if (parametersHolder.getOptionValue(CliConstants.N_WORKERS) != null) {
diff --git a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/runjob/TensorFlowRunJobParameters.java b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/runjob/TensorFlowRunJobParameters.java
similarity index 85%
rename from submarine-core/src/main/java/org/apache/submarine/client/cli/param/runjob/TensorFlowRunJobParameters.java
rename to submarine-client/src/main/java/org/apache/submarine/client/cli/param/runjob/TensorFlowRunJobParameters.java
index 513de7a..b084a5d 100644
--- a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/runjob/TensorFlowRunJobParameters.java
+++ b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/runjob/TensorFlowRunJobParameters.java
@@ -6,12 +6,15 @@
  * 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.
+ *
+ *   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.submarine.client.cli.param.runjob;
@@ -23,11 +26,11 @@ import org.apache.hadoop.yarn.api.records.Resource;
 import org.apache.hadoop.yarn.exceptions.YarnException;
 import org.apache.submarine.client.cli.CliConstants;
 import org.apache.submarine.client.cli.CliUtils;
-import org.apache.submarine.client.cli.param.ParametersHolder;
 import org.apache.submarine.client.cli.runjob.RoleParameters;
-import org.apache.submarine.common.ClientContext;
-import org.apache.submarine.common.api.TensorFlowRole;
-import org.apache.submarine.common.resource.ResourceUtils;
+import org.apache.submarine.commons.runtime.ClientContext;
+import org.apache.submarine.commons.runtime.param.Parameter;
+import org.apache.submarine.commons.runtime.api.TensorFlowRole;
+import org.apache.submarine.commons.runtime.resource.ResourceUtils;
 
 import java.io.IOException;
 import java.util.List;
@@ -43,8 +46,7 @@ public class TensorFlowRunJobParameters extends RunJobParameters {
       RoleParameters.createEmpty(TensorFlowRole.TENSORBOARD);
 
   @Override
-  public void updateParameters(ParametersHolder parametersHolder,
-                               ClientContext clientContext)
+  public void updateParameters(Parameter parametersHolder, ClientContext clientContext)
       throws ParseException, IOException, YarnException {
     super.updateParameters(parametersHolder, clientContext);
 
@@ -105,7 +107,7 @@ public class TensorFlowRunJobParameters extends RunJobParameters {
   }
 
   private RoleParameters getPSParameters(ClientContext clientContext,
-      ParametersHolder parametersHolder)
+      Parameter parametersHolder)
       throws YarnException, IOException, ParseException {
     int nPS = getNumberOfPS(parametersHolder);
     Resource psResource =
@@ -118,7 +120,7 @@ public class TensorFlowRunJobParameters extends RunJobParameters {
         psDockerImage, psResource);
   }
 
-  private Resource determinePSResource(ParametersHolder parametersHolder,
+  private Resource determinePSResource(Parameter parametersHolder,
       int nPS, ClientContext clientContext)
       throws ParseException, YarnException, IOException {
     if (nPS > 0) {
@@ -132,7 +134,7 @@ public class TensorFlowRunJobParameters extends RunJobParameters {
     return null;
   }
 
-  private int getNumberOfPS(ParametersHolder parametersHolder)
+  private int getNumberOfPS(Parameter parametersHolder)
       throws YarnException {
     int nPS = 0;
     if (parametersHolder.getOptionValue(CliConstants.N_PS) != null) {
@@ -142,9 +144,8 @@ public class TensorFlowRunJobParameters extends RunJobParameters {
     return nPS;
   }
 
-  private RoleParameters getTensorBoardParameters(
-      ParametersHolder parametersHolder, ClientContext clientContext)
-      throws YarnException, IOException {
+  private RoleParameters getTensorBoardParameters(Parameter parametersHolder,
+      ClientContext clientContext) throws YarnException, IOException {
     String tensorboardResourceStr =
         parametersHolder.getOptionValue(CliConstants.TENSORBOARD_RESOURCES);
     if (tensorboardResourceStr == null || tensorboardResourceStr.isEmpty()) {
diff --git a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/yaml/Configs.java b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/yaml/Configs.java
similarity index 86%
rename from submarine-core/src/main/java/org/apache/submarine/client/cli/param/yaml/Configs.java
rename to submarine-client/src/main/java/org/apache/submarine/client/cli/param/yaml/Configs.java
index 2a42d6e..8237484 100644
--- a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/yaml/Configs.java
+++ b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/yaml/Configs.java
@@ -6,12 +6,15 @@
  * 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.
+ *
+ *   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.submarine.client.cli.param.yaml;
diff --git a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/yaml/PsRole.java b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/yaml/PsRole.java
similarity index 63%
rename from submarine-core/src/main/java/org/apache/submarine/client/cli/param/yaml/PsRole.java
rename to submarine-client/src/main/java/org/apache/submarine/client/cli/param/yaml/PsRole.java
index 3217237..3a9397d 100644
--- a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/yaml/PsRole.java
+++ b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/yaml/PsRole.java
@@ -6,12 +6,15 @@
  * 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.
+ *
+ *   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.submarine.client.cli.param.yaml;
diff --git a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/yaml/Role.java b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/yaml/Role.java
similarity index 83%
rename from submarine-core/src/main/java/org/apache/submarine/client/cli/param/yaml/Role.java
rename to submarine-client/src/main/java/org/apache/submarine/client/cli/param/yaml/Role.java
index 75728f8..502885b 100644
--- a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/yaml/Role.java
+++ b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/yaml/Role.java
@@ -6,12 +6,15 @@
  * 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.
+ *
+ *   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.submarine.client.cli.param.yaml;
diff --git a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/yaml/Roles.java b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/yaml/Roles.java
similarity index 68%
rename from submarine-core/src/main/java/org/apache/submarine/client/cli/param/yaml/Roles.java
rename to submarine-client/src/main/java/org/apache/submarine/client/cli/param/yaml/Roles.java
index 5541829..fab6f31 100644
--- a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/yaml/Roles.java
+++ b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/yaml/Roles.java
@@ -6,12 +6,15 @@
  * 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.
+ *
+ *   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.submarine.client.cli.param.yaml;
diff --git a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/yaml/Scheduling.java b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/yaml/Scheduling.java
similarity index 66%
rename from submarine-core/src/main/java/org/apache/submarine/client/cli/param/yaml/Scheduling.java
rename to submarine-client/src/main/java/org/apache/submarine/client/cli/param/yaml/Scheduling.java
index 3d8e535..1781444 100644
--- a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/yaml/Scheduling.java
+++ b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/yaml/Scheduling.java
@@ -6,12 +6,15 @@
  * 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.
+ *
+ *   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.submarine.client.cli.param.yaml;
diff --git a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/yaml/Security.java b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/yaml/Security.java
similarity index 75%
rename from submarine-core/src/main/java/org/apache/submarine/client/cli/param/yaml/Security.java
rename to submarine-client/src/main/java/org/apache/submarine/client/cli/param/yaml/Security.java
index 2673f8e..4a7af73 100644
--- a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/yaml/Security.java
+++ b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/yaml/Security.java
@@ -6,12 +6,15 @@
  * 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.
+ *
+ *   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.submarine.client.cli.param.yaml;
diff --git a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/yaml/Spec.java b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/yaml/Spec.java
similarity index 73%
rename from submarine-core/src/main/java/org/apache/submarine/client/cli/param/yaml/Spec.java
rename to submarine-client/src/main/java/org/apache/submarine/client/cli/param/yaml/Spec.java
index c5738cb..a3af771 100644
--- a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/yaml/Spec.java
+++ b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/yaml/Spec.java
@@ -6,12 +6,15 @@
  * 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.
+ *
+ *   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.submarine.client.cli.param.yaml;
diff --git a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/yaml/TensorBoard.java b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/yaml/TensorBoard.java
similarity index 71%
rename from submarine-core/src/main/java/org/apache/submarine/client/cli/param/yaml/TensorBoard.java
rename to submarine-client/src/main/java/org/apache/submarine/client/cli/param/yaml/TensorBoard.java
index 75e2fc7..d63c3c8 100644
--- a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/yaml/TensorBoard.java
+++ b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/yaml/TensorBoard.java
@@ -6,12 +6,15 @@
  * 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.
+ *
+ *   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.submarine.client.cli.param.yaml;
diff --git a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/yaml/WorkerRole.java b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/yaml/WorkerRole.java
similarity index 64%
rename from submarine-core/src/main/java/org/apache/submarine/client/cli/param/yaml/WorkerRole.java
rename to submarine-client/src/main/java/org/apache/submarine/client/cli/param/yaml/WorkerRole.java
index 734db92..1a75504 100644
--- a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/yaml/WorkerRole.java
+++ b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/yaml/WorkerRole.java
@@ -6,12 +6,15 @@
  * 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.
+ *
+ *   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.submarine.client.cli.param.yaml;
diff --git a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/yaml/YamlConfigFile.java b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/yaml/YamlConfigFile.java
similarity index 80%
rename from submarine-core/src/main/java/org/apache/submarine/client/cli/param/yaml/YamlConfigFile.java
rename to submarine-client/src/main/java/org/apache/submarine/client/cli/param/yaml/YamlConfigFile.java
index a70c264..85d60a5 100644
--- a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/yaml/YamlConfigFile.java
+++ b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/yaml/YamlConfigFile.java
@@ -6,12 +6,15 @@
  * 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.
+ *
+ *   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.submarine.client.cli.param.yaml;
diff --git a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/yaml/YamlParseException.java b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/yaml/YamlParseException.java
similarity index 65%
rename from submarine-core/src/main/java/org/apache/submarine/client/cli/param/yaml/YamlParseException.java
rename to submarine-client/src/main/java/org/apache/submarine/client/cli/param/yaml/YamlParseException.java
index eb88745..3b222f5 100644
--- a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/yaml/YamlParseException.java
+++ b/submarine-client/src/main/java/org/apache/submarine/client/cli/param/yaml/YamlParseException.java
@@ -6,12 +6,15 @@
  * 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.
+ *
+ *   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.submarine.client.cli.param.yaml;
diff --git a/submarine-core/src/main/java/org/apache/submarine/client/cli/runjob/RoleParameters.java b/submarine-client/src/main/java/org/apache/submarine/client/cli/runjob/RoleParameters.java
similarity index 81%
rename from submarine-core/src/main/java/org/apache/submarine/client/cli/runjob/RoleParameters.java
rename to submarine-client/src/main/java/org/apache/submarine/client/cli/runjob/RoleParameters.java
index e95bee8..bda5850 100644
--- a/submarine-core/src/main/java/org/apache/submarine/client/cli/runjob/RoleParameters.java
+++ b/submarine-client/src/main/java/org/apache/submarine/client/cli/runjob/RoleParameters.java
@@ -6,18 +6,21 @@
  * 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.
+ *
+ *   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.submarine.client.cli.runjob;
 
 import org.apache.hadoop.yarn.api.records.Resource;
-import org.apache.submarine.common.api.Role;
+import org.apache.submarine.commons.runtime.api.Role;
 
 /**
  * This class encapsulates data related to a particular Role.
diff --git a/submarine-core/src/main/java/org/apache/submarine/client/cli/runjob/RunJobCli.java b/submarine-client/src/main/java/org/apache/submarine/client/cli/runjob/RunJobCli.java
similarity index 91%
rename from submarine-core/src/main/java/org/apache/submarine/client/cli/runjob/RunJobCli.java
rename to submarine-client/src/main/java/org/apache/submarine/client/cli/runjob/RunJobCli.java
index a123679..7396ddc 100644
--- a/submarine-core/src/main/java/org/apache/submarine/client/cli/runjob/RunJobCli.java
+++ b/submarine-client/src/main/java/org/apache/submarine/client/cli/runjob/RunJobCli.java
@@ -6,26 +6,15 @@
  * 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.
- */
-
-/**
- * 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
- * <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. See accompanying LICENSE file.
+ *
+ *   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.submarine.client.cli.runjob;
@@ -47,11 +36,12 @@ import org.apache.submarine.client.cli.param.ParametersHolder;
 import org.apache.submarine.client.cli.param.runjob.RunJobParameters;
 import org.apache.submarine.client.cli.param.yaml.YamlConfigFile;
 import org.apache.submarine.client.cli.param.yaml.YamlParseException;
-import org.apache.submarine.common.ClientContext;
-import org.apache.submarine.common.exception.SubmarineException;
-import org.apache.submarine.runtimes.common.JobMonitor;
-import org.apache.submarine.runtimes.common.JobSubmitter;
-import org.apache.submarine.runtimes.common.StorageKeyConstants;
+import org.apache.submarine.commons.runtime.ClientContext;
+import org.apache.submarine.commons.runtime.Framework;
+import org.apache.submarine.commons.runtime.exception.SubmarineException;
+import org.apache.submarine.commons.runtime.JobMonitor;
+import org.apache.submarine.commons.runtime.JobSubmitter;
+import org.apache.submarine.commons.runtime.fs.StorageKeyConstants;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.yaml.snakeyaml.Yaml;
diff --git a/submarine-core/src/test/java/org/apache/submarine/client/cli/TestShowJobCliParsing.java b/submarine-client/src/test/java/org/apache/submarine/client/cli/TestShowJobCliParsing.java
similarity index 77%
rename from submarine-core/src/test/java/org/apache/submarine/client/cli/TestShowJobCliParsing.java
rename to submarine-client/src/test/java/org/apache/submarine/client/cli/TestShowJobCliParsing.java
index 806e926..8c01a71 100644
--- a/submarine-core/src/test/java/org/apache/submarine/client/cli/TestShowJobCliParsing.java
+++ b/submarine-client/src/test/java/org/apache/submarine/client/cli/TestShowJobCliParsing.java
@@ -1,4 +1,4 @@
-/**
+/*
  * 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
@@ -6,30 +6,30 @@
  * 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.
+ *
+ *   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.submarine.client.cli;
 
 import org.apache.commons.cli.ParseException;
 import org.apache.hadoop.yarn.api.records.ApplicationId;
 import org.apache.hadoop.yarn.exceptions.YarnException;
 import org.apache.submarine.client.cli.param.ShowJobParameters;
-import org.apache.submarine.common.MockClientContext;
-import org.apache.submarine.common.conf.SubmarineLogs;
-import org.apache.submarine.common.exception.SubmarineException;
-import org.apache.submarine.runtimes.RuntimeFactory;
-import org.apache.submarine.runtimes.common.MemorySubmarineStorage;
-import org.apache.submarine.runtimes.common.StorageKeyConstants;
-import org.apache.submarine.runtimes.common.SubmarineStorage;
+import org.apache.submarine.commons.runtime.MockClientContext;
+import org.apache.submarine.commons.runtime.conf.SubmarineLogs;
+import org.apache.submarine.commons.runtime.exception.SubmarineException;
+import org.apache.submarine.commons.runtime.RuntimeFactory;
+import org.apache.submarine.commons.runtime.fs.MemorySubmarineStorage;
+import org.apache.submarine.commons.runtime.fs.StorageKeyConstants;
+import org.apache.submarine.commons.runtime.fs.SubmarineStorage;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
diff --git a/submarine-core/src/test/java/org/apache/submarine/client/cli/YamlConfigTestUtils.java b/submarine-client/src/test/java/org/apache/submarine/client/cli/YamlConfigTestUtils.java
similarity index 84%
rename from submarine-core/src/test/java/org/apache/submarine/client/cli/YamlConfigTestUtils.java
rename to submarine-client/src/test/java/org/apache/submarine/client/cli/YamlConfigTestUtils.java
index 779df05..c639ba6 100644
--- a/submarine-core/src/test/java/org/apache/submarine/client/cli/YamlConfigTestUtils.java
+++ b/submarine-client/src/test/java/org/apache/submarine/client/cli/YamlConfigTestUtils.java
@@ -6,12 +6,15 @@
  * 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.
+ *
+ *   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.submarine.client.cli;
diff --git a/submarine-core/src/test/java/org/apache/submarine/client/cli/runjob/TestRunJobCliParsingCommon.java b/submarine-client/src/test/java/org/apache/submarine/client/cli/runjob/TestRunJobCliParsingCommon.java
similarity index 86%
rename from submarine-core/src/test/java/org/apache/submarine/client/cli/runjob/TestRunJobCliParsingCommon.java
rename to submarine-client/src/test/java/org/apache/submarine/client/cli/runjob/TestRunJobCliParsingCommon.java
index 9ba0647..d32271d 100644
--- a/submarine-core/src/test/java/org/apache/submarine/client/cli/runjob/TestRunJobCliParsingCommon.java
+++ b/submarine-client/src/test/java/org/apache/submarine/client/cli/runjob/TestRunJobCliParsingCommon.java
@@ -6,15 +6,17 @@
  * 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.
+ *
+ *   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.submarine.client.cli.runjob;
 
 import org.apache.commons.cli.MissingArgumentException;
@@ -24,12 +26,12 @@ import org.apache.hadoop.yarn.exceptions.YarnException;
 import org.apache.submarine.client.cli.param.ParametersHolder;
 import org.apache.submarine.client.cli.param.runjob.RunJobParameters;
 import org.apache.submarine.client.cli.param.runjob.TensorFlowRunJobParameters;
-import org.apache.submarine.common.MockClientContext;
-import org.apache.submarine.common.conf.SubmarineLogs;
-import org.apache.submarine.runtimes.RuntimeFactory;
-import org.apache.submarine.runtimes.common.JobMonitor;
-import org.apache.submarine.runtimes.common.JobSubmitter;
-import org.apache.submarine.runtimes.common.SubmarineStorage;
+import org.apache.submarine.commons.runtime.MockClientContext;
+import org.apache.submarine.commons.runtime.conf.SubmarineLogs;
+import org.apache.submarine.commons.runtime.RuntimeFactory;
+import org.apache.submarine.commons.runtime.JobMonitor;
+import org.apache.submarine.commons.runtime.JobSubmitter;
+import org.apache.submarine.commons.runtime.fs.SubmarineStorage;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
diff --git a/submarine-core/src/test/java/org/apache/submarine/client/cli/runjob/TestRunJobCliParsingCommonYaml.java b/submarine-client/src/test/java/org/apache/submarine/client/cli/runjob/TestRunJobCliParsingCommonYaml.java
similarity index 93%
rename from submarine-core/src/test/java/org/apache/submarine/client/cli/runjob/TestRunJobCliParsingCommonYaml.java
rename to submarine-client/src/test/java/org/apache/submarine/client/cli/runjob/TestRunJobCliParsingCommonYaml.java
index 8c10b59..0b3b439 100644
--- a/submarine-core/src/test/java/org/apache/submarine/client/cli/runjob/TestRunJobCliParsingCommonYaml.java
+++ b/submarine-client/src/test/java/org/apache/submarine/client/cli/runjob/TestRunJobCliParsingCommonYaml.java
@@ -6,12 +6,15 @@
  * 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.
+ *
+ *   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.submarine.client.cli.runjob;
@@ -21,9 +24,9 @@ import org.apache.submarine.client.cli.YamlConfigTestUtils;
 import org.apache.submarine.client.cli.param.runjob.RunJobParameters;
 import org.apache.submarine.client.cli.param.runjob.TensorFlowRunJobParameters;
 import org.apache.submarine.client.cli.param.yaml.YamlParseException;
-import org.apache.submarine.common.conf.SubmarineLogs;
-import org.apache.submarine.common.exception.SubmarineRuntimeException;
-import org.apache.submarine.common.resource.ResourceUtils;
+import org.apache.submarine.commons.runtime.conf.SubmarineLogs;
+import org.apache.submarine.commons.runtime.exception.SubmarineRuntimeException;
+import org.apache.submarine.commons.runtime.resource.ResourceUtils;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
diff --git a/submarine-core/src/test/java/org/apache/submarine/client/cli/runjob/TestRunJobCliParsingParameterized.java b/submarine-client/src/test/java/org/apache/submarine/client/cli/runjob/TestRunJobCliParsingParameterized.java
similarity index 90%
rename from submarine-core/src/test/java/org/apache/submarine/client/cli/runjob/TestRunJobCliParsingParameterized.java
rename to submarine-client/src/test/java/org/apache/submarine/client/cli/runjob/TestRunJobCliParsingParameterized.java
index 6f062f6..b2eb302 100644
--- a/submarine-core/src/test/java/org/apache/submarine/client/cli/runjob/TestRunJobCliParsingParameterized.java
+++ b/submarine-client/src/test/java/org/apache/submarine/client/cli/runjob/TestRunJobCliParsingParameterized.java
@@ -6,15 +6,17 @@
  * 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.
+ *
+ *   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.submarine.client.cli.runjob;
 import com.google.common.collect.Lists;
 import org.apache.commons.cli.ParseException;
@@ -22,10 +24,11 @@ import org.apache.submarine.client.cli.CliConstants;
 import org.apache.submarine.client.cli.param.runjob.PyTorchRunJobParameters;
 import org.apache.submarine.client.cli.param.runjob.RunJobParameters;
 import org.apache.submarine.client.cli.param.runjob.TensorFlowRunJobParameters;
-import org.apache.submarine.common.MockClientContext;
-import org.apache.submarine.common.conf.SubmarineLogs;
-import org.apache.submarine.runtimes.common.JobMonitor;
-import org.apache.submarine.runtimes.common.JobSubmitter;
+import org.apache.submarine.commons.runtime.Framework;
+import org.apache.submarine.commons.runtime.MockClientContext;
+import org.apache.submarine.commons.runtime.conf.SubmarineLogs;
+import org.apache.submarine.commons.runtime.JobMonitor;
+import org.apache.submarine.commons.runtime.JobSubmitter;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
diff --git a/submarine-core/src/test/java/org/apache/submarine/client/cli/runjob/pytorch/TestRunJobCliParsingPyTorch.java b/submarine-client/src/test/java/org/apache/submarine/client/cli/runjob/pytorch/TestRunJobCliParsingPyTorch.java
similarity index 94%
rename from submarine-core/src/test/java/org/apache/submarine/client/cli/runjob/pytorch/TestRunJobCliParsingPyTorch.java
rename to submarine-client/src/test/java/org/apache/submarine/client/cli/runjob/pytorch/TestRunJobCliParsingPyTorch.java
index 78b8b2b..ee1d7f8 100644
--- a/submarine-core/src/test/java/org/apache/submarine/client/cli/runjob/pytorch/TestRunJobCliParsingPyTorch.java
+++ b/submarine-client/src/test/java/org/apache/submarine/client/cli/runjob/pytorch/TestRunJobCliParsingPyTorch.java
@@ -6,22 +6,24 @@
  * 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.
+ *
+ *   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.submarine.client.cli.runjob.pytorch;
 
 import org.apache.commons.cli.ParseException;
 import org.apache.submarine.client.cli.param.runjob.PyTorchRunJobParameters;
 import org.apache.submarine.client.cli.param.runjob.RunJobParameters;
 import org.apache.submarine.client.cli.runjob.RunJobCli;
-import org.apache.submarine.common.conf.SubmarineLogs;
+import org.apache.submarine.commons.runtime.conf.SubmarineLogs;
 import org.apache.hadoop.yarn.util.resource.Resources;
 import org.apache.submarine.client.cli.runjob.TestRunJobCliParsingCommon;
 import org.junit.Before;
diff --git a/submarine-core/src/test/java/org/apache/submarine/client/cli/runjob/pytorch/TestRunJobCliParsingPyTorchYaml.java b/submarine-client/src/test/java/org/apache/submarine/client/cli/runjob/pytorch/TestRunJobCliParsingPyTorchYaml.java
similarity index 94%
rename from submarine-core/src/test/java/org/apache/submarine/client/cli/runjob/pytorch/TestRunJobCliParsingPyTorchYaml.java
rename to submarine-client/src/test/java/org/apache/submarine/client/cli/runjob/pytorch/TestRunJobCliParsingPyTorchYaml.java
index 7eb340c..fcc4413 100644
--- a/submarine-core/src/test/java/org/apache/submarine/client/cli/runjob/pytorch/TestRunJobCliParsingPyTorchYaml.java
+++ b/submarine-client/src/test/java/org/apache/submarine/client/cli/runjob/pytorch/TestRunJobCliParsingPyTorchYaml.java
@@ -6,15 +6,17 @@
  * 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.
+ *
+ *   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.submarine.client.cli.runjob.pytorch;
 
 import static org.junit.Assert.assertEquals;
@@ -31,9 +33,9 @@ import org.apache.submarine.client.cli.param.runjob.PyTorchRunJobParameters;
 import org.apache.submarine.client.cli.param.runjob.RunJobParameters;
 import org.apache.submarine.client.cli.param.yaml.YamlParseException;
 import org.apache.submarine.client.cli.runjob.RunJobCli;
-import org.apache.submarine.common.conf.SubmarineLogs;
-import org.apache.submarine.common.exception.SubmarineRuntimeException;
-import org.apache.submarine.common.resource.ResourceUtils;
+import org.apache.submarine.commons.runtime.conf.SubmarineLogs;
+import org.apache.submarine.commons.runtime.exception.SubmarineRuntimeException;
+import org.apache.submarine.commons.runtime.resource.ResourceUtils;
 import org.apache.hadoop.yarn.util.resource.Resources;
 import org.apache.submarine.client.cli.runjob.TestRunJobCliParsingCommon;
 import org.junit.After;
diff --git a/submarine-core/src/test/java/org/apache/submarine/client/cli/runjob/tensorflow/TestRunJobCliParsingTensorFlow.java b/submarine-client/src/test/java/org/apache/submarine/client/cli/runjob/tensorflow/TestRunJobCliParsingTensorFlow.java
similarity index 93%
rename from submarine-core/src/test/java/org/apache/submarine/client/cli/runjob/tensorflow/TestRunJobCliParsingTensorFlow.java
rename to submarine-client/src/test/java/org/apache/submarine/client/cli/runjob/tensorflow/TestRunJobCliParsingTensorFlow.java
index c8176af..9eef4a3 100644
--- a/submarine-core/src/test/java/org/apache/submarine/client/cli/runjob/tensorflow/TestRunJobCliParsingTensorFlow.java
+++ b/submarine-client/src/test/java/org/apache/submarine/client/cli/runjob/tensorflow/TestRunJobCliParsingTensorFlow.java
@@ -6,15 +6,17 @@
  * 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.
+ *
+ *   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.submarine.client.cli.runjob.tensorflow;
 
 import org.apache.commons.cli.ParseException;
@@ -22,7 +24,7 @@ import org.apache.submarine.client.cli.CliConstants;
 import org.apache.submarine.client.cli.param.runjob.RunJobParameters;
 import org.apache.submarine.client.cli.param.runjob.TensorFlowRunJobParameters;
 import org.apache.submarine.client.cli.runjob.RunJobCli;
-import org.apache.submarine.common.conf.SubmarineLogs;
+import org.apache.submarine.commons.runtime.conf.SubmarineLogs;
 import org.apache.hadoop.yarn.util.resource.Resources;
 import org.apache.submarine.client.cli.runjob.TestRunJobCliParsingCommon;
 import org.junit.Before;
diff --git a/submarine-core/src/test/java/org/apache/submarine/client/cli/runjob/tensorflow/TestRunJobCliParsingTensorFlowYaml.java b/submarine-client/src/test/java/org/apache/submarine/client/cli/runjob/tensorflow/TestRunJobCliParsingTensorFlowYaml.java
similarity index 94%
rename from submarine-core/src/test/java/org/apache/submarine/client/cli/runjob/tensorflow/TestRunJobCliParsingTensorFlowYaml.java
rename to submarine-client/src/test/java/org/apache/submarine/client/cli/runjob/tensorflow/TestRunJobCliParsingTensorFlowYaml.java
index 211dc2b..f334386 100644
--- a/submarine-core/src/test/java/org/apache/submarine/client/cli/runjob/tensorflow/TestRunJobCliParsingTensorFlowYaml.java
+++ b/submarine-client/src/test/java/org/apache/submarine/client/cli/runjob/tensorflow/TestRunJobCliParsingTensorFlowYaml.java
@@ -6,15 +6,17 @@
  * 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.
+ *
+ *   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.submarine.client.cli.runjob.tensorflow;
 
 import com.google.common.collect.ImmutableList;
@@ -23,9 +25,9 @@ import org.apache.submarine.client.cli.YamlConfigTestUtils;
 import org.apache.submarine.client.cli.param.runjob.RunJobParameters;
 import org.apache.submarine.client.cli.param.runjob.TensorFlowRunJobParameters;
 import org.apache.submarine.client.cli.runjob.RunJobCli;
-import org.apache.submarine.common.conf.SubmarineLogs;
-import org.apache.submarine.common.exception.SubmarineRuntimeException;
-import org.apache.submarine.common.resource.ResourceUtils;
+import org.apache.submarine.commons.runtime.conf.SubmarineLogs;
+import org.apache.submarine.commons.runtime.exception.SubmarineRuntimeException;
+import org.apache.submarine.commons.runtime.resource.ResourceUtils;
 import org.apache.hadoop.yarn.util.resource.Resources;
 import org.apache.submarine.client.cli.runjob.TestRunJobCliParsingCommon;
 import org.junit.After;
diff --git a/submarine-core/src/test/java/org/apache/submarine/client/cli/runjob/tensorflow/TestRunJobCliParsingTensorFlowYamlStandalone.java b/submarine-client/src/test/java/org/apache/submarine/client/cli/runjob/tensorflow/TestRunJobCliParsingTensorFlowYamlStandalone.java
similarity index 94%
rename from submarine-core/src/test/java/org/apache/submarine/client/cli/runjob/tensorflow/TestRunJobCliParsingTensorFlowYamlStandalone.java
rename to submarine-client/src/test/java/org/apache/submarine/client/cli/runjob/tensorflow/TestRunJobCliParsingTensorFlowYamlStandalone.java
index f311c26..1e770db 100644
--- a/submarine-core/src/test/java/org/apache/submarine/client/cli/runjob/tensorflow/TestRunJobCliParsingTensorFlowYamlStandalone.java
+++ b/submarine-client/src/test/java/org/apache/submarine/client/cli/runjob/tensorflow/TestRunJobCliParsingTensorFlowYamlStandalone.java
@@ -6,15 +6,17 @@
  * 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.
+ *
+ *   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.submarine.client.cli.runjob.tensorflow;
 
 import org.apache.submarine.client.cli.param.yaml.Configs;
@@ -25,7 +27,7 @@ import org.apache.submarine.client.cli.param.yaml.Security;
 import org.apache.submarine.client.cli.param.yaml.Spec;
 import org.apache.submarine.client.cli.param.yaml.TensorBoard;
 import org.apache.submarine.client.cli.param.yaml.YamlConfigFile;
-import org.apache.submarine.common.conf.SubmarineLogs;
+import org.apache.submarine.commons.runtime.conf.SubmarineLogs;
 import org.apache.submarine.client.cli.YamlConfigTestUtils;
 import org.junit.Before;
 import org.junit.Test;
diff --git a/submarine-runtime/yarnservice-runtime/src/test/resources/core-site.xml b/submarine-client/src/test/resources/core-site.xml
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/test/resources/core-site.xml
rename to submarine-client/src/test/resources/core-site.xml
diff --git a/submarine-runtime/yarnservice-runtime/src/test/resources/hdfs-site.xml b/submarine-client/src/test/resources/hdfs-site.xml
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/test/resources/hdfs-site.xml
rename to submarine-client/src/test/resources/hdfs-site.xml
diff --git a/submarine-core/src/test/resources/runjob-common-yaml/empty-framework.yaml b/submarine-client/src/test/resources/runjob-common-yaml/empty-framework.yaml
similarity index 100%
rename from submarine-core/src/test/resources/runjob-common-yaml/empty-framework.yaml
rename to submarine-client/src/test/resources/runjob-common-yaml/empty-framework.yaml
diff --git a/submarine-core/src/test/resources/runjob-common-yaml/invalid-framework.yaml b/submarine-client/src/test/resources/runjob-common-yaml/invalid-framework.yaml
similarity index 100%
rename from submarine-core/src/test/resources/runjob-common-yaml/invalid-framework.yaml
rename to submarine-client/src/test/resources/runjob-common-yaml/invalid-framework.yaml
diff --git a/submarine-core/src/test/resources/runjob-common-yaml/missing-configs.yaml b/submarine-client/src/test/resources/runjob-common-yaml/missing-configs.yaml
similarity index 100%
rename from submarine-core/src/test/resources/runjob-common-yaml/missing-configs.yaml
rename to submarine-client/src/test/resources/runjob-common-yaml/missing-configs.yaml
diff --git a/submarine-core/src/test/resources/runjob-common-yaml/missing-framework.yaml b/submarine-client/src/test/resources/runjob-common-yaml/missing-framework.yaml
similarity index 100%
rename from submarine-core/src/test/resources/runjob-common-yaml/missing-framework.yaml
rename to submarine-client/src/test/resources/runjob-common-yaml/missing-framework.yaml
diff --git a/submarine-core/src/test/resources/runjob-common-yaml/some-sections-missing.yaml b/submarine-client/src/test/resources/runjob-common-yaml/some-sections-missing.yaml
similarity index 100%
rename from submarine-core/src/test/resources/runjob-common-yaml/some-sections-missing.yaml
rename to submarine-client/src/test/resources/runjob-common-yaml/some-sections-missing.yaml
diff --git a/submarine-core/src/test/resources/runjob-common-yaml/test-false-values.yaml b/submarine-client/src/test/resources/runjob-common-yaml/test-false-values.yaml
similarity index 100%
rename from submarine-core/src/test/resources/runjob-common-yaml/test-false-values.yaml
rename to submarine-client/src/test/resources/runjob-common-yaml/test-false-values.yaml
diff --git a/submarine-core/src/test/resources/runjob-common-yaml/wrong-indentation.yaml b/submarine-client/src/test/resources/runjob-common-yaml/wrong-indentation.yaml
similarity index 100%
rename from submarine-core/src/test/resources/runjob-common-yaml/wrong-indentation.yaml
rename to submarine-client/src/test/resources/runjob-common-yaml/wrong-indentation.yaml
diff --git a/submarine-core/src/test/resources/runjob-common-yaml/wrong-property-name.yaml b/submarine-client/src/test/resources/runjob-common-yaml/wrong-property-name.yaml
similarity index 100%
rename from submarine-core/src/test/resources/runjob-common-yaml/wrong-property-name.yaml
rename to submarine-client/src/test/resources/runjob-common-yaml/wrong-property-name.yaml
diff --git a/submarine-core/src/test/resources/runjob-pytorch-yaml/envs-are-missing.yaml b/submarine-client/src/test/resources/runjob-pytorch-yaml/envs-are-missing.yaml
similarity index 100%
rename from submarine-core/src/test/resources/runjob-pytorch-yaml/envs-are-missing.yaml
rename to submarine-client/src/test/resources/runjob-pytorch-yaml/envs-are-missing.yaml
diff --git a/submarine-core/src/test/resources/runjob-pytorch-yaml/invalid-config-ps-section.yaml b/submarine-client/src/test/resources/runjob-pytorch-yaml/invalid-config-ps-section.yaml
similarity index 100%
rename from submarine-core/src/test/resources/runjob-pytorch-yaml/invalid-config-ps-section.yaml
rename to submarine-client/src/test/resources/runjob-pytorch-yaml/invalid-config-ps-section.yaml
diff --git a/submarine-core/src/test/resources/runjob-pytorch-yaml/invalid-config-tensorboard-section.yaml b/submarine-client/src/test/resources/runjob-pytorch-yaml/invalid-config-tensorboard-section.yaml
similarity index 100%
rename from submarine-core/src/test/resources/runjob-pytorch-yaml/invalid-config-tensorboard-section.yaml
rename to submarine-client/src/test/resources/runjob-pytorch-yaml/invalid-config-tensorboard-section.yaml
diff --git a/submarine-core/src/test/resources/runjob-pytorch-yaml/security-principal-is-missing.yaml b/submarine-client/src/test/resources/runjob-pytorch-yaml/security-principal-is-missing.yaml
similarity index 100%
rename from submarine-core/src/test/resources/runjob-pytorch-yaml/security-principal-is-missing.yaml
rename to submarine-client/src/test/resources/runjob-pytorch-yaml/security-principal-is-missing.yaml
diff --git a/submarine-core/src/test/resources/runjob-pytorch-yaml/valid-config-with-overrides.yaml b/submarine-client/src/test/resources/runjob-pytorch-yaml/valid-config-with-overrides.yaml
similarity index 100%
rename from submarine-core/src/test/resources/runjob-pytorch-yaml/valid-config-with-overrides.yaml
rename to submarine-client/src/test/resources/runjob-pytorch-yaml/valid-config-with-overrides.yaml
diff --git a/submarine-core/src/test/resources/runjob-pytorch-yaml/valid-config.yaml b/submarine-client/src/test/resources/runjob-pytorch-yaml/valid-config.yaml
similarity index 100%
rename from submarine-core/src/test/resources/runjob-pytorch-yaml/valid-config.yaml
rename to submarine-client/src/test/resources/runjob-pytorch-yaml/valid-config.yaml
diff --git a/submarine-core/src/test/resources/runjob-pytorch-yaml/valid-gpu-config.yaml b/submarine-client/src/test/resources/runjob-pytorch-yaml/valid-gpu-config.yaml
similarity index 100%
rename from submarine-core/src/test/resources/runjob-pytorch-yaml/valid-gpu-config.yaml
rename to submarine-client/src/test/resources/runjob-pytorch-yaml/valid-gpu-config.yaml
diff --git a/submarine-core/src/test/resources/runjob-tensorflow-yaml/envs-are-missing.yaml b/submarine-client/src/test/resources/runjob-tensorflow-yaml/envs-are-missing.yaml
similarity index 100%
rename from submarine-core/src/test/resources/runjob-tensorflow-yaml/envs-are-missing.yaml
rename to submarine-client/src/test/resources/runjob-tensorflow-yaml/envs-are-missing.yaml
diff --git a/submarine-core/src/test/resources/runjob-tensorflow-yaml/security-principal-is-missing.yaml b/submarine-client/src/test/resources/runjob-tensorflow-yaml/security-principal-is-missing.yaml
similarity index 100%
rename from submarine-core/src/test/resources/runjob-tensorflow-yaml/security-principal-is-missing.yaml
rename to submarine-client/src/test/resources/runjob-tensorflow-yaml/security-principal-is-missing.yaml
diff --git a/submarine-core/src/test/resources/runjob-tensorflow-yaml/tensorboard-dockerimage-is-missing.yaml b/submarine-client/src/test/resources/runjob-tensorflow-yaml/tensorboard-dockerimage-is-missing.yaml
similarity index 100%
rename from submarine-core/src/test/resources/runjob-tensorflow-yaml/tensorboard-dockerimage-is-missing.yaml
rename to submarine-client/src/test/resources/runjob-tensorflow-yaml/tensorboard-dockerimage-is-missing.yaml
diff --git a/submarine-core/src/test/resources/runjob-tensorflow-yaml/valid-config-with-overrides.yaml b/submarine-client/src/test/resources/runjob-tensorflow-yaml/valid-config-with-overrides.yaml
similarity index 100%
rename from submarine-core/src/test/resources/runjob-tensorflow-yaml/valid-config-with-overrides.yaml
rename to submarine-client/src/test/resources/runjob-tensorflow-yaml/valid-config-with-overrides.yaml
diff --git a/submarine-core/src/test/resources/runjob-tensorflow-yaml/valid-config.yaml b/submarine-client/src/test/resources/runjob-tensorflow-yaml/valid-config.yaml
similarity index 100%
rename from submarine-core/src/test/resources/runjob-tensorflow-yaml/valid-config.yaml
rename to submarine-client/src/test/resources/runjob-tensorflow-yaml/valid-config.yaml
diff --git a/submarine-core/src/test/resources/runjob-tensorflow-yaml/valid-gpu-config.yaml b/submarine-client/src/test/resources/runjob-tensorflow-yaml/valid-gpu-config.yaml
similarity index 100%
rename from submarine-core/src/test/resources/runjob-tensorflow-yaml/valid-gpu-config.yaml
rename to submarine-client/src/test/resources/runjob-tensorflow-yaml/valid-gpu-config.yaml
diff --git a/submarine-commons/commons-runtime/pom.xml b/submarine-commons/commons-runtime/pom.xml
new file mode 100644
index 0000000..3b5f361
--- /dev/null
+++ b/submarine-commons/commons-runtime/pom.xml
@@ -0,0 +1,184 @@
+<?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.
+  -->
+
+<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>submarine-commons</artifactId>
+    <groupId>org.apache.submarine</groupId>
+    <version>0.3.0-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>commons-runtime</artifactId>
+  <version>0.3.0-SNAPSHOT</version>
+  <name>Submarine: Commons Runtime</name>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+      <version>${slf4j.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>commons-collections</groupId>
+      <artifactId>commons-collections</artifactId>
+      <version>${commons-collections.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>com.google.guava</groupId>
+      <artifactId>guava</artifactId>
+      <version>${guava.version}</version>
+      <exclusions>
+        <exclusion>
+          <groupId>com.google.code.findbugs</groupId>
+          <artifactId>jsr305</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-lang3</artifactId>
+      <version>${commons.lang3.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>com.fasterxml.jackson.core</groupId>
+      <artifactId>jackson-core</artifactId>
+    </dependency>
+
+    <!-- Dependencies for Hadoop -->
+    <dependency>
+      <groupId>org.apache.hadoop</groupId>
+      <artifactId>hadoop-common</artifactId>
+      <version>${hadoop.version}</version>
+      <scope>provided</scope>
+      <exclusions>
+        <exclusion>
+          <groupId>org.slf4j</groupId>
+          <artifactId>slf4j-api</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.slf4j</groupId>
+          <artifactId>slf4j-log4j12</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.apache.commons</groupId>
+          <artifactId>commons-lang3</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.apache.httpcomponents</groupId>
+          <artifactId>httpclient</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.apache.httpcomponents</groupId>
+          <artifactId>httpcore</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>commons-lang</groupId>
+          <artifactId>commons-lang</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>commons-collections</groupId>
+          <artifactId>commons-collections</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>commons-logging</groupId>
+          <artifactId>commons-logging</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>com.google.guava</groupId>
+          <artifactId>guava</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>commons-codec</groupId>
+          <artifactId>commons-codec</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.codehaus.jackson</groupId>
+          <artifactId>jackson-core-asl</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.codehaus.jackson</groupId>
+          <artifactId>jackson-mapper-asl</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>com.google.code.findbugs</groupId>
+          <artifactId>jsr305</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.hadoop</groupId>
+      <artifactId>hadoop-yarn-api</artifactId>
+      <version>${hadoop.version}</version>
+      <exclusions>
+        <exclusion>
+          <groupId>com.google.code.findbugs</groupId>
+          <artifactId>jsr305</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.hadoop</groupId>
+      <artifactId>hadoop-yarn-client</artifactId>
+      <version>${hadoop.version}</version>
+      <exclusions>
+        <exclusion>
+          <groupId>org.codehaus.jackson</groupId>
+          <artifactId>jackson-jaxrs</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.codehaus.jackson</groupId>
+          <artifactId>jackson-xc</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.codehaus.jackson</groupId>
+          <artifactId>jackson-mapper-asl</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.codehaus.jackson</groupId>
+          <artifactId>jackson-core-asl</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.slf4j</groupId>
+          <artifactId>slf4j-api</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.slf4j</groupId>
+          <artifactId>slf4j-log4j12</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.apache.commons</groupId>
+          <artifactId>commons-lang3</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>commons-codec</groupId>
+          <artifactId>commons-codec</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>commons-logging</groupId>
+          <artifactId>commons-logging</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+
+  </dependencies>
+</project>
diff --git a/submarine-core/src/main/docker/pytorch/base/ubuntu-16.04/Dockerfile.gpu.pytorch_latest b/submarine-commons/commons-runtime/src/main/docker/pytorch/base/ubuntu-16.04/Dockerfile.gpu.pytorch_latest
similarity index 100%
rename from submarine-core/src/main/docker/pytorch/base/ubuntu-16.04/Dockerfile.gpu.pytorch_latest
rename to submarine-commons/commons-runtime/src/main/docker/pytorch/base/ubuntu-16.04/Dockerfile.gpu.pytorch_latest
diff --git a/submarine-core/src/main/docker/pytorch/build-all.sh b/submarine-commons/commons-runtime/src/main/docker/pytorch/build-all.sh
similarity index 100%
rename from submarine-core/src/main/docker/pytorch/build-all.sh
rename to submarine-commons/commons-runtime/src/main/docker/pytorch/build-all.sh
diff --git a/submarine-core/src/main/docker/pytorch/with-cifar10-models/cifar10_tutorial.py b/submarine-commons/commons-runtime/src/main/docker/pytorch/with-cifar10-models/cifar10_tutorial.py
similarity index 100%
rename from submarine-core/src/main/docker/pytorch/with-cifar10-models/cifar10_tutorial.py
rename to submarine-commons/commons-runtime/src/main/docker/pytorch/with-cifar10-models/cifar10_tutorial.py
diff --git a/submarine-core/src/main/docker/pytorch/with-cifar10-models/ubuntu-16.04/Dockerfile.gpu.pytorch_latest b/submarine-commons/commons-runtime/src/main/docker/pytorch/with-cifar10-models/ubuntu-16.04/Dockerfile.gpu.pytorch_latest
similarity index 100%
rename from submarine-core/src/main/docker/pytorch/with-cifar10-models/ubuntu-16.04/Dockerfile.gpu.pytorch_latest
rename to submarine-commons/commons-runtime/src/main/docker/pytorch/with-cifar10-models/ubuntu-16.04/Dockerfile.gpu.pytorch_latest
diff --git a/submarine-core/src/main/docker/tensorflow/base/ubuntu-16.04/Dockerfile.cpu.tf_1.13.1 b/submarine-commons/commons-runtime/src/main/docker/tensorflow/base/ubuntu-16.04/Dockerfile.cpu.tf_1.13.1
similarity index 100%
rename from submarine-core/src/main/docker/tensorflow/base/ubuntu-16.04/Dockerfile.cpu.tf_1.13.1
rename to submarine-commons/commons-runtime/src/main/docker/tensorflow/base/ubuntu-16.04/Dockerfile.cpu.tf_1.13.1
diff --git a/submarine-core/src/main/docker/tensorflow/base/ubuntu-16.04/Dockerfile.gpu.tf_1.13.1 b/submarine-commons/commons-runtime/src/main/docker/tensorflow/base/ubuntu-16.04/Dockerfile.gpu.tf_1.13.1
similarity index 100%
rename from submarine-core/src/main/docker/tensorflow/base/ubuntu-16.04/Dockerfile.gpu.tf_1.13.1
rename to submarine-commons/commons-runtime/src/main/docker/tensorflow/base/ubuntu-16.04/Dockerfile.gpu.tf_1.13.1
diff --git a/submarine-core/src/main/docker/tensorflow/build-all.sh b/submarine-commons/commons-runtime/src/main/docker/tensorflow/build-all.sh
similarity index 100%
rename from submarine-core/src/main/docker/tensorflow/build-all.sh
rename to submarine-commons/commons-runtime/src/main/docker/tensorflow/build-all.sh
diff --git a/submarine-core/src/main/docker/tensorflow/with-cifar10-models/ubuntu-16.04/Dockerfile.cpu.tf_1.13.1 b/submarine-commons/commons-runtime/src/main/docker/tensorflow/with-cifar10-models/ubuntu-16.04/Dockerfile.cpu.tf_1.13.1
similarity index 100%
rename from submarine-core/src/main/docker/tensorflow/with-cifar10-models/ubuntu-16.04/Dockerfile.cpu.tf_1.13.1
rename to submarine-commons/commons-runtime/src/main/docker/tensorflow/with-cifar10-models/ubuntu-16.04/Dockerfile.cpu.tf_1.13.1
diff --git a/submarine-core/src/main/docker/tensorflow/with-cifar10-models/ubuntu-16.04/Dockerfile.gpu.tf_1.13.1 b/submarine-commons/commons-runtime/src/main/docker/tensorflow/with-cifar10-models/ubuntu-16.04/Dockerfile.gpu.tf_1.13.1
similarity index 100%
rename from submarine-core/src/main/docker/tensorflow/with-cifar10-models/ubuntu-16.04/Dockerfile.gpu.tf_1.13.1
rename to submarine-commons/commons-runtime/src/main/docker/tensorflow/with-cifar10-models/ubuntu-16.04/Dockerfile.gpu.tf_1.13.1
diff --git a/submarine-core/src/main/docker/tensorflow/with-cifar10-models/ubuntu-16.04/cifar10_estimator_tf_1.13.1/README.md b/submarine-commons/commons-runtime/src/main/docker/tensorflow/with-cifar10-models/ubuntu-16.04/cifar10_estimator_tf_1.13.1/README.md
similarity index 100%
rename from submarine-core/src/main/docker/tensorflow/with-cifar10-models/ubuntu-16.04/cifar10_estimator_tf_1.13.1/README.md
rename to submarine-commons/commons-runtime/src/main/docker/tensorflow/with-cifar10-models/ubuntu-16.04/cifar10_estimator_tf_1.13.1/README.md
diff --git a/submarine-core/src/main/docker/tensorflow/with-cifar10-models/ubuntu-16.04/cifar10_estimator_tf_1.13.1/cifar10.py b/submarine-commons/commons-runtime/src/main/docker/tensorflow/with-cifar10-models/ubuntu-16.04/cifar10_estimator_tf_1.13.1/cifar10.py
similarity index 100%
rename from submarine-core/src/main/docker/tensorflow/with-cifar10-models/ubuntu-16.04/cifar10_estimator_tf_1.13.1/cifar10.py
rename to submarine-commons/commons-runtime/src/main/docker/tensorflow/with-cifar10-models/ubuntu-16.04/cifar10_estimator_tf_1.13.1/cifar10.py
diff --git a/submarine-core/src/main/docker/tensorflow/with-cifar10-models/ubuntu-16.04/cifar10_estimator_tf_1.13.1/cifar10_main.py b/submarine-commons/commons-runtime/src/main/docker/tensorflow/with-cifar10-models/ubuntu-16.04/cifar10_estimator_tf_1.13.1/cifar10_main.py
similarity index 100%
rename from submarine-core/src/main/docker/tensorflow/with-cifar10-models/ubuntu-16.04/cifar10_estimator_tf_1.13.1/cifar10_main.py
rename to submarine-commons/commons-runtime/src/main/docker/tensorflow/with-cifar10-models/ubuntu-16.04/cifar10_estimator_tf_1.13.1/cifar10_main.py
diff --git a/submarine-core/src/main/docker/tensorflow/with-cifar10-models/ubuntu-16.04/cifar10_estimator_tf_1.13.1/cifar10_model.py b/submarine-commons/commons-runtime/src/main/docker/tensorflow/with-cifar10-models/ubuntu-16.04/cifar10_estimator_tf_1.13.1/cifar10_model.py
similarity index 100%
rename from submarine-core/src/main/docker/tensorflow/with-cifar10-models/ubuntu-16.04/cifar10_estimator_tf_1.13.1/cifar10_model.py
rename to submarine-commons/commons-runtime/src/main/docker/tensorflow/with-cifar10-models/ubuntu-16.04/cifar10_estimator_tf_1.13.1/cifar10_model.py
diff --git a/submarine-core/src/main/docker/tensorflow/with-cifar10-models/ubuntu-16.04/cifar10_estimator_tf_1.13.1/cifar10_utils.py b/submarine-commons/commons-runtime/src/main/docker/tensorflow/with-cifar10-models/ubuntu-16.04/cifar10_estimator_tf_1.13.1/cifar10_utils.py
similarity index 100%
rename from submarine-core/src/main/docker/tensorflow/with-cifar10-models/ubuntu-16.04/cifar10_estimator_tf_1.13.1/cifar10_utils.py
rename to submarine-commons/commons-runtime/src/main/docker/tensorflow/with-cifar10-models/ubuntu-16.04/cifar10_estimator_tf_1.13.1/cifar10_utils.py
diff --git a/submarine-core/src/main/docker/tensorflow/with-cifar10-models/ubuntu-16.04/cifar10_estimator_tf_1.13.1/generate_cifar10_tfrecords.py b/submarine-commons/commons-runtime/src/main/docker/tensorflow/with-cifar10-models/ubuntu-16.04/cifar10_estimator_tf_1.13.1/generate_cifar10_tfrecords.py
similarity index 100%
rename from submarine-core/src/main/docker/tensorflow/with-cifar10-models/ubuntu-16.04/cifar10_estimator_tf_1.13.1/generate_cifar10_tfrecords.py
rename to submarine-commons/commons-runtime/src/main/docker/tensorflow/with-cifar10-models/ubuntu-16.04/cifar10_estimator_tf_1.13.1/generate_cifar10_tfrecords.py
diff --git a/submarine-core/src/main/docker/tensorflow/with-cifar10-models/ubuntu-16.04/cifar10_estimator_tf_1.13.1/model_base.py b/submarine-commons/commons-runtime/src/main/docker/tensorflow/with-cifar10-models/ubuntu-16.04/cifar10_estimator_tf_1.13.1/model_base.py
similarity index 100%
rename from submarine-core/src/main/docker/tensorflow/with-cifar10-models/ubuntu-16.04/cifar10_estimator_tf_1.13.1/model_base.py
rename to submarine-commons/commons-runtime/src/main/docker/tensorflow/with-cifar10-models/ubuntu-16.04/cifar10_estimator_tf_1.13.1/model_base.py
diff --git a/submarine-core/src/main/docker/tensorflow/zeppelin-notebook-example/Dockerfile.gpu b/submarine-commons/commons-runtime/src/main/docker/tensorflow/zeppelin-notebook-example/Dockerfile.gpu
similarity index 100%
rename from submarine-core/src/main/docker/tensorflow/zeppelin-notebook-example/Dockerfile.gpu
rename to submarine-commons/commons-runtime/src/main/docker/tensorflow/zeppelin-notebook-example/Dockerfile.gpu
diff --git a/submarine-core/src/main/docker/tensorflow/zeppelin-notebook-example/run_container.sh b/submarine-commons/commons-runtime/src/main/docker/tensorflow/zeppelin-notebook-example/run_container.sh
similarity index 100%
rename from submarine-core/src/main/docker/tensorflow/zeppelin-notebook-example/run_container.sh
rename to submarine-commons/commons-runtime/src/main/docker/tensorflow/zeppelin-notebook-example/run_container.sh
diff --git a/submarine-core/src/main/docker/tensorflow/zeppelin-notebook-example/shiro.ini b/submarine-commons/commons-runtime/src/main/docker/tensorflow/zeppelin-notebook-example/shiro.ini
similarity index 100%
rename from submarine-core/src/main/docker/tensorflow/zeppelin-notebook-example/shiro.ini
rename to submarine-commons/commons-runtime/src/main/docker/tensorflow/zeppelin-notebook-example/shiro.ini
diff --git a/submarine-core/src/main/docker/tensorflow/zeppelin-notebook-example/zeppelin-site.xml b/submarine-commons/commons-runtime/src/main/docker/tensorflow/zeppelin-notebook-example/zeppelin-site.xml
similarity index 100%
rename from submarine-core/src/main/docker/tensorflow/zeppelin-notebook-example/zeppelin-site.xml
rename to submarine-commons/commons-runtime/src/main/docker/tensorflow/zeppelin-notebook-example/zeppelin-site.xml
diff --git a/submarine-core/src/main/java/org/apache/submarine/common/ClientContext.java b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/ClientContext.java
similarity index 59%
rename from submarine-core/src/main/java/org/apache/submarine/common/ClientContext.java
rename to submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/ClientContext.java
index 24b0cd4..50f87fa 100644
--- a/submarine-core/src/main/java/org/apache/submarine/common/ClientContext.java
+++ b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/ClientContext.java
@@ -1,26 +1,30 @@
-/**
- * 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
- * <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. See accompanying LICENSE file.
+/*
+ * 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.submarine.common;
+package org.apache.submarine.commons.runtime;
 
+import org.apache.submarine.commons.runtime.conf.SubmarineConfiguration;
+import org.apache.submarine.commons.runtime.fs.DefaultRemoteDirectoryManager;
+import org.apache.submarine.commons.runtime.fs.RemoteDirectoryManager;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.yarn.client.api.YarnClient;
 import org.apache.hadoop.yarn.conf.YarnConfiguration;
-import org.apache.submarine.common.conf.SubmarineConfiguration;
-import org.apache.submarine.common.fs.DefaultRemoteDirectoryManager;
-import org.apache.submarine.common.fs.RemoteDirectoryManager;
-import org.apache.submarine.runtimes.RuntimeFactory;
 
 public class ClientContext {
   private Configuration yarnConf = new YarnConfiguration();
diff --git a/submarine-core/src/main/java/org/apache/submarine/client/cli/runjob/Framework.java b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/Framework.java
similarity index 76%
rename from submarine-core/src/main/java/org/apache/submarine/client/cli/runjob/Framework.java
rename to submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/Framework.java
index d76a404..efe974b 100644
--- a/submarine-core/src/main/java/org/apache/submarine/client/cli/runjob/Framework.java
+++ b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/Framework.java
@@ -6,15 +6,18 @@
  * 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.
+ *
+ *   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.submarine.client.cli.runjob;
+package org.apache.submarine.commons.runtime;
 
 import com.google.common.collect.Lists;
 
diff --git a/submarine-core/src/main/java/org/apache/submarine/runtimes/common/JobMonitor.java b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/JobMonitor.java
similarity index 66%
rename from submarine-core/src/main/java/org/apache/submarine/runtimes/common/JobMonitor.java
rename to submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/JobMonitor.java
index d5ef8cd..ca6bfc6 100644
--- a/submarine-core/src/main/java/org/apache/submarine/runtimes/common/JobMonitor.java
+++ b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/JobMonitor.java
@@ -1,24 +1,28 @@
-/**
- * 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
+/*
+ * 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. See accompanying LICENSE file.
+ * 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.submarine.runtimes.common;
+package org.apache.submarine.commons.runtime;
 
-import org.apache.submarine.common.ClientContext;
-import org.apache.submarine.common.api.JobState;
-import org.apache.submarine.common.api.JobStatus;
+import org.apache.submarine.commons.runtime.api.JobState;
+import org.apache.submarine.commons.runtime.api.JobStatus;
 import org.apache.hadoop.yarn.exceptions.YarnException;
-import org.apache.submarine.common.exception.SubmarineException;
+import org.apache.submarine.commons.runtime.exception.SubmarineException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/JobSubmitter.java b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/JobSubmitter.java
new file mode 100644
index 0000000..db59261
--- /dev/null
+++ b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/JobSubmitter.java
@@ -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.
+ */
+
+package org.apache.submarine.commons.runtime;
+
+import org.apache.hadoop.yarn.api.records.ApplicationId;
+import org.apache.hadoop.yarn.exceptions.YarnException;
+import org.apache.submarine.commons.runtime.param.Parameter;
+
+import java.io.IOException;
+
+/**
+ * Submit job to cluster master.
+ */
+public interface JobSubmitter {
+  /**
+   * Submit a job to cluster.
+   * @param parameters run job parameters
+   * @return applicationId when successfully submitted
+   * @throws YarnException for issues while contacting YARN daemons
+   * @throws IOException for other issues.
+   */
+  ApplicationId submitJob(Parameter parameters)
+      throws IOException, YarnException;
+}
diff --git a/submarine-core/src/main/java/org/apache/submarine/runtimes/RuntimeFactory.java b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/RuntimeFactory.java
similarity index 70%
rename from submarine-core/src/main/java/org/apache/submarine/runtimes/RuntimeFactory.java
rename to submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/RuntimeFactory.java
index ca2d470..f7f1b81 100644
--- a/submarine-core/src/main/java/org/apache/submarine/runtimes/RuntimeFactory.java
+++ b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/RuntimeFactory.java
@@ -1,27 +1,29 @@
-/**
- * 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
+/*
+ * 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. See accompanying LICENSE file.
+ * 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.submarine.runtimes;
+package org.apache.submarine.commons.runtime;
 
 import com.google.common.annotations.VisibleForTesting;
 import org.apache.hadoop.conf.Configuration;
-import org.apache.submarine.common.ClientContext;
-import org.apache.submarine.common.conf.SubmarineConfiguration;
-import org.apache.submarine.common.exception.SubmarineRuntimeException;
-import org.apache.submarine.runtimes.common.JobMonitor;
-import org.apache.submarine.runtimes.common.JobSubmitter;
-import org.apache.submarine.runtimes.common.SubmarineStorage;
+import org.apache.submarine.commons.runtime.conf.SubmarineConfiguration;
+import org.apache.submarine.commons.runtime.exception.SubmarineRuntimeException;
+import org.apache.submarine.commons.runtime.fs.SubmarineStorage;
 
 import java.lang.reflect.InvocationTargetException;
 
@@ -52,8 +54,8 @@ public abstract class RuntimeFactory {
             + " not instance of " + RuntimeFactory.class.getCanonicalName());
       }
     } catch (ClassNotFoundException | IllegalAccessException |
-             InstantiationException | NoSuchMethodException |
-             InvocationTargetException e) {
+        InstantiationException | NoSuchMethodException |
+        InvocationTargetException e) {
       throw new SubmarineRuntimeException(
           "Could not instantiate RuntimeFactory: " + runtimeClass, e);
     }
diff --git a/submarine-core/src/main/java/org/apache/submarine/common/api/JobComponentStatus.java b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/api/JobComponentStatus.java
similarity index 62%
rename from submarine-core/src/main/java/org/apache/submarine/common/api/JobComponentStatus.java
rename to submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/api/JobComponentStatus.java
index 5621582..bed1ca6 100644
--- a/submarine-core/src/main/java/org/apache/submarine/common/api/JobComponentStatus.java
+++ b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/api/JobComponentStatus.java
@@ -1,21 +1,23 @@
 /*
- * 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
+ * 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
+ *   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.
+ * 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.submarine.common.api;
+package org.apache.submarine.commons.runtime.api;
 
 /**
  * Status of component of training job
diff --git a/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/api/JobState.java b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/api/JobState.java
new file mode 100644
index 0000000..4db2e9c
--- /dev/null
+++ b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/api/JobState.java
@@ -0,0 +1,54 @@
+/*
+ * 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.submarine.commons.runtime.api;
+
+/**
+ * State of training job
+ */
+public enum JobState {
+  /**
+   * Job accepted by scheduler and start running
+   */
+  RUNNING,
+
+  /**
+   * Job killed by user
+   */
+  KILLED,
+
+  /**
+   * Job failed
+   */
+  FAILED,
+
+  /**
+   * Job succeeded
+   */
+  SUCCEEDED,
+
+  /**
+   * Job paused by user
+   */
+  PAUSED;
+
+  public static boolean isFinal(JobState state) {
+    return state == KILLED || state == SUCCEEDED || state == FAILED;
+  }
+}
diff --git a/submarine-core/src/main/java/org/apache/submarine/common/api/JobStatus.java b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/api/JobStatus.java
similarity index 66%
rename from submarine-core/src/main/java/org/apache/submarine/common/api/JobStatus.java
rename to submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/api/JobStatus.java
index 9a4d036..46833e1 100644
--- a/submarine-core/src/main/java/org/apache/submarine/common/api/JobStatus.java
+++ b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/api/JobStatus.java
@@ -1,21 +1,23 @@
 /*
- * 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
+ * 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
+ *   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.
+ * 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.submarine.common.api;
+package org.apache.submarine.commons.runtime.api;
 
 import java.io.PrintStream;
 import java.time.LocalDateTime;
diff --git a/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/api/PyTorchRole.java b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/api/PyTorchRole.java
new file mode 100644
index 0000000..72ba8bf
--- /dev/null
+++ b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/api/PyTorchRole.java
@@ -0,0 +1,43 @@
+/*
+ * 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.submarine.commons.runtime.api;
+
+/**
+ * Enum to represent a PyTorch Role.
+ */
+public enum PyTorchRole implements Role {
+  PRIMARY_WORKER("master"),
+  WORKER("worker");
+
+  private String compName;
+
+  PyTorchRole(String compName) {
+    this.compName = compName;
+  }
+
+  public String getComponentName() {
+    return compName;
+  }
+
+  @Override
+  public String getName() {
+    return name();
+  }
+}
diff --git a/submarine-core/src/main/java/org/apache/submarine/common/api/Role.java b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/api/Role.java
similarity index 55%
rename from submarine-core/src/main/java/org/apache/submarine/common/api/Role.java
rename to submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/api/Role.java
index 3764a7e..7db4d32 100644
--- a/submarine-core/src/main/java/org/apache/submarine/common/api/Role.java
+++ b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/api/Role.java
@@ -6,15 +6,18 @@
  * 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.
+ *
+ *   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.submarine.common.api;
+package org.apache.submarine.commons.runtime.api;
 
 /**
  * Interface for a Role.
diff --git a/submarine-core/src/main/java/org/apache/submarine/common/api/Runtime.java b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/api/Runtime.java
similarity index 75%
rename from submarine-core/src/main/java/org/apache/submarine/common/api/Runtime.java
rename to submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/api/Runtime.java
index 3244f33..9229ff9 100644
--- a/submarine-core/src/main/java/org/apache/submarine/common/api/Runtime.java
+++ b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/api/Runtime.java
@@ -6,15 +6,18 @@
  * 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.
+ *
+ *   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.submarine.common.api;
+package org.apache.submarine.commons.runtime.api;
 
 import com.google.common.collect.Lists;
 
diff --git a/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/api/TensorFlowRole.java b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/api/TensorFlowRole.java
new file mode 100644
index 0000000..f8fb081
--- /dev/null
+++ b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/api/TensorFlowRole.java
@@ -0,0 +1,46 @@
+/*
+ * 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.submarine.commons.runtime.api;
+
+/**
+ * Enum to represent a TensorFlow Role.
+ */
+public enum TensorFlowRole implements Role {
+  PRIMARY_WORKER("master"),
+  WORKER("worker"),
+  PS("ps"),
+  TENSORBOARD("tensorboard");
+
+  private String compName;
+
+  TensorFlowRole(String compName) {
+    this.compName = compName;
+  }
+
+  @Override
+  public String getComponentName() {
+    return compName;
+  }
+
+  @Override
+  public String getName() {
+    return name();
+  }
+}
diff --git a/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/conf/Envs.java b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/conf/Envs.java
new file mode 100644
index 0000000..41eb79b
--- /dev/null
+++ b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/conf/Envs.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.submarine.commons.runtime.conf;
+
+public class Envs {
+  public static final String TASK_TYPE_ENV = "_TASK_TYPE";
+  public static final String TASK_INDEX_ENV = "_TASK_INDEX";
+
+  /*
+   * HDFS/HADOOP-related configs
+   */
+  public static final String HADOOP_HDFS_HOME = "HADOOP_HDFS_HOME";
+  public static final String JAVA_HOME = "JAVA_HOME";
+  public static final String HADOOP_CONF_DIR = "HADOOP_CONF_DIR";
+}
diff --git a/submarine-core/src/main/java/org/apache/submarine/common/conf/SubmarineConfiguration.java b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/conf/SubmarineConfiguration.java
similarity index 67%
rename from submarine-core/src/main/java/org/apache/submarine/common/conf/SubmarineConfiguration.java
rename to submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/conf/SubmarineConfiguration.java
index b455138..9daefd6 100644
--- a/submarine-core/src/main/java/org/apache/submarine/common/conf/SubmarineConfiguration.java
+++ b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/conf/SubmarineConfiguration.java
@@ -1,18 +1,23 @@
-/**
- * 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
+/*
+ * 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. See accompanying LICENSE file.
+ * 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.submarine.common.conf;
+package org.apache.submarine.commons.runtime.conf;
 
 import org.apache.hadoop.conf.Configuration;
 
@@ -52,10 +57,6 @@ public class SubmarineConfiguration extends Configuration {
     }
   }
 
-  /*
-   * Runtime of submarine
-   */
-
   private static final String PREFIX = "submarine.";
 
   public static final String RUNTIME_CLASS = PREFIX + "runtime.class";
diff --git a/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/conf/SubmarineLogs.java b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/conf/SubmarineLogs.java
new file mode 100644
index 0000000..7fa2998
--- /dev/null
+++ b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/conf/SubmarineLogs.java
@@ -0,0 +1,36 @@
+/*
+ * 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.submarine.commons.runtime.conf;
+
+public class SubmarineLogs {
+  private static volatile boolean verbose = false;
+
+  public static boolean isVerbose() {
+    return SubmarineLogs.verbose;
+  }
+
+  public static void verboseOn() {
+    SubmarineLogs.verbose = true;
+  }
+
+  public static void verboseOff() {
+    SubmarineLogs.verbose = false;
+  }
+}
diff --git a/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/exception/SubmarineException.java b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/exception/SubmarineException.java
new file mode 100644
index 0000000..b7fe356
--- /dev/null
+++ b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/exception/SubmarineException.java
@@ -0,0 +1,26 @@
+/*
+ * 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.submarine.commons.runtime.exception;
+
+public class SubmarineException extends Exception {
+  public SubmarineException(String msg) {
+    super(msg);
+  }
+}
diff --git a/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/exception/SubmarineRuntimeException.java b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/exception/SubmarineRuntimeException.java
new file mode 100644
index 0000000..15eb509
--- /dev/null
+++ b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/exception/SubmarineRuntimeException.java
@@ -0,0 +1,30 @@
+/*
+ * 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.submarine.commons.runtime.exception;
+
+public class SubmarineRuntimeException extends RuntimeException {
+  public SubmarineRuntimeException(String s) {
+    super(s);
+  }
+
+  public SubmarineRuntimeException(String message, Throwable cause) {
+    super(message, cause);
+  }
+}
diff --git a/submarine-core/src/main/java/org/apache/submarine/common/fs/DefaultRemoteDirectoryManager.java b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/fs/DefaultRemoteDirectoryManager.java
similarity index 82%
rename from submarine-core/src/main/java/org/apache/submarine/common/fs/DefaultRemoteDirectoryManager.java
rename to submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/fs/DefaultRemoteDirectoryManager.java
index bc200c8..52e9fab 100644
--- a/submarine-core/src/main/java/org/apache/submarine/common/fs/DefaultRemoteDirectoryManager.java
+++ b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/fs/DefaultRemoteDirectoryManager.java
@@ -1,26 +1,30 @@
-/**
- * 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
+/*
+ * 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. See accompanying LICENSE file.
+ * 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.submarine.common.fs;
+package org.apache.submarine.commons.runtime.fs;
 
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileStatus;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.FileUtil;
 import org.apache.hadoop.fs.Path;
-import org.apache.submarine.client.cli.CliConstants;
-import org.apache.submarine.common.ClientContext;
+import org.apache.submarine.commons.runtime.ClientContext;
 
 import java.io.File;
 import java.io.IOException;
@@ -60,7 +64,7 @@ public class DefaultRemoteDirectoryManager implements RemoteDirectoryManager {
   public Path getJobCheckpointDir(String jobName, boolean create)
       throws IOException {
     Path jobDir = new Path(getJobStagingArea(jobName, create),
-        CliConstants.CHECKPOINT_PATH);
+        "checkpoint_path");
     if (create) {
       createFolderIfNotExist(jobDir);
     }
diff --git a/submarine-core/src/main/java/org/apache/submarine/runtimes/common/FSBasedSubmarineStorageImpl.java b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/fs/FSBasedSubmarineStorageImpl.java
similarity index 74%
rename from submarine-core/src/main/java/org/apache/submarine/runtimes/common/FSBasedSubmarineStorageImpl.java
rename to submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/fs/FSBasedSubmarineStorageImpl.java
index 2aabfbe..befb8c9 100644
--- a/submarine-core/src/main/java/org/apache/submarine/runtimes/common/FSBasedSubmarineStorageImpl.java
+++ b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/fs/FSBasedSubmarineStorageImpl.java
@@ -1,25 +1,28 @@
-/**
- * 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
- * <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. See accompanying LICENSE file.
+/*
+ * 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.submarine.runtimes.common;
+package org.apache.submarine.commons.runtime.fs;
 
 import org.apache.hadoop.fs.FSDataInputStream;
 import org.apache.hadoop.fs.FSDataOutputStream;
 import org.apache.hadoop.fs.Path;
-import org.apache.submarine.common.ClientContext;
-import org.apache.submarine.common.fs.RemoteDirectoryManager;
+import org.apache.submarine.commons.runtime.ClientContext;
 
 import java.io.IOException;
 import java.io.ObjectInput;
diff --git a/submarine-core/src/test/java/org/apache/submarine/runtimes/common/MemorySubmarineStorage.java b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/fs/MemorySubmarineStorage.java
similarity index 75%
rename from submarine-core/src/test/java/org/apache/submarine/runtimes/common/MemorySubmarineStorage.java
rename to submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/fs/MemorySubmarineStorage.java
index a72bb02..73ef557 100644
--- a/submarine-core/src/test/java/org/apache/submarine/runtimes/common/MemorySubmarineStorage.java
+++ b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/fs/MemorySubmarineStorage.java
@@ -1,4 +1,4 @@
-/**
+/*
  * 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
@@ -6,17 +6,18 @@
  * 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.
+ *
+ *   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.submarine.runtimes.common;
+package org.apache.submarine.commons.runtime.fs;
 
 import java.io.IOException;
 import java.util.HashMap;
@@ -45,7 +46,7 @@ public class MemorySubmarineStorage extends SubmarineStorage {
 
   @Override
   public synchronized void addNewModel(String modelName, String version,
-                                       Map<String, String> modelInfo) throws IOException {
+      Map<String, String> modelInfo) throws IOException {
     if (!modelsInfo.containsKey(modelName)) {
       modelsInfo.put(modelName, new HashMap<>());
     }
@@ -54,7 +55,7 @@ public class MemorySubmarineStorage extends SubmarineStorage {
 
   @Override
   public synchronized Map<String, String> getModelInfoByName(String modelName,
-                                                             String version) throws IOException {
+      String version) throws IOException {
 
     boolean notFound = false;
     Map<String, String> info = null;
diff --git a/submarine-core/src/main/java/org/apache/submarine/common/fs/RemoteDirectoryManager.java b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/fs/RemoteDirectoryManager.java
similarity index 53%
rename from submarine-core/src/main/java/org/apache/submarine/common/fs/RemoteDirectoryManager.java
rename to submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/fs/RemoteDirectoryManager.java
index 70d5340..b5baa81 100644
--- a/submarine-core/src/main/java/org/apache/submarine/common/fs/RemoteDirectoryManager.java
+++ b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/fs/RemoteDirectoryManager.java
@@ -1,18 +1,23 @@
-/**
- * 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
- * <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. See accompanying LICENSE file.
+/*
+ * 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.submarine.common.fs;
+package org.apache.submarine.commons.runtime.fs;
 
 import org.apache.hadoop.fs.FileStatus;
 import org.apache.hadoop.fs.FileSystem;
diff --git a/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/fs/StorageKeyConstants.java b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/fs/StorageKeyConstants.java
new file mode 100644
index 0000000..3c04cc7
--- /dev/null
+++ b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/fs/StorageKeyConstants.java
@@ -0,0 +1,29 @@
+/*
+ * 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.submarine.commons.runtime.fs;
+
+public class StorageKeyConstants {
+  public static final String JOB_NAME = "JOB_NAME";
+  public static final String JOB_RUN_ARGS = "JOB_RUN_ARGS";
+  public static final String APPLICATION_ID = "APPLICATION_ID";
+  public static final String CHECKPOINT_PATH = "CHECKPOINT_PATH";
+  public static final String INPUT_PATH = "INPUT_PATH";
+  public static final String SAVED_MODEL_PATH = "SAVED_MODEL_PATH";
+}
diff --git a/submarine-core/src/main/java/org/apache/submarine/runtimes/common/SubmarineStorage.java b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/fs/SubmarineStorage.java
similarity index 58%
rename from submarine-core/src/main/java/org/apache/submarine/runtimes/common/SubmarineStorage.java
rename to submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/fs/SubmarineStorage.java
index a09a73a..6738c27 100644
--- a/submarine-core/src/main/java/org/apache/submarine/runtimes/common/SubmarineStorage.java
+++ b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/fs/SubmarineStorage.java
@@ -1,18 +1,23 @@
-/**
- * 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
- * <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. See accompanying LICENSE file.
+/*
+ * 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.submarine.runtimes.common;
+package org.apache.submarine.commons.runtime.fs;
 
 import java.io.IOException;
 import java.util.Map;
diff --git a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/BaseParameters.java b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/param/BaseParameters.java
similarity index 50%
rename from submarine-core/src/main/java/org/apache/submarine/client/cli/param/BaseParameters.java
rename to submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/param/BaseParameters.java
index 82cba30..85c565e 100644
--- a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/BaseParameters.java
+++ b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/param/BaseParameters.java
@@ -1,3 +1,22 @@
+/*
+ * 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.
+ */
+
 /**
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -12,13 +31,12 @@
  * limitations under the License. See accompanying LICENSE file.
  */
 
-package org.apache.submarine.client.cli.param;
+package org.apache.submarine.commons.runtime.param;
 
+import org.apache.submarine.commons.runtime.ClientContext;
+import org.apache.submarine.commons.runtime.conf.SubmarineLogs;
 import org.apache.commons.cli.ParseException;
 import org.apache.hadoop.yarn.exceptions.YarnException;
-import org.apache.submarine.client.cli.CliConstants;
-import org.apache.submarine.common.ClientContext;
-import org.apache.submarine.common.conf.SubmarineLogs;
 
 import java.io.IOException;
 
@@ -28,15 +46,14 @@ import java.io.IOException;
 public abstract class BaseParameters {
   private String name;
 
-  public void updateParameters(ParametersHolder parametersHolder,
-      ClientContext clientContext)
+  public void updateParameters(Parameter parameter, ClientContext clientContext)
       throws ParseException, IOException, YarnException {
-    String name = parametersHolder.getOptionValue(CliConstants.NAME);
+    String name = parameter.getOptionValue("name");
     if (name == null) {
       throw new ParseException("--name is absent");
     }
 
-    if (parametersHolder.hasOption(CliConstants.VERBOSE)) {
+    if (parameter.hasOption("verbose")) {
       SubmarineLogs.verboseOn();
     }
 
diff --git a/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/param/Parameter.java b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/param/Parameter.java
new file mode 100644
index 0000000..f52b0e6
--- /dev/null
+++ b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/param/Parameter.java
@@ -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.
+ */
+
+package org.apache.submarine.commons.runtime.param;
+
+import org.apache.hadoop.yarn.exceptions.YarnException;
+import org.apache.submarine.commons.runtime.Framework;
+
+import java.util.List;
+
+public interface Parameter {
+  /**
+   * Get the ML framework
+   * @return Framework
+   */
+  Framework getFramework();
+
+  BaseParameters getParameters();
+
+  String getOptionValue(String option) throws YarnException;
+
+  boolean hasOption(String option);
+
+  List<String> getOptionValues(String option) throws YarnException;
+}
diff --git a/submarine-core/src/main/java/org/apache/submarine/common/resource/ResourceUtils.java b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/resource/ResourceUtils.java
similarity index 92%
rename from submarine-core/src/main/java/org/apache/submarine/common/resource/ResourceUtils.java
rename to submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/resource/ResourceUtils.java
index 2d659a5..aa88e26 100644
--- a/submarine-core/src/main/java/org/apache/submarine/common/resource/ResourceUtils.java
+++ b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/resource/ResourceUtils.java
@@ -1,22 +1,27 @@
-/**
- * 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
- * <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. See accompanying LICENSE file.
+/*
+ * 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.submarine.common.resource;
+package org.apache.submarine.commons.runtime.resource;
 
+import org.apache.submarine.commons.runtime.exception.SubmarineRuntimeException;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.yarn.api.records.Resource;
-import org.apache.submarine.common.exception.SubmarineRuntimeException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/submarine-core/src/main/java/org/apache/submarine/common/resource/UnitsConversionUtil.java b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/resource/UnitsConversionUtil.java
similarity index 92%
rename from submarine-core/src/main/java/org/apache/submarine/common/resource/UnitsConversionUtil.java
rename to submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/resource/UnitsConversionUtil.java
index 8fe0add..96427fe 100644
--- a/submarine-core/src/main/java/org/apache/submarine/common/resource/UnitsConversionUtil.java
+++ b/submarine-commons/commons-runtime/src/main/java/org/apache/submarine/commons/runtime/resource/UnitsConversionUtil.java
@@ -1,4 +1,4 @@
-/**
+/*
  * 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
@@ -6,17 +6,18 @@
  * 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.
+ *
+ *   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.submarine.common.resource;
+package org.apache.submarine.commons.runtime.resource;
 
 import java.util.Arrays;
 import java.util.HashSet;
diff --git a/submarine-core/src/test/java/org/apache/submarine/common/MockClientContext.java b/submarine-commons/commons-runtime/src/test/java/org/apache/submarine/commons/runtime/MockClientContext.java
similarity index 57%
rename from submarine-core/src/test/java/org/apache/submarine/common/MockClientContext.java
rename to submarine-commons/commons-runtime/src/test/java/org/apache/submarine/commons/runtime/MockClientContext.java
index 2330792..5f7aa16 100644
--- a/submarine-core/src/test/java/org/apache/submarine/common/MockClientContext.java
+++ b/submarine-commons/commons-runtime/src/test/java/org/apache/submarine/commons/runtime/MockClientContext.java
@@ -1,4 +1,4 @@
-/**
+/*
  * 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
@@ -7,19 +7,21 @@
  * "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
+ *   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.
+ * 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.submarine.common;
+package org.apache.submarine.commons.runtime;
 
-import org.apache.submarine.common.fs.MockRemoteDirectoryManager;
-import org.apache.submarine.common.fs.RemoteDirectoryManager;
+import org.apache.submarine.commons.runtime.ClientContext;
+import org.apache.submarine.commons.runtime.fs.MockRemoteDirectoryManager;
+import org.apache.submarine.commons.runtime.fs.RemoteDirectoryManager;
 
 public class MockClientContext extends ClientContext {
 
diff --git a/submarine-core/src/test/java/org/apache/submarine/common/fs/MockRemoteDirectoryManager.java b/submarine-commons/commons-runtime/src/test/java/org/apache/submarine/commons/runtime/fs/MockRemoteDirectoryManager.java
similarity index 92%
rename from submarine-core/src/test/java/org/apache/submarine/common/fs/MockRemoteDirectoryManager.java
rename to submarine-commons/commons-runtime/src/test/java/org/apache/submarine/commons/runtime/fs/MockRemoteDirectoryManager.java
index aa1b340..00bfc02 100644
--- a/submarine-core/src/test/java/org/apache/submarine/common/fs/MockRemoteDirectoryManager.java
+++ b/submarine-commons/commons-runtime/src/test/java/org/apache/submarine/commons/runtime/fs/MockRemoteDirectoryManager.java
@@ -1,4 +1,4 @@
-/**
+/*
  * 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
@@ -7,16 +7,17 @@
  * "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
+ *   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.
+ * 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.submarine.common.fs;
+package org.apache.submarine.commons.runtime.fs;
 
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileStatus;
diff --git a/submarine-commons/pom.xml b/submarine-commons/pom.xml
new file mode 100644
index 0000000..f94455d
--- /dev/null
+++ b/submarine-commons/pom.xml
@@ -0,0 +1,40 @@
+<?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.
+  -->
+
+<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>submarine</artifactId>
+    <groupId>org.apache.submarine</groupId>
+    <version>0.3.0-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>submarine-commons</artifactId>
+  <version>0.3.0-SNAPSHOT</version>
+  <packaging>pom</packaging>
+  <name>Submarine: Commons</name>
+
+  <modules>
+    <module>commons-runtime</module>
+  </modules>
+
+</project>
diff --git a/submarine-core/README.md b/submarine-core/README.md
deleted file mode 100644
index 0d089cb..0000000
--- a/submarine-core/README.md
+++ /dev/null
@@ -1,51 +0,0 @@
-<!---
-  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.
--->
-
-# Overview
-
-```$xslt
-              _                              _
-             | |                            (_)
-  ___  _   _ | |__   _ __ ___    __ _  _ __  _  _ __    ___
- / __|| | | || '_ \ | '_ ` _ \  / _` || '__|| || '_ \  / _ \
- \__ \| |_| || |_) || | | | | || (_| || |   | || | | ||  __/
- |___/ \__,_||_.__/ |_| |_| |_| \__,_||_|   |_||_| |_| \___|
-
-                             ?
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~|^"~~~~~~~~~~~~~~~~~~~~~~~~~o~~~~~~~~~~~
-        o                   |                  o      __o
-         o                  |                 o     |X__>
-       ___o                 |                __o
-     (X___>--             __|__            |X__>     o
-                         |     \                   __o
-                         |      \                |X__>
-  _______________________|_______\________________
- <                                                \____________   _
-  \                                                            \ (_)
-   \    O       O       O                                       >=)
-    \__________________________________________________________/ (_)
-```
-
-Submarine is a project which allows infra engineer / data scientist to run
-*unmodified* Tensorflow or PyTorch programs on YARN or Kubernetes.
-
-Goals of Submarine:
-- It allows jobs easy access data/models in HDFS and other storages.
-- Can launch services to serve Tensorflow/PyTorch models.
-- Support run distributed Tensorflow jobs with simple configs.
-- Support run user-specified Docker images.
-- Support specify GPU and other resources.
-- Support launch tensorboard for training jobs if user specified.
-- Support customized DNS name for roles (like tensorboard.$user.$domain:6006)
-
diff --git a/submarine-core/pom.xml b/submarine-core/pom.xml
deleted file mode 100644
index 7595c3f..0000000
--- a/submarine-core/pom.xml
+++ /dev/null
@@ -1,289 +0,0 @@
-<?xml version="1.0"?>
-<!--
-  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
-                      https://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.apache.submarine</groupId>
-    <artifactId>submarine</artifactId>
-    <version>0.3.0-SNAPSHOT</version>
-    <relativePath>..</relativePath>
-  </parent>
-  <artifactId>submarine-core</artifactId>
-  <version>0.3.0-SNAPSHOT</version>
-  <name>Submarine: Core</name>
-
-  <properties>
-    <!-- Needed for generating FindBugs warnings using parent pom -->
-    <!--yarn.basedir>${project.parent.parent.basedir}</yarn.basedir-->
-  </properties>
-
-  <dependencies>
-
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <version>${junit.version}</version>
-      <scope>test</scope>
-    </dependency>
-
-    <dependency>
-      <groupId>commons-logging</groupId>
-      <artifactId>commons-logging</artifactId>
-      <version>${commons.logging.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>commons-cli</groupId>
-      <artifactId>commons-cli</artifactId>
-      <version>${commons.cli.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>commons-io</groupId>
-      <artifactId>commons-io</artifactId>
-      <version>${commons.io.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.yaml</groupId>
-      <artifactId>snakeyaml</artifactId>
-      <version>${snakeyaml.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-lang3</artifactId>
-      <version>${commons.lang3.version}</version>
-    </dependency>
-
-    <!-- Dependencies for Hadoop commons -->
-    <dependency>
-      <groupId>org.apache.hadoop</groupId>
-      <artifactId>hadoop-common</artifactId>
-      <version>${hadoop.version}</version>
-      <scope>provided</scope>
-      <exclusions>
-        <exclusion>
-          <groupId>org.slf4j</groupId>
-          <artifactId>slf4j-api</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>org.slf4j</groupId>
-          <artifactId>slf4j-log4j12</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>org.apache.commons</groupId>
-          <artifactId>commons-lang3</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>org.apache.httpcomponents</groupId>
-          <artifactId>httpclient</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>org.apache.httpcomponents</groupId>
-          <artifactId>httpcore</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>commons-lang</groupId>
-          <artifactId>commons-lang</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>commons-collections</groupId>
-          <artifactId>commons-collections</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>commons-logging</groupId>
-          <artifactId>commons-logging</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>com.google.guava</groupId>
-          <artifactId>guava</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>commons-codec</groupId>
-          <artifactId>commons-codec</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>org.codehaus.jackson</groupId>
-          <artifactId>jackson-core-asl</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>org.codehaus.jackson</groupId>
-          <artifactId>jackson-mapper-asl</artifactId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-    <dependency>
-      <groupId>com.fasterxml.jackson.core</groupId>
-      <artifactId>jackson-core</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-collections</groupId>
-      <artifactId>commons-collections</artifactId>
-      <version>${commons-collections.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.hadoop</groupId>
-      <artifactId>hadoop-yarn-api</artifactId>
-      <version>${hadoop.version}</version>
-      <exclusions>
-        <exclusion>
-          <groupId>com.google.code.findbugs</groupId>
-          <artifactId>jsr305</artifactId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-
-    <dependency>
-      <groupId>org.apache.hadoop</groupId>
-      <artifactId>hadoop-yarn-common</artifactId>
-      <version>${hadoop.version}</version>
-      <exclusions>
-        <exclusion>
-          <groupId>org.codehaus.jackson</groupId>
-          <artifactId>jackson-core-asl</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>org.apache.httpcomponents</groupId>
-          <artifactId>httpclient</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>org.codehaus.jackson</groupId>
-          <artifactId>jackson-jaxrs</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>org.codehaus.jackson</groupId>
-          <artifactId>jackson-xc</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>org.codehaus.jackson</groupId>
-          <artifactId>jackson-mapper-asl</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>org.slf4j</groupId>
-          <artifactId>slf4j-api</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>org.slf4j</groupId>
-          <artifactId>slf4j-log4j12</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>org.tukaani</groupId>
-          <artifactId>xz</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>org.codehaus.jackson</groupId>
-          <artifactId>jackson-mapper-asl</artifactId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-
-    <dependency>
-      <groupId>org.apache.hadoop</groupId>
-      <artifactId>hadoop-yarn-client</artifactId>
-      <version>${hadoop.version}</version>
-    </dependency>
-
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-core</artifactId>
-      <version>${mockito.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.hadoop</groupId>
-      <artifactId>hadoop-yarn-common</artifactId>
-      <version>${hadoop.version}</version>
-      <type>test-jar</type>
-      <scope>test</scope>
-      <exclusions>
-        <exclusion>
-          <groupId>org.slf4j</groupId>
-          <artifactId>slf4j-api</artifactId>
-        </exclusion>
-        <exclusion>
-          <groupId>org.slf4j</groupId>
-          <artifactId>slf4j-log4j12</artifactId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-api</artifactId>
-      <version>${slf4j.version}</version>
-      <scope>compile</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <artifactId>maven-jar-plugin</artifactId>
-        <version>${plugin.jar.version}</version>
-        <executions>
-          <execution>
-            <goals>
-              <goal>jar</goal>
-            </goals>
-            <!-- strictly speaking, the unit test is really a regression test. It
-                 needs the main jar to be available to be able to run. -->
-            <phase>test-compile</phase>
-          </execution>
-        </executions>
-        <configuration>
-           <archive>
-             <manifest>
-               <mainClass>org.apache.submarine.client.cli.Cli</mainClass>
-             </manifest>
-           </archive>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <environmentVariables>
-            <JAVA_HOME>${java.home}</JAVA_HOME>
-          </environmentVariables>
-       </configuration>
-      </plugin>
-
-      <plugin>
-        <artifactId>maven-jar-plugin</artifactId>
-        <executions>
-          <execution>
-            <goals>
-              <goal>test-jar</goal>
-            </goals>
-            <phase>test-compile</phase>
-          </execution>
-        </executions>
-      </plugin>
-
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-checkstyle-plugin</artifactId>
-        <configuration>
-          <skip>false</skip>
-        </configuration>
-      </plugin>
-
-      <plugin>
-        <artifactId>maven-enforcer-plugin</artifactId>
-      </plugin>
-    </plugins>
-  </build>
-
-
-</project>
diff --git a/submarine-core/src/main/java/org/apache/submarine/client/cli/AbstractCli.java b/submarine-core/src/main/java/org/apache/submarine/client/cli/AbstractCli.java
deleted file mode 100644
index f314e29..0000000
--- a/submarine-core/src/main/java/org/apache/submarine/client/cli/AbstractCli.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * 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.
- */
-
-package org.apache.submarine.client.cli;
-
-import org.apache.commons.cli.ParseException;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.util.Tool;
-import org.apache.submarine.common.ClientContext;
-import org.apache.hadoop.yarn.exceptions.YarnException;
-import org.apache.submarine.common.exception.SubmarineException;
-
-import java.io.IOException;
-
-public abstract class AbstractCli implements Tool {
-  protected ClientContext clientContext;
-
-  public AbstractCli(ClientContext cliContext) {
-    this.clientContext = cliContext;
-  }
-
-  @Override
-  public abstract int run(String[] args)
-      throws ParseException, IOException, YarnException, InterruptedException,
-      SubmarineException;
-
-  @Override
-  public void setConf(Configuration conf) {
-    clientContext.setSubmarineConfig(conf);
-  }
-
-  @Override
-  public Configuration getConf() {
-    return clientContext.getSubmarineConfig();
-  }
-}
diff --git a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/ShowJobParameters.java b/submarine-core/src/main/java/org/apache/submarine/client/cli/param/ShowJobParameters.java
deleted file mode 100644
index da9dc07..0000000
--- a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/ShowJobParameters.java
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * 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.
- */
-
-package org.apache.submarine.client.cli.param;
-
-public class ShowJobParameters extends BaseParameters {
-}
diff --git a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/package-info.java b/submarine-core/src/main/java/org/apache/submarine/client/cli/param/package-info.java
deleted file mode 100644
index e76de7c..0000000
--- a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/package-info.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/**
- * 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.submarine.client.cli.param;
diff --git a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/runjob/package-info.java b/submarine-core/src/main/java/org/apache/submarine/client/cli/param/runjob/package-info.java
deleted file mode 100644
index 20e1de8..0000000
--- a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/runjob/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * 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.
- */
-/**
- * This package contains classes that hold run job parameters for
- * TensorFlow / PyTorch jobs.
- */
-package org.apache.submarine.client.cli.param.runjob;
diff --git a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/yaml/package-info.java b/submarine-core/src/main/java/org/apache/submarine/client/cli/param/yaml/package-info.java
deleted file mode 100644
index cd411c3..0000000
--- a/submarine-core/src/main/java/org/apache/submarine/client/cli/param/yaml/package-info.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * 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.
- */
-/**
- * This package contains value classes for the YAML parser.
- */
-package org.apache.submarine.client.cli.param.yaml;
diff --git a/submarine-core/src/main/java/org/apache/submarine/client/cli/runjob/package-info.java b/submarine-core/src/main/java/org/apache/submarine/client/cli/runjob/package-info.java
deleted file mode 100644
index 69d7bc0..0000000
--- a/submarine-core/src/main/java/org/apache/submarine/client/cli/runjob/package-info.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * 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.
- */
-/**
- * This package contains classes that are related to the run job command.
- */
-package org.apache.submarine.client.cli.runjob;
diff --git a/submarine-core/src/main/java/org/apache/submarine/common/Envs.java b/submarine-core/src/main/java/org/apache/submarine/common/Envs.java
deleted file mode 100644
index d115eff..0000000
--- a/submarine-core/src/main/java/org/apache/submarine/common/Envs.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * 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.
- */
-
-package org.apache.submarine.common;
-
-public class Envs {
-  public static final String TASK_TYPE_ENV = "_TASK_TYPE";
-  public static final String TASK_INDEX_ENV = "_TASK_INDEX";
-
-  /*
-   * HDFS/HADOOP-related configs
-   */
-  public static final String HADOOP_HDFS_HOME = "HADOOP_HDFS_HOME";
-  public static final String JAVA_HOME = "JAVA_HOME";
-  public static final String HADOOP_CONF_DIR = "HADOOP_CONF_DIR";
-}
diff --git a/submarine-core/src/main/java/org/apache/submarine/common/api/JobState.java b/submarine-core/src/main/java/org/apache/submarine/common/api/JobState.java
deleted file mode 100644
index ec3ff80..0000000
--- a/submarine-core/src/main/java/org/apache/submarine/common/api/JobState.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * 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.submarine.common.api;
-
-/**
- * State of training job
- */
-public enum JobState {
-  /**
-   * Job accepted by scheduler and start running
-   */
-  RUNNING,
-
-  /**
-   * Job killed by user
-   */
-  KILLED,
-
-  /**
-   * Job failed
-   */
-  FAILED,
-
-  /**
-   * Job succeeded
-   */
-  SUCCEEDED,
-
-  /**
-   * Job paused by user
-   */
-  PAUSED;
-
-  public static boolean isFinal(JobState state) {
-    return state == KILLED || state == SUCCEEDED || state == FAILED;
-  }
-}
diff --git a/submarine-core/src/main/java/org/apache/submarine/common/api/PyTorchRole.java b/submarine-core/src/main/java/org/apache/submarine/common/api/PyTorchRole.java
deleted file mode 100644
index b1ccc2d..0000000
--- a/submarine-core/src/main/java/org/apache/submarine/common/api/PyTorchRole.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * 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.
- */
-
-/**
- * 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.
- */
-
-package org.apache.submarine.common.api;
-
-/**
- * Enum to represent a PyTorch Role.
- */
-public enum PyTorchRole implements Role {
-  PRIMARY_WORKER("master"),
-  WORKER("worker");
-
-  private String compName;
-
-  PyTorchRole(String compName) {
-    this.compName = compName;
-  }
-
-  public String getComponentName() {
-    return compName;
-  }
-
-  @Override
-  public String getName() {
-    return name();
-  }
-}
diff --git a/submarine-core/src/main/java/org/apache/submarine/common/api/TensorFlowRole.java b/submarine-core/src/main/java/org/apache/submarine/common/api/TensorFlowRole.java
deleted file mode 100644
index cccb609..0000000
--- a/submarine-core/src/main/java/org/apache/submarine/common/api/TensorFlowRole.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * 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.
- */
-
-package org.apache.submarine.common.api;
-
-/**
- * Enum to represent a TensorFlow Role.
- */
-public enum TensorFlowRole implements Role {
-  PRIMARY_WORKER("master"),
-  WORKER("worker"),
-  PS("ps"),
-  TENSORBOARD("tensorboard");
-
-  private String compName;
-
-  TensorFlowRole(String compName) {
-    this.compName = compName;
-  }
-
-  @Override
-  public String getComponentName() {
-    return compName;
-  }
-
-  @Override
-  public String getName() {
-    return name();
-  }
-}
diff --git a/submarine-core/src/main/java/org/apache/submarine/common/conf/SubmarineLogs.java b/submarine-core/src/main/java/org/apache/submarine/common/conf/SubmarineLogs.java
deleted file mode 100644
index ef3b53f..0000000
--- a/submarine-core/src/main/java/org/apache/submarine/common/conf/SubmarineLogs.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * 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.
- */
-
-package org.apache.submarine.common.conf;
-
-public class SubmarineLogs {
-  private static volatile boolean verbose = false;
-
-  public static boolean isVerbose() {
-    return SubmarineLogs.verbose;
-  }
-
-  public static void verboseOn() {
-    SubmarineLogs.verbose = true;
-  }
-
-  public static void verboseOff() {
-    SubmarineLogs.verbose = false;
-  }
-}
diff --git a/submarine-core/src/main/java/org/apache/submarine/common/exception/SubmarineException.java b/submarine-core/src/main/java/org/apache/submarine/common/exception/SubmarineException.java
deleted file mode 100644
index e39937f..0000000
--- a/submarine-core/src/main/java/org/apache/submarine/common/exception/SubmarineException.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/**
- * 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.
- */
-
-package org.apache.submarine.common.exception;
-
-public class SubmarineException extends Exception {
-  public SubmarineException(String msg) {
-    super(msg);
-  }
-}
diff --git a/submarine-core/src/main/java/org/apache/submarine/common/exception/SubmarineRuntimeException.java b/submarine-core/src/main/java/org/apache/submarine/common/exception/SubmarineRuntimeException.java
deleted file mode 100644
index 2baaca9..0000000
--- a/submarine-core/src/main/java/org/apache/submarine/common/exception/SubmarineRuntimeException.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/**
- * 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
- * <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. See accompanying LICENSE file.
- */
-
-package org.apache.submarine.common.exception;
-
-public class SubmarineRuntimeException extends RuntimeException {
-  public SubmarineRuntimeException(String s) {
-    super(s);
-  }
-
-  public SubmarineRuntimeException(String message, Throwable cause) {
-    super(message, cause);
-  }
-}
diff --git a/submarine-core/src/main/java/org/apache/submarine/common/resource/package-info.java b/submarine-core/src/main/java/org/apache/submarine/common/resource/package-info.java
deleted file mode 100644
index 9dc8036..0000000
--- a/submarine-core/src/main/java/org/apache/submarine/common/resource/package-info.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * 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.
- */
-/**
- * This package contains resource utility classes.
- */
-package org.apache.submarine.common.resource;
diff --git a/submarine-core/src/main/java/org/apache/submarine/runtimes/common/JobSubmitter.java b/submarine-core/src/main/java/org/apache/submarine/runtimes/common/JobSubmitter.java
deleted file mode 100644
index 020fd79..0000000
--- a/submarine-core/src/main/java/org/apache/submarine/runtimes/common/JobSubmitter.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * 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.
- */
-
-package org.apache.submarine.runtimes.common;
-
-import org.apache.hadoop.yarn.api.records.ApplicationId;
-import org.apache.hadoop.yarn.exceptions.YarnException;
-import org.apache.submarine.client.cli.param.ParametersHolder;
-
-import java.io.IOException;
-
-/**
- * Submit job to cluster master.
- */
-public interface JobSubmitter {
-  /**
-   * Submit a job to cluster.
-   * @param parameters run job parameters
-   * @return applicationId when successfully submitted
-   * @throws YarnException for issues while contacting YARN daemons
-   * @throws IOException for other issues.
-   */
-  ApplicationId submitJob(ParametersHolder parameters)
-      throws IOException, YarnException;
-}
diff --git a/submarine-core/src/main/java/org/apache/submarine/runtimes/common/StorageKeyConstants.java b/submarine-core/src/main/java/org/apache/submarine/runtimes/common/StorageKeyConstants.java
deleted file mode 100644
index 6195f63..0000000
--- a/submarine-core/src/main/java/org/apache/submarine/runtimes/common/StorageKeyConstants.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * 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
- * <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. See accompanying LICENSE file.
- */
-
-package org.apache.submarine.runtimes.common;
-
-public class StorageKeyConstants {
-  public static final String JOB_NAME = "JOB_NAME";
-  public static final String JOB_RUN_ARGS = "JOB_RUN_ARGS";
-  public static final String APPLICATION_ID = "APPLICATION_ID";
-  public static final String CHECKPOINT_PATH = "CHECKPOINT_PATH";
-  public static final String INPUT_PATH = "INPUT_PATH";
-  public static final String SAVED_MODEL_PATH = "SAVED_MODEL_PATH";
-}
diff --git a/submarine-core/src/test/java/org/apache/submarine/runtimes/common/TestFSBasedSubmarineStorage.java b/submarine-core/src/test/java/org/apache/submarine/runtimes/common/TestFSBasedSubmarineStorage.java
deleted file mode 100644
index 7258f03..0000000
--- a/submarine-core/src/test/java/org/apache/submarine/runtimes/common/TestFSBasedSubmarineStorage.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/**
- * 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.
- */
-
-package org.apache.submarine.runtimes.common;
-
-import org.apache.submarine.common.ClientContext;
-import org.apache.submarine.common.fs.MockRemoteDirectoryManager;
-import org.junit.Assert;
-import org.junit.Test;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-public class TestFSBasedSubmarineStorage {
-  private Map<String, String> getMap(String prefix) {
-    Map<String, String> map = new HashMap<>();
-    map.put(prefix + "1", "1");
-    map.put(prefix + "2", "2");
-    map.put(prefix + "3", "3");
-    map.put(prefix + "4", "4");
-    return map;
-  }
-
-  private void compareMap(Map<String, String> map1, Map<String, String> map2) {
-    Assert.assertEquals(map1.size(), map2.size());
-    for (String k : map1.keySet()) {
-      Assert.assertEquals(map1.get(k), map2.get(k));
-    }
-  }
-
-  @Test
-  public void testStorageOps() throws IOException {
-    MockRemoteDirectoryManager remoteDirectoryManager = new MockRemoteDirectoryManager();
-    ClientContext clientContext = mock(ClientContext.class);
-    when(clientContext.getRemoteDirectoryManager()).thenReturn(remoteDirectoryManager);
-    FSBasedSubmarineStorageImpl storage = new FSBasedSubmarineStorageImpl(
-        clientContext);
-    storage.addNewJob("job1", getMap("job1"));
-    storage.addNewJob("job2", getMap("job2"));
-    storage.addNewJob("job3", getMap("job3"));
-    storage.addNewJob("job4", new HashMap<>());
-    storage.addNewModel("model1", "1.0", getMap("model1_1.0"));
-    storage.addNewModel("model1", "2.0.0", getMap("model1_2.0.0"));
-    storage.addNewModel("model2", null, getMap("model1_default"));
-    storage.addNewModel("model2", "1.0", getMap("model2_1.0"));
-
-    // create a new storage and read it back.
-    storage = new FSBasedSubmarineStorageImpl(
-        clientContext);
-    compareMap(getMap("job1"), storage.getJobInfoByName("job1"));
-    compareMap(getMap("job2"), storage.getJobInfoByName("job2"));
-    compareMap(getMap("job3"), storage.getJobInfoByName("job3"));
-    compareMap(new HashMap<>(), storage.getJobInfoByName("job4"));
-    compareMap(getMap("model1_1.0"), storage.getModelInfoByName("model1", "1.0"));
-    compareMap(getMap("model1_2.0.0"), storage.getModelInfoByName("model1", "2.0.0"));
-    compareMap(getMap("model2_1.0"), storage.getModelInfoByName("model2", "1.0"));
-  }
-}
diff --git a/submarine-dist/pom.xml b/submarine-dist/pom.xml
index 35d57bb..2ca3a62 100644
--- a/submarine-dist/pom.xml
+++ b/submarine-dist/pom.xml
@@ -1,17 +1,22 @@
 <?xml version="1.0"?>
 <!--
-  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
+  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. See accompanying LICENSE file.
--->
+  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.
+  -->
 <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
@@ -47,7 +52,17 @@
   <dependencies>
     <dependency>
       <groupId>org.apache.submarine</groupId>
-      <artifactId>submarine-core</artifactId>
+      <artifactId>commons-runtime</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.submarine</groupId>
+      <artifactId>submarine-client</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.submarine</groupId>
+      <artifactId>submitter-yarn</artifactId>
       <version>${project.version}</version>
     </dependency>
   </dependencies>
@@ -56,22 +71,6 @@
     <profile>
       <id>hadoop-3.2</id>
       <dependencies>
-        <dependency>
-          <groupId>org.apache.submarine</groupId>
-          <artifactId>yarnservice-runtime</artifactId>
-          <version>${project.version}</version>
-          <exclusions>
-            <exclusion>
-              <groupId>org.apache.avro</groupId>
-              <artifactId>avro</artifactId>
-            </exclusion>
-          </exclusions>
-        </dependency>
-        <dependency>
-          <groupId>org.apache.submarine</groupId>
-          <artifactId>tony-runtime</artifactId>
-          <version>${project.version}</version>
-        </dependency>
       </dependencies>
     </profile>
 
@@ -79,22 +78,6 @@
     <profile>
       <id>hadoop-3.1</id>
       <dependencies>
-        <dependency>
-          <groupId>org.apache.submarine</groupId>
-          <artifactId>yarnservice-runtime</artifactId>
-          <version>${project.version}</version>
-          <exclusions>
-            <exclusion>
-              <groupId>org.apache.avro</groupId>
-              <artifactId>avro</artifactId>
-            </exclusion>
-          </exclusions>
-        </dependency>
-        <dependency>
-          <groupId>org.apache.submarine</groupId>
-          <artifactId>tony-runtime</artifactId>
-          <version>${project.version}</version>
-        </dependency>
       </dependencies>
     </profile>
 
@@ -104,22 +87,12 @@
         <activeByDefault>true</activeByDefault>
       </activation>
       <dependencies>
-        <dependency>
-          <groupId>org.apache.submarine</groupId>
-          <artifactId>tony-runtime</artifactId>
-          <version>${project.version}</version>
-        </dependency>
       </dependencies>
     </profile>
 
     <profile>
       <id>hadoop-2.7</id>
       <dependencies>
-        <dependency>
-          <groupId>org.apache.submarine</groupId>
-          <artifactId>tony-runtime</artifactId>
-          <version>${project.version}</version>
-        </dependency>
       </dependencies>
     </profile>
 
diff --git a/submarine-dist/src/assembly/distribution.xml b/submarine-dist/src/assembly/distribution.xml
index f656237..ca248a6 100644
--- a/submarine-dist/src/assembly/distribution.xml
+++ b/submarine-dist/src/assembly/distribution.xml
@@ -25,19 +25,37 @@
     <dependencySet>
       <outputDirectory>/</outputDirectory>
       <includes>
-        <include>org.apache.submarine:submarine-core</include>
+        <include>org.apache.submarine:submarine-commons</include>
       </includes>
     </dependencySet>
     <dependencySet>
       <outputDirectory>/</outputDirectory>
       <includes>
-        <include>org.apache.submarine:tony-runtime</include>
+        <include>org.apache.submarine:commons-runtime</include>
       </includes>
     </dependencySet>
     <dependencySet>
       <outputDirectory>/</outputDirectory>
       <includes>
-        <include>org.apache.submarine:yarnservice-runtime</include>
+        <include>org.apache.submarine:submarine-client</include>
+      </includes>
+    </dependencySet>
+    <dependencySet>
+      <outputDirectory>/</outputDirectory>
+      <includes>
+        <include>org.apache.submarine:submarine-server</include>
+      </includes>
+    </dependencySet>
+    <dependencySet>
+      <outputDirectory>/</outputDirectory>
+      <includes>
+        <include>org.apache.submarine:server-submitter</include>
+      </includes>
+    </dependencySet>
+    <dependencySet>
+      <outputDirectory>/</outputDirectory>
+      <includes>
+        <include>org.apache.submarine:submitter-yarn</include>
       </includes>
     </dependencySet>
     <dependencySet>
diff --git a/submarine-runtime/pom.xml b/submarine-runtime/pom.xml
deleted file mode 100644
index cb0e2fd..0000000
--- a/submarine-runtime/pom.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0"?>
-<!--
-  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
-                      https://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.apache.submarine</groupId>
-    <artifactId>submarine</artifactId>
-    <version>0.3.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>
-
-  <artifactId>submarine-runtime</artifactId>
-  <version>0.3.0-SNAPSHOT</version>
-  <packaging>pom</packaging>
-  <name>Submarine: Runtime Parent</name>
-  <description>Submarine Runtime Parent</description>
-
-  <modules>
-    <module>tony-runtime</module>
-    <module>yarnservice-runtime</module>
-  </modules>
-
-</project>
diff --git a/submarine-runtime/tony-runtime/src/main/java/org/apache/submarine/runtimes/tony/TonyRuntimeFactory.java b/submarine-runtime/tony-runtime/src/main/java/org/apache/submarine/runtimes/tony/TonyRuntimeFactory.java
deleted file mode 100644
index 7a1e40c..0000000
--- a/submarine-runtime/tony-runtime/src/main/java/org/apache/submarine/runtimes/tony/TonyRuntimeFactory.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * 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
- * <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. See accompanying LICENSE file.
- */
-package org.apache.submarine.runtimes.tony;
-
-import com.linkedin.tony.TonyClient;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.submarine.common.ClientContext;
-import org.apache.submarine.runtimes.RuntimeFactory;
-import org.apache.submarine.runtimes.common.FSBasedSubmarineStorageImpl;
-import org.apache.submarine.runtimes.common.JobMonitor;
-import org.apache.submarine.runtimes.common.JobSubmitter;
-import org.apache.submarine.runtimes.common.SubmarineStorage;
-
-/**
- * Implementation of RuntimeFactory with Tony Runtime
- */
-public class TonyRuntimeFactory extends RuntimeFactory {
-  private TonyClient tonyClient;
-  private TonyJobSubmitter submitter;
-  private TonyJobMonitor monitor;
-
-  public TonyRuntimeFactory(ClientContext clientContext) {
-    super(clientContext);
-    submitter = new TonyJobSubmitter();
-    tonyClient = new TonyClient(submitter, new Configuration());
-    monitor = new TonyJobMonitor(clientContext, tonyClient);
-    submitter.setTonyClient(tonyClient);
-  }
-
-  @Override
-  protected JobSubmitter internalCreateJobSubmitter() {
-    return submitter;
-  }
-
-  @Override
-  protected JobMonitor internalCreateJobMonitor() {
-    return monitor;
-  }
-
-  @Override
-  protected SubmarineStorage internalCreateSubmarineStorage() {
-    return new FSBasedSubmarineStorageImpl(super.clientContext);
-  }
-}
diff --git a/submarine-runtime/tony-runtime/src/main/java/org/apache/submarine/runtimes/tony/buider/package-info.java b/submarine-runtime/tony-runtime/src/main/java/org/apache/submarine/runtimes/tony/buider/package-info.java
deleted file mode 100644
index 3f3ad31..0000000
--- a/submarine-runtime/tony-runtime/src/main/java/org/apache/submarine/runtimes/tony/buider/package-info.java
+++ /dev/null
@@ -1,14 +0,0 @@
-/**
- * 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.
- */
-package org.apache.submarine.runtimes.tony.buider;
diff --git a/submarine-runtime/tony-runtime/src/main/java/org/apache/submarine/runtimes/tony/package-info.java b/submarine-runtime/tony-runtime/src/main/java/org/apache/submarine/runtimes/tony/package-info.java
deleted file mode 100644
index c592471..0000000
--- a/submarine-runtime/tony-runtime/src/main/java/org/apache/submarine/runtimes/tony/package-info.java
+++ /dev/null
@@ -1,14 +0,0 @@
-/**
- * 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.
- */
-package org.apache.submarine.runtimes.tony;
diff --git a/submarine-server/pom.xml b/submarine-server/pom.xml
new file mode 100644
index 0000000..8a49dee
--- /dev/null
+++ b/submarine-server/pom.xml
@@ -0,0 +1,40 @@
+<?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.
+  -->
+
+<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>submarine</artifactId>
+    <groupId>org.apache.submarine</groupId>
+    <version>0.3.0-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>submarine-server</artifactId>
+  <version>0.3.0-SNAPSHOT</version>
+  <packaging>pom</packaging>
+  <name>Submarine: Server</name>
+
+  <modules>
+    <module>server-submitter</module>
+  </modules>
+
+</project>
diff --git a/submarine-server/server-submitter/pom.xml b/submarine-server/server-submitter/pom.xml
new file mode 100644
index 0000000..7ab50c7
--- /dev/null
+++ b/submarine-server/server-submitter/pom.xml
@@ -0,0 +1,40 @@
+<?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.
+  -->
+
+<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>submarine-server</artifactId>
+    <groupId>org.apache.submarine</groupId>
+    <version>0.3.0-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>server-submitter</artifactId>
+  <version>0.3.0-SNAPSHOT</version>
+  <packaging>pom</packaging>
+  <name>Submarine: Server Submitter</name>
+
+  <modules>
+    <module>submitter-yarn</module>
+  </modules>
+
+</project>
diff --git a/submarine-runtime/tony-runtime/README.md b/submarine-server/server-submitter/submitter-yarn/README.md
similarity index 100%
rename from submarine-runtime/tony-runtime/README.md
rename to submarine-server/server-submitter/submitter-yarn/README.md
diff --git a/submarine-runtime/tony-runtime/pom.xml b/submarine-server/server-submitter/submitter-yarn/pom.xml
similarity index 94%
rename from submarine-runtime/tony-runtime/pom.xml
rename to submarine-server/server-submitter/submitter-yarn/pom.xml
index 842ad31..2f45a21 100644
--- a/submarine-runtime/tony-runtime/pom.xml
+++ b/submarine-server/server-submitter/submitter-yarn/pom.xml
@@ -19,18 +19,18 @@
   <modelVersion>4.0.0</modelVersion>
   <parent>
     <groupId>org.apache.submarine</groupId>
-    <artifactId>submarine-runtime</artifactId>
+    <artifactId>server-submitter</artifactId>
     <version>0.3.0-SNAPSHOT</version>
     <relativePath>../pom.xml</relativePath>
   </parent>
 
-  <artifactId>tony-runtime</artifactId>
+  <artifactId>submitter-yarn</artifactId>
   <version>0.3.0-SNAPSHOT</version>
-  <name>Submarine: Tony Runtime</name>
+  <name>Submarine: Server Submitter YARN</name>
   <dependencies>
     <dependency>
       <groupId>org.apache.submarine</groupId>
-      <artifactId>submarine-core</artifactId>
+      <artifactId>submarine-client</artifactId>
       <version>0.3.0-SNAPSHOT</version>
       <scope>compile</scope>
       <optional>true</optional>
@@ -50,6 +50,11 @@
       </exclusions>
     </dependency>
     <dependency>
+      <groupId>commons-logging</groupId>
+      <artifactId>commons-logging</artifactId>
+      <version>${commons.logging.version}</version>
+    </dependency>
+    <dependency>
       <groupId>com.linkedin.tony</groupId>
       <artifactId>tony-core</artifactId>
       <version>${tony.version}</version>
@@ -194,7 +199,7 @@
     </dependency>
     <dependency>
       <groupId>org.apache.submarine</groupId>
-      <artifactId>submarine-core</artifactId>
+      <artifactId>commons-runtime</artifactId>
       <type>test-jar</type>
       <scope>test</scope>
       <version>0.3.0-SNAPSHOT</version>
diff --git a/submarine-runtime/tony-runtime/src/main/java/org/apache/submarine/runtimes/tony/buider/JobStatusBuilder.java b/submarine-server/server-submitter/submitter-yarn/src/main/java/org/apache/submarine/runtimes/tony/JobStatusBuilder.java
similarity index 59%
rename from submarine-runtime/tony-runtime/src/main/java/org/apache/submarine/runtimes/tony/buider/JobStatusBuilder.java
rename to submarine-server/server-submitter/submitter-yarn/src/main/java/org/apache/submarine/runtimes/tony/JobStatusBuilder.java
index e5e3664..210ecd8 100644
--- a/submarine-runtime/tony-runtime/src/main/java/org/apache/submarine/runtimes/tony/buider/JobStatusBuilder.java
+++ b/submarine-server/server-submitter/submitter-yarn/src/main/java/org/apache/submarine/runtimes/tony/JobStatusBuilder.java
@@ -1,21 +1,27 @@
-/**
- * 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
- * <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. See accompanying LICENSE file.
+/*
+ * 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.submarine.runtimes.tony.buider;
+
+package org.apache.submarine.runtimes.tony;
 
 import com.linkedin.tony.rpc.TaskInfo;
-import org.apache.submarine.common.api.JobComponentStatus;
-import org.apache.submarine.common.api.JobStatus;
+import org.apache.submarine.commons.runtime.api.JobComponentStatus;
+import org.apache.submarine.commons.runtime.api.JobStatus;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/submarine-runtime/tony-runtime/src/main/java/org/apache/submarine/runtimes/tony/TonyJobMonitor.java b/submarine-server/server-submitter/submitter-yarn/src/main/java/org/apache/submarine/runtimes/tony/TonyJobMonitor.java
similarity index 50%
rename from submarine-runtime/tony-runtime/src/main/java/org/apache/submarine/runtimes/tony/TonyJobMonitor.java
rename to submarine-server/server-submitter/submitter-yarn/src/main/java/org/apache/submarine/runtimes/tony/TonyJobMonitor.java
index 2801ef8..ce1466f 100644
--- a/submarine-runtime/tony-runtime/src/main/java/org/apache/submarine/runtimes/tony/TonyJobMonitor.java
+++ b/submarine-server/server-submitter/submitter-yarn/src/main/java/org/apache/submarine/runtimes/tony/TonyJobMonitor.java
@@ -1,26 +1,31 @@
-/**
- * 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
- * <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. See accompanying LICENSE file.
+/*
+ * 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.submarine.runtimes.tony;
 
 import com.linkedin.tony.TonyClient;
 import com.linkedin.tony.client.TaskUpdateListener;
 import com.linkedin.tony.rpc.TaskInfo;
 import org.apache.hadoop.yarn.exceptions.YarnException;
-import org.apache.submarine.common.ClientContext;
-import org.apache.submarine.common.api.JobStatus;
-import org.apache.submarine.runtimes.common.JobMonitor;
-import org.apache.submarine.runtimes.tony.buider.JobStatusBuilder;
+import org.apache.submarine.commons.runtime.ClientContext;
+import org.apache.submarine.commons.runtime.api.JobStatus;
+import org.apache.submarine.commons.runtime.JobMonitor;
 
 import java.io.IOException;
 import java.util.HashSet;
diff --git a/submarine-runtime/tony-runtime/src/main/java/org/apache/submarine/runtimes/tony/TonyJobSubmitter.java b/submarine-server/server-submitter/submitter-yarn/src/main/java/org/apache/submarine/runtimes/tony/TonyJobSubmitter.java
similarity index 74%
rename from submarine-runtime/tony-runtime/src/main/java/org/apache/submarine/runtimes/tony/TonyJobSubmitter.java
rename to submarine-server/server-submitter/submitter-yarn/src/main/java/org/apache/submarine/runtimes/tony/TonyJobSubmitter.java
index 40c3c34..1762634 100644
--- a/submarine-runtime/tony-runtime/src/main/java/org/apache/submarine/runtimes/tony/TonyJobSubmitter.java
+++ b/submarine-server/server-submitter/submitter-yarn/src/main/java/org/apache/submarine/runtimes/tony/TonyJobSubmitter.java
@@ -1,15 +1,20 @@
-/**
- * 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
- * <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. See accompanying LICENSE file.
+/*
+ * 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.submarine.runtimes.tony;
@@ -22,10 +27,10 @@ import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.yarn.api.records.ApplicationId;
 import org.apache.hadoop.yarn.exceptions.YarnException;
-import org.apache.submarine.client.cli.param.ParametersHolder;
+import org.apache.submarine.commons.runtime.param.Parameter;
+import org.apache.submarine.commons.runtime.Framework;
 import org.apache.submarine.client.cli.param.runjob.TensorFlowRunJobParameters;
-import org.apache.submarine.client.cli.runjob.Framework;
-import org.apache.submarine.runtimes.common.JobSubmitter;
+import org.apache.submarine.commons.runtime.JobSubmitter;
 
 import java.io.File;
 import java.io.FileOutputStream;
@@ -47,7 +52,7 @@ public class TonyJobSubmitter implements JobSubmitter, CallbackHandler {
   }
 
   @Override
-  public ApplicationId submitJob(ParametersHolder parameters)
+  public ApplicationId submitJob(Parameter parameters)
       throws IOException {
     if (parameters.getFramework() == Framework.PYTORCH) {
       // we need to throw an exception, as ParametersHolder's parameters field
diff --git a/submarine-server/server-submitter/submitter-yarn/src/main/java/org/apache/submarine/runtimes/tony/TonyRuntimeFactory.java b/submarine-server/server-submitter/submitter-yarn/src/main/java/org/apache/submarine/runtimes/tony/TonyRuntimeFactory.java
new file mode 100644
index 0000000..42e8c9a
--- /dev/null
+++ b/submarine-server/server-submitter/submitter-yarn/src/main/java/org/apache/submarine/runtimes/tony/TonyRuntimeFactory.java
@@ -0,0 +1,61 @@
+/*
+ * 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.submarine.runtimes.tony;
+
+import com.linkedin.tony.TonyClient;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.submarine.commons.runtime.ClientContext;
+import org.apache.submarine.commons.runtime.RuntimeFactory;
+import org.apache.submarine.commons.runtime.fs.FSBasedSubmarineStorageImpl;
+import org.apache.submarine.commons.runtime.JobMonitor;
+import org.apache.submarine.commons.runtime.JobSubmitter;
+import org.apache.submarine.commons.runtime.fs.SubmarineStorage;
+
+/**
+ * Implementation of RuntimeFactory with Tony Runtime
+ */
+public class TonyRuntimeFactory extends RuntimeFactory {
+  private TonyClient tonyClient;
+  private TonyJobSubmitter submitter;
+  private TonyJobMonitor monitor;
+
+  public TonyRuntimeFactory(ClientContext clientContext) {
+    super(clientContext);
+    submitter = new TonyJobSubmitter();
+    tonyClient = new TonyClient(submitter, new Configuration());
+    monitor = new TonyJobMonitor(clientContext, tonyClient);
+    submitter.setTonyClient(tonyClient);
+  }
+
+  @Override
+  protected JobSubmitter internalCreateJobSubmitter() {
+    return submitter;
+  }
+
+  @Override
+  protected JobMonitor internalCreateJobMonitor() {
+    return monitor;
+  }
+
+  @Override
+  protected SubmarineStorage internalCreateSubmarineStorage() {
+    return new FSBasedSubmarineStorageImpl(super.clientContext);
+  }
+}
diff --git a/submarine-runtime/tony-runtime/src/main/java/org/apache/submarine/runtimes/tony/TonyUtils.java b/submarine-server/server-submitter/submitter-yarn/src/main/java/org/apache/submarine/runtimes/tony/TonyUtils.java
similarity index 85%
rename from submarine-runtime/tony-runtime/src/main/java/org/apache/submarine/runtimes/tony/TonyUtils.java
rename to submarine-server/server-submitter/submitter-yarn/src/main/java/org/apache/submarine/runtimes/tony/TonyUtils.java
index 7dfc60c..dc4c465 100644
--- a/submarine-runtime/tony-runtime/src/main/java/org/apache/submarine/runtimes/tony/TonyUtils.java
+++ b/submarine-server/server-submitter/submitter-yarn/src/main/java/org/apache/submarine/runtimes/tony/TonyUtils.java
@@ -1,16 +1,22 @@
-/**
- * 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
- * <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. See accompanying LICENSE file.
+/*
+ * 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.submarine.runtimes.tony;
 
 import com.linkedin.tony.Constants;
@@ -20,14 +26,14 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.submarine.client.cli.param.runjob.TensorFlowRunJobParameters;
-import org.apache.submarine.common.resource.ResourceUtils;
+import org.apache.submarine.commons.runtime.resource.ResourceUtils;
 
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 
-import static org.apache.submarine.common.conf.SubmarineConfiguration.SUBMARINE_RUNTIME_APP_TYPE;
+import static org.apache.submarine.commons.runtime.conf.SubmarineConfiguration.SUBMARINE_RUNTIME_APP_TYPE;
 
 /**
  * Utilities for Tony Runtime.
diff --git a/submarine-runtime/tony-runtime/src/test/java/TestTonyUtils.java b/submarine-server/server-submitter/submitter-yarn/src/test/java/TestTonyUtils.java
similarity index 80%
rename from submarine-runtime/tony-runtime/src/test/java/TestTonyUtils.java
rename to submarine-server/server-submitter/submitter-yarn/src/test/java/TestTonyUtils.java
index ba6a82b..cbc2b5e 100644
--- a/submarine-runtime/tony-runtime/src/test/java/TestTonyUtils.java
+++ b/submarine-server/server-submitter/submitter-yarn/src/test/java/TestTonyUtils.java
@@ -1,16 +1,22 @@
-/**
- * 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
- * <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. See accompanying LICENSE file.
+/*
+ * 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.
  */
+
 import com.linkedin.tony.Constants;
 import com.linkedin.tony.TonyConfigurationKeys;
 import org.apache.hadoop.conf.Configuration;
@@ -20,12 +26,12 @@ import org.apache.submarine.client.cli.param.ParametersHolder;
 import org.apache.submarine.client.cli.param.runjob.TensorFlowRunJobParameters;
 import org.apache.submarine.client.cli.runjob.RunJobCli;
 import org.apache.submarine.client.cli.param.runjob.RunJobParameters;
-import org.apache.submarine.common.MockClientContext;
-import org.apache.submarine.common.conf.SubmarineLogs;
-import org.apache.submarine.runtimes.RuntimeFactory;
-import org.apache.submarine.runtimes.common.JobMonitor;
-import org.apache.submarine.runtimes.common.JobSubmitter;
-import org.apache.submarine.runtimes.common.SubmarineStorage;
+import org.apache.submarine.commons.runtime.MockClientContext;
+import org.apache.submarine.commons.runtime.conf.SubmarineLogs;
+import org.apache.submarine.commons.runtime.RuntimeFactory;
+import org.apache.submarine.commons.runtime.JobMonitor;
+import org.apache.submarine.commons.runtime.JobSubmitter;
+import org.apache.submarine.commons.runtime.fs.SubmarineStorage;
 import org.apache.submarine.runtimes.tony.TonyUtils;
 import org.junit.Assert;
 import org.junit.Before;
diff --git a/submarine-runtime/yarnservice-runtime/README.md b/submarine-server/server-submitter/submitter-yarnservice/README.md
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/README.md
rename to submarine-server/server-submitter/submitter-yarnservice/README.md
diff --git a/submarine-runtime/yarnservice-runtime/pom.xml b/submarine-server/server-submitter/submitter-yarnservice/pom.xml
similarity index 94%
rename from submarine-runtime/yarnservice-runtime/pom.xml
rename to submarine-server/server-submitter/submitter-yarnservice/pom.xml
index 5072e62..57e9e82 100644
--- a/submarine-runtime/yarnservice-runtime/pom.xml
+++ b/submarine-server/server-submitter/submitter-yarnservice/pom.xml
@@ -21,11 +21,11 @@
     <groupId>org.apache.submarine</groupId>
     <artifactId>submarine-runtime</artifactId>
     <version>0.3.0-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
+    <relativePath>../../../submarine-runtime/pom.xml</relativePath>
   </parent>
-  <artifactId>yarnservice-runtime</artifactId>
+  <artifactId>submitter-yarnservice</artifactId>
   <version>0.3.0-SNAPSHOT</version>
-  <name>Submarine: YARN Service Runtime</name>
+  <name>Submarine: Server Submitter YARN Service</name>
 
   <properties>
     <!-- Needed for generating FindBugs warnings using parent pom -->
@@ -141,14 +141,19 @@
     </dependency>
     <dependency>
       <groupId>org.apache.submarine</groupId>
-      <artifactId>submarine-core</artifactId>
+      <artifactId>commons-runtime</artifactId>
       <version>0.3.0-SNAPSHOT</version>
       <type>test-jar</type>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.apache.submarine</groupId>
-      <artifactId>submarine-core</artifactId>
+      <artifactId>submarine-client</artifactId>
+      <version>0.3.0-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.submarine</groupId>
+      <artifactId>commons-runtime</artifactId>
       <version>0.3.0-SNAPSHOT</version>
     </dependency>
     <dependency>
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/AbstractComponent.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/AbstractComponent.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/AbstractComponent.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/AbstractComponent.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/AbstractServiceSpec.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/AbstractServiceSpec.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/AbstractServiceSpec.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/AbstractServiceSpec.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/FileSystemOperations.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/FileSystemOperations.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/FileSystemOperations.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/FileSystemOperations.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/HadoopEnvironmentSetup.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/HadoopEnvironmentSetup.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/HadoopEnvironmentSetup.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/HadoopEnvironmentSetup.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/ServiceSpec.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/ServiceSpec.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/ServiceSpec.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/ServiceSpec.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/ServiceSpecFileGenerator.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/ServiceSpecFileGenerator.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/ServiceSpecFileGenerator.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/ServiceSpecFileGenerator.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/ServiceWrapper.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/ServiceWrapper.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/ServiceWrapper.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/ServiceWrapper.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/WorkerComponentFactory.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/WorkerComponentFactory.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/WorkerComponentFactory.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/WorkerComponentFactory.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/YarnServiceJobMonitor.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/YarnServiceJobMonitor.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/YarnServiceJobMonitor.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/YarnServiceJobMonitor.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/YarnServiceJobSubmitter.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/YarnServiceJobSubmitter.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/YarnServiceJobSubmitter.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/YarnServiceJobSubmitter.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/YarnServiceRuntimeFactory.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/YarnServiceRuntimeFactory.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/YarnServiceRuntimeFactory.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/YarnServiceRuntimeFactory.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/YarnServiceUtils.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/YarnServiceUtils.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/YarnServiceUtils.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/YarnServiceUtils.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/builder/JobComponentStatusBuilder.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/builder/JobComponentStatusBuilder.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/builder/JobComponentStatusBuilder.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/builder/JobComponentStatusBuilder.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/builder/JobStatusBuilder.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/builder/JobStatusBuilder.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/builder/JobStatusBuilder.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/builder/JobStatusBuilder.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/command/AbstractLaunchCommand.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/command/AbstractLaunchCommand.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/command/AbstractLaunchCommand.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/command/AbstractLaunchCommand.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/command/LaunchCommandFactory.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/command/LaunchCommandFactory.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/command/LaunchCommandFactory.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/command/LaunchCommandFactory.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/command/LaunchScriptBuilder.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/command/LaunchScriptBuilder.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/command/LaunchScriptBuilder.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/command/LaunchScriptBuilder.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/command/PyTorchLaunchCommandFactory.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/command/PyTorchLaunchCommandFactory.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/command/PyTorchLaunchCommandFactory.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/command/PyTorchLaunchCommandFactory.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/command/TensorFlowLaunchCommandFactory.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/command/TensorFlowLaunchCommandFactory.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/command/TensorFlowLaunchCommandFactory.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/command/TensorFlowLaunchCommandFactory.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/command/package-info.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/command/package-info.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/command/package-info.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/command/package-info.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/pytorch/PyTorchServiceSpec.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/pytorch/PyTorchServiceSpec.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/pytorch/PyTorchServiceSpec.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/pytorch/PyTorchServiceSpec.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/pytorch/command/PyTorchWorkerLaunchCommand.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/pytorch/command/PyTorchWorkerLaunchCommand.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/pytorch/command/PyTorchWorkerLaunchCommand.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/pytorch/command/PyTorchWorkerLaunchCommand.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/pytorch/command/package-info.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/pytorch/command/package-info.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/pytorch/command/package-info.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/pytorch/command/package-info.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/pytorch/component/PyTorchWorkerComponent.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/pytorch/component/PyTorchWorkerComponent.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/pytorch/component/PyTorchWorkerComponent.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/pytorch/component/PyTorchWorkerComponent.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/pytorch/component/package-info.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/pytorch/component/package-info.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/pytorch/component/package-info.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/pytorch/component/package-info.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/pytorch/package-info.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/pytorch/package-info.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/pytorch/package-info.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/pytorch/package-info.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/TensorFlowCommons.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/TensorFlowCommons.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/TensorFlowCommons.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/TensorFlowCommons.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/TensorFlowServiceSpec.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/TensorFlowServiceSpec.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/TensorFlowServiceSpec.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/TensorFlowServiceSpec.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/command/TensorBoardLaunchCommand.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/command/TensorBoardLaunchCommand.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/command/TensorBoardLaunchCommand.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/command/TensorBoardLaunchCommand.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/command/TensorFlowLaunchCommand.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/command/TensorFlowLaunchCommand.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/command/TensorFlowLaunchCommand.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/command/TensorFlowLaunchCommand.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/command/TensorFlowPsLaunchCommand.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/command/TensorFlowPsLaunchCommand.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/command/TensorFlowPsLaunchCommand.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/command/TensorFlowPsLaunchCommand.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/command/TensorFlowWorkerLaunchCommand.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/command/TensorFlowWorkerLaunchCommand.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/command/TensorFlowWorkerLaunchCommand.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/command/TensorFlowWorkerLaunchCommand.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/command/package-info.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/command/package-info.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/command/package-info.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/command/package-info.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/component/TensorBoardComponent.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/component/TensorBoardComponent.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/component/TensorBoardComponent.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/component/TensorBoardComponent.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/component/TensorFlowPsComponent.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/component/TensorFlowPsComponent.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/component/TensorFlowPsComponent.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/component/TensorFlowPsComponent.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/component/TensorFlowWorkerComponent.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/component/TensorFlowWorkerComponent.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/component/TensorFlowWorkerComponent.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/component/TensorFlowWorkerComponent.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/component/package-info.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/component/package-info.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/component/package-info.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/component/package-info.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/package-info.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/package-info.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/package-info.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/runtimes/yarnservice/tensorflow/package-info.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/utils/ClassPathUtilities.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/utils/ClassPathUtilities.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/utils/ClassPathUtilities.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/utils/ClassPathUtilities.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/utils/DockerUtilities.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/utils/DockerUtilities.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/utils/DockerUtilities.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/utils/DockerUtilities.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/utils/EnvironmentUtilities.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/utils/EnvironmentUtilities.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/utils/EnvironmentUtilities.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/utils/EnvironmentUtilities.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/utils/KerberosPrincipalFactory.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/utils/KerberosPrincipalFactory.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/utils/KerberosPrincipalFactory.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/utils/KerberosPrincipalFactory.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/utils/Localizer.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/utils/Localizer.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/utils/Localizer.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/utils/Localizer.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/utils/SubmarineResourceUtils.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/utils/SubmarineResourceUtils.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/utils/SubmarineResourceUtils.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/utils/SubmarineResourceUtils.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/utils/ZipUtilities.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/utils/ZipUtilities.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/utils/ZipUtilities.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/utils/ZipUtilities.java
diff --git a/submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/utils/package-info.java b/submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/utils/package-info.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/main/java/org/apache/submarine/utils/package-info.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/main/java/org/apache/submarine/utils/package-info.java
diff --git a/submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/FileUtilitiesForTests.java b/submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/FileUtilitiesForTests.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/FileUtilitiesForTests.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/FileUtilitiesForTests.java
diff --git a/submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/client/cli/yarnservice/ParamBuilderForTest.java b/submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/client/cli/yarnservice/ParamBuilderForTest.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/client/cli/yarnservice/ParamBuilderForTest.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/client/cli/yarnservice/ParamBuilderForTest.java
diff --git a/submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/client/cli/yarnservice/TestYarnServiceRunJobCli.java b/submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/client/cli/yarnservice/TestYarnServiceRunJobCli.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/client/cli/yarnservice/TestYarnServiceRunJobCli.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/client/cli/yarnservice/TestYarnServiceRunJobCli.java
diff --git a/submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/client/cli/yarnservice/TestYarnServiceRunJobCliCommons.java b/submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/client/cli/yarnservice/TestYarnServiceRunJobCliCommons.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/client/cli/yarnservice/TestYarnServiceRunJobCliCommons.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/client/cli/yarnservice/TestYarnServiceRunJobCliCommons.java
diff --git a/submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/client/cli/yarnservice/TestYarnServiceRunJobCliLocalization.java b/submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/client/cli/yarnservice/TestYarnServiceRunJobCliLocalization.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/client/cli/yarnservice/TestYarnServiceRunJobCliLocalization.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/client/cli/yarnservice/TestYarnServiceRunJobCliLocalization.java
diff --git a/submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/client/cli/yarnservice/YarnServiceCliTestUtils.java b/submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/client/cli/yarnservice/YarnServiceCliTestUtils.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/client/cli/yarnservice/YarnServiceCliTestUtils.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/client/cli/yarnservice/YarnServiceCliTestUtils.java
diff --git a/submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/runtimes/yarnservice/TestServiceWrapper.java b/submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/runtimes/yarnservice/TestServiceWrapper.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/runtimes/yarnservice/TestServiceWrapper.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/runtimes/yarnservice/TestServiceWrapper.java
diff --git a/submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/runtimes/yarnservice/TestTFConfigGenerator.java b/submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/runtimes/yarnservice/TestTFConfigGenerator.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/runtimes/yarnservice/TestTFConfigGenerator.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/runtimes/yarnservice/TestTFConfigGenerator.java
diff --git a/submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/runtimes/yarnservice/command/AbstractTFLaunchCommandTestHelper.java b/submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/runtimes/yarnservice/command/AbstractTFLaunchCommandTestHelper.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/runtimes/yarnservice/command/AbstractTFLaunchCommandTestHelper.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/runtimes/yarnservice/command/AbstractTFLaunchCommandTestHelper.java
diff --git a/submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/runtimes/yarnservice/command/TestLaunchCommandFactory.java b/submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/runtimes/yarnservice/command/TestLaunchCommandFactory.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/runtimes/yarnservice/command/TestLaunchCommandFactory.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/runtimes/yarnservice/command/TestLaunchCommandFactory.java
diff --git a/submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/runtimes/yarnservice/pytorch/TestPyTorchServiceSpec.java b/submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/runtimes/yarnservice/pytorch/TestPyTorchServiceSpec.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/runtimes/yarnservice/pytorch/TestPyTorchServiceSpec.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/runtimes/yarnservice/pytorch/TestPyTorchServiceSpec.java
diff --git a/submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/runtimes/yarnservice/tensorflow/command/TestTensorBoardLaunchCommand.java b/submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/runtimes/yarnservice/tensorflow/command/TestTensorBoardLaunchCommand.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/runtimes/yarnservice/tensorflow/command/TestTensorBoardLaunchCommand.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/runtimes/yarnservice/tensorflow/command/TestTensorBoardLaunchCommand.java
diff --git a/submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/runtimes/yarnservice/tensorflow/command/TestTensorFlowLaunchCommand.java b/submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/runtimes/yarnservice/tensorflow/command/TestTensorFlowLaunchCommand.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/runtimes/yarnservice/tensorflow/command/TestTensorFlowLaunchCommand.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/runtimes/yarnservice/tensorflow/command/TestTensorFlowLaunchCommand.java
diff --git a/submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/runtimes/yarnservice/tensorflow/component/ComponentTestCommons.java b/submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/runtimes/yarnservice/tensorflow/component/ComponentTestCommons.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/runtimes/yarnservice/tensorflow/component/ComponentTestCommons.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/runtimes/yarnservice/tensorflow/component/ComponentTestCommons.java
diff --git a/submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/runtimes/yarnservice/tensorflow/component/TestTensorBoardComponent.java b/submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/runtimes/yarnservice/tensorflow/component/TestTensorBoardComponent.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/runtimes/yarnservice/tensorflow/component/TestTensorBoardComponent.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/runtimes/yarnservice/tensorflow/component/TestTensorBoardComponent.java
diff --git a/submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/runtimes/yarnservice/tensorflow/component/TestTensorFlowPsComponent.java b/submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/runtimes/yarnservice/tensorflow/component/TestTensorFlowPsComponent.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/runtimes/yarnservice/tensorflow/component/TestTensorFlowPsComponent.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/runtimes/yarnservice/tensorflow/component/TestTensorFlowPsComponent.java
diff --git a/submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/runtimes/yarnservice/tensorflow/component/TestTensorFlowWorkerComponent.java b/submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/runtimes/yarnservice/tensorflow/component/TestTensorFlowWorkerComponent.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/runtimes/yarnservice/tensorflow/component/TestTensorFlowWorkerComponent.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/runtimes/yarnservice/tensorflow/component/TestTensorFlowWorkerComponent.java
diff --git a/submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/utils/TestClassPathUtilities.java b/submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/utils/TestClassPathUtilities.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/utils/TestClassPathUtilities.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/utils/TestClassPathUtilities.java
diff --git a/submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/utils/TestEnvironmentUtilities.java b/submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/utils/TestEnvironmentUtilities.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/utils/TestEnvironmentUtilities.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/utils/TestEnvironmentUtilities.java
diff --git a/submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/utils/TestKerberosPrincipalFactory.java b/submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/utils/TestKerberosPrincipalFactory.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/utils/TestKerberosPrincipalFactory.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/utils/TestKerberosPrincipalFactory.java
diff --git a/submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/utils/TestSubmarineResourceUtils.java b/submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/utils/TestSubmarineResourceUtils.java
similarity index 100%
rename from submarine-runtime/yarnservice-runtime/src/test/java/org/apache/submarine/utils/TestSubmarineResourceUtils.java
rename to submarine-server/server-submitter/submitter-yarnservice/src/test/java/org/apache/submarine/utils/TestSubmarineResourceUtils.java
diff --git a/submarine-core/src/test/resources/core-site.xml b/submarine-server/server-submitter/submitter-yarnservice/src/test/resources/core-site.xml
similarity index 100%
rename from submarine-core/src/test/resources/core-site.xml
rename to submarine-server/server-submitter/submitter-yarnservice/src/test/resources/core-site.xml
diff --git a/submarine-core/src/test/resources/hdfs-site.xml b/submarine-server/server-submitter/submitter-yarnservice/src/test/resources/hdfs-site.xml
similarity index 100%
rename from submarine-core/src/test/resources/hdfs-site.xml
rename to submarine-server/server-submitter/submitter-yarnservice/src/test/resources/hdfs-site.xml