Repository: incubator-myriad
Updated Branches:
  refs/heads/master bcd1fc8c6 -> 5118cff3e


Added the ability to specify a URI to pull configuration data from, also added 
to REST endpoints:
/api/config.tgz and /api/binary.tgz which provide an easy download for the 
hadoop configs and the hadoop binarys.  Configuration is done by assigning:

servedConfigPath: dist/config.tgz
servedBinaryPath: dist/hadoop-2.7.0.tgz

and

executor:
  configUri: http://127.0.0.1:8192/api/artifacts/config.tgz
  nodemanagerUri: http://127.0.0.1:8192/api/artifacts/binary.tgz

Able to use,
yarnEnvironment:
  HADOOP_CONF_DIR=$MESOS_SANDBOX/config
  YARN_HOME=$MESOS_SANDBOX/hadoop-2.7.0

JIRA:
  [Myriad-189] https://issues.apache.org/jira/browse/MYRIAD-189
Pull Request:
  Closes #68
Author:
  DarinJ <dar...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/incubator-myriad/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-myriad/commit/5118cff3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-myriad/tree/5118cff3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-myriad/diff/5118cff3

Branch: refs/heads/master
Commit: 5118cff3e0b3ba2e66023cd9a2840e74c546a6db
Parents: bcd1fc8
Author: darinj <darinj.w...@gmail.com>
Authored: Mon May 2 23:09:49 2016 -0400
Committer: darinj <dar...@apache.org>
Committed: Wed May 11 21:56:45 2016 -0400

----------------------------------------------------------------------
 .../apache/myriad/api/ArtifactsResource.java    | 78 ++++++++++++++++++++
 .../configuration/MyriadConfiguration.java      | 13 ++++
 .../MyriadExecutorConfiguration.java            |  8 ++
 .../apache/myriad/scheduler/TaskFactory.java    | 11 ++-
 .../myriad/webapp/MyriadServletModule.java      |  3 +-
 .../main/resources/myriad-config-default.yml    |  4 +
 6 files changed, 113 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/5118cff3/myriad-scheduler/src/main/java/org/apache/myriad/api/ArtifactsResource.java
----------------------------------------------------------------------
diff --git 
a/myriad-scheduler/src/main/java/org/apache/myriad/api/ArtifactsResource.java 
b/myriad-scheduler/src/main/java/org/apache/myriad/api/ArtifactsResource.java
new file mode 100644
index 0000000..769abe0
--- /dev/null
+++ 
b/myriad-scheduler/src/main/java/org/apache/myriad/api/ArtifactsResource.java
@@ -0,0 +1,78 @@
+/**
+ * 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.myriad.api;
+
+import com.codahale.metrics.annotation.Timed;
+import org.apache.myriad.configuration.MyriadConfiguration;
+
+import javax.inject.Inject;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import java.io.File;
+
+/**
+ * Defines the REST API to the Myriad configuration.
+ */
+@Path("/artifacts")
+@Produces(MediaType.APPLICATION_OCTET_STREAM)
+public class ArtifactsResource {
+  private String myriadEtc;
+  private String myriadBinary;
+
+  @Inject
+  public ArtifactsResource(MyriadConfiguration cfg) {
+    myriadEtc = cfg.getServedConfigPath().or("");
+    myriadBinary = cfg.getServedBinaryPath().or("");
+  }
+
+  @Timed
+  @GET
+  @Path("/config.tgz")
+  public Response getConfig() throws InterruptedException {
+    File file = new File(myriadEtc);
+    Response.ResponseBuilder response;
+    if (file.exists()) {
+      response = Response.ok((Object) file);
+      response.header("Content-Disposition", "attachment; filename=" + 
file.getName());
+    } else {
+      response = Response.status(Response.Status.BAD_REQUEST)
+          .entity("Path does not exist");
+    }
+    return response.build();
+  }
+
+  @Timed
+  @GET
+  @Path("/binary.tgz")
+  public Response getBinary() throws InterruptedException {
+    File file = new File(myriadBinary);
+    Response.ResponseBuilder response;
+    if (file.exists()) {
+      response = Response.ok((Object) file);
+      response.header("Content-Disposition", "attachment; filename=" + 
file.getName());
+    } else {
+      response = Response.status(Response.Status.BAD_REQUEST)
+          .entity("Path does not exist");
+    }
+    return response.build();
+  }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/5118cff3/myriad-scheduler/src/main/java/org/apache/myriad/configuration/MyriadConfiguration.java
----------------------------------------------------------------------
diff --git 
a/myriad-scheduler/src/main/java/org/apache/myriad/configuration/MyriadConfiguration.java
 
b/myriad-scheduler/src/main/java/org/apache/myriad/configuration/MyriadConfiguration.java
index 716a20a..f65bb9a 100644
--- 
a/myriad-scheduler/src/main/java/org/apache/myriad/configuration/MyriadConfiguration.java
+++ 
b/myriad-scheduler/src/main/java/org/apache/myriad/configuration/MyriadConfiguration.java
@@ -179,6 +179,11 @@ public class MyriadConfiguration {
   @JsonProperty
   private String mesosAuthenticationSecretFilename;
 
+  @JsonProperty
+  private String servedConfigPath;
+
+  @JsonProperty
+  private String servedBinaryPath;
 
   public MyriadConfiguration() {
   }
@@ -278,4 +283,12 @@ public class MyriadConfiguration {
     return mesosAuthenticationPrincipal;
   }
 
+  public Optional<String> getServedConfigPath() {
+    return Optional.fromNullable(servedConfigPath);
+  }
+
+  public Optional<String> getServedBinaryPath() {
+    return Optional.fromNullable(servedBinaryPath);
+  }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/5118cff3/myriad-scheduler/src/main/java/org/apache/myriad/configuration/MyriadExecutorConfiguration.java
----------------------------------------------------------------------
diff --git 
a/myriad-scheduler/src/main/java/org/apache/myriad/configuration/MyriadExecutorConfiguration.java
 
b/myriad-scheduler/src/main/java/org/apache/myriad/configuration/MyriadExecutorConfiguration.java
index 6afc086..ea98ef7 100644
--- 
a/myriad-scheduler/src/main/java/org/apache/myriad/configuration/MyriadExecutorConfiguration.java
+++ 
b/myriad-scheduler/src/main/java/org/apache/myriad/configuration/MyriadExecutorConfiguration.java
@@ -44,6 +44,10 @@ public class MyriadExecutorConfiguration {
   @JsonSerialize(using = OptionalSerializerString.class)
   private String nodeManagerUri;
 
+  @JsonProperty
+  @JsonSerialize(using = OptionalSerializerString.class)
+  private String configUri;
+
   /**
    * Download URL for JRE.
    * Ex: jvmUri: http://www.apache.org/myriad/jre-1.8.99.tar.gz
@@ -66,6 +70,10 @@ public class MyriadExecutorConfiguration {
     return Optional.fromNullable(nodeManagerUri);
   }
 
+  public Optional<String> getConfigUri() {
+    return Optional.fromNullable(configUri);
+  }
+
   public Optional<String> getJvmUri() {
     return Optional.fromNullable(jvmUri);
   }

http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/5118cff3/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/TaskFactory.java
----------------------------------------------------------------------
diff --git 
a/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/TaskFactory.java 
b/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/TaskFactory.java
index 9ed54a7..92e4cf7 100644
--- 
a/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/TaskFactory.java
+++ 
b/myriad-scheduler/src/main/java/org/apache/myriad/scheduler/TaskFactory.java
@@ -133,6 +133,12 @@ public interface TaskFactory {
         commandInfo.addUris(jvmUri);
       }
 
+      if (myriadExecutorConfiguration.getConfigUri().isPresent()) {
+        String configURI = myriadExecutorConfiguration.getConfigUri().get();
+        LOGGER.info("Getting Hadoop distribution from: {}", configURI);
+        commandInfo.addUris(URI.newBuilder().setValue(configURI).build());
+      }
+
       if (myriadExecutorConfiguration.getNodeManagerUri().isPresent()) {
         //Both FrameworkUser and FrameworkSuperuser to get all of the 
directory permissions correct.
         if (!(cfg.getFrameworkUser().isPresent() && 
cfg.getFrameworkSuperUser().isPresent())) {
@@ -143,14 +149,14 @@ public interface TaskFactory {
 
         //get the nodemanagerURI
         //We're going to extract ourselves, so setExtract is false
-        LOGGER.info("Getting Hadoop distribution from:" + nodeManagerUri);
+        LOGGER.info("Getting Hadoop distribution from: {}", nodeManagerUri);
         URI nmUri = 
URI.newBuilder().setValue(nodeManagerUri).setExtract(false).build();
 
         //get configs directly from resource manager
         String configUrlString = clGenerator.getConfigurationUrl();
         LOGGER.info("Getting config from:" + configUrlString);
         URI configUri = URI.newBuilder().setValue(configUrlString).build();
-        LOGGER.info("Slave will execute command:" + cmd);
+        LOGGER.info("Slave will execute command: {}",  cmd);
         commandInfo.addUris(nmUri).addUris(configUri).setValue("echo \"" + cmd 
+ "\";" + cmd);
         commandInfo.setUser(cfg.getFrameworkSuperUser().get());
 
@@ -162,7 +168,6 @@ public interface TaskFactory {
           commandInfo.setUser(cfg.getFrameworkUser().get());
         }
       }
-
       return commandInfo.build();
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/5118cff3/myriad-scheduler/src/main/java/org/apache/myriad/webapp/MyriadServletModule.java
----------------------------------------------------------------------
diff --git 
a/myriad-scheduler/src/main/java/org/apache/myriad/webapp/MyriadServletModule.java
 
b/myriad-scheduler/src/main/java/org/apache/myriad/webapp/MyriadServletModule.java
index 3aa3737..82d2bae 100644
--- 
a/myriad-scheduler/src/main/java/org/apache/myriad/webapp/MyriadServletModule.java
+++ 
b/myriad-scheduler/src/main/java/org/apache/myriad/webapp/MyriadServletModule.java
@@ -25,6 +25,7 @@ import org.apache.myriad.api.ClustersResource;
 import org.apache.myriad.api.ConfigurationResource;
 import org.apache.myriad.api.ControllerResource;
 import org.apache.myriad.api.SchedulerStateResource;
+import org.apache.myriad.api.ArtifactsResource;
 import org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider;
 
 /**
@@ -38,7 +39,7 @@ public class MyriadServletModule extends ServletModule {
     bind(ConfigurationResource.class);
     bind(SchedulerStateResource.class);
     bind(ControllerResource.class);
-
+    bind(ArtifactsResource.class);
     bind(GuiceContainer.class);
     bind(JacksonJaxbJsonProvider.class).in(Scopes.SINGLETON);
 

http://git-wip-us.apache.org/repos/asf/incubator-myriad/blob/5118cff3/myriad-scheduler/src/main/resources/myriad-config-default.yml
----------------------------------------------------------------------
diff --git a/myriad-scheduler/src/main/resources/myriad-config-default.yml 
b/myriad-scheduler/src/main/resources/myriad-config-default.yml
index a90de84..a2c143d 100644
--- a/myriad-scheduler/src/main/resources/myriad-config-default.yml
+++ b/myriad-scheduler/src/main/resources/myriad-config-default.yml
@@ -29,6 +29,8 @@ nativeLibrary: /usr/local/lib/libmesos.so
 zkServers: localhost:2181
 zkTimeout: 20000
 restApiPort: 8192
+#servedConfigPath: dist/config.tgz
+#servedBinaryPath: dist/hadoop-2.6.0.tgz
 profiles:
   zero:  # NMs launched with this profile dynamically obtain cpu/mem from Mesos
     cpu: 0
@@ -55,10 +57,12 @@ executor:
   path: file:///usr/local/libexec/mesos/myriad-executor-runnable-0.1.0.jar
   #The following should be used for a remotely distributed URI, hdfs assumed 
but other URI types valid.
   #nodeManagerUri: hdfs://namenode:port/dist/hadoop-2.7.0.tar.gz
+  #configUri: http://127.0.0.1/api/arifacts/config.tgz
   #path: hdfs://namenode:port/dist/myriad-executor-runnable-0.1.0.jar
   #jvmUri: https://downloads.mycompany.com/java/jre-7u76-linux-x64.tar.gz
 yarnEnvironment:
   YARN_HOME: /usr/local/hadoop
+  #HADOOP_CONF_DIR=config
   #YARN_HOME: hadoop-2.7.0 #this should be relative if nodeManagerUri is set
   #JAVA_HOME: /usr/lib/jvm/java-default #System dependent, but sometimes 
necessary
   #JAVA_HOME: jre1.7.0_76 # Path to JRE distribution, relative to sandbox 
directory

Reply via email to