You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by sr...@apache.org on 2014/05/30 20:30:53 UTC
git commit: AMBARI-5962. Implement slider app flex action - APIs
added. (srimanth)
Repository: ambari
Updated Branches:
refs/heads/branch-1.6.0.slider 7acff3bb1 -> 39e428ab6
AMBARI-5962. Implement slider app flex action - APIs added. (srimanth)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/39e428ab
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/39e428ab
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/39e428ab
Branch: refs/heads/branch-1.6.0.slider
Commit: 39e428ab609d74d22a9b4dfd2c25e5c4391afdac
Parents: 7acff3b
Author: Srimanth Gunturi <sg...@hortonworks.com>
Authored: Fri May 30 11:30:17 2014 -0700
Committer: Srimanth Gunturi <sg...@hortonworks.com>
Committed: Fri May 30 11:30:17 2014 -0700
----------------------------------------------------------------------
.../view/slider/SliderAppTypeComponent.java | 9 +++
.../view/slider/SliderAppsViewController.java | 5 ++
.../slider/SliderAppsViewControllerImpl.java | 85 ++++++++++++++++----
.../view/slider/rest/SliderAppsResource.java | 13 +++
4 files changed, 95 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/39e428ab/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppTypeComponent.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppTypeComponent.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppTypeComponent.java
index aa6c922..098ff5a 100644
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppTypeComponent.java
+++ b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppTypeComponent.java
@@ -24,6 +24,7 @@ public class SliderAppTypeComponent {
private String category;
private String displayName;
private int priority;
+ private int minInstanceCount;
private int instanceCount;
private int maxInstanceCount;
private int yarnMemory;
@@ -100,4 +101,12 @@ public class SliderAppTypeComponent {
public void setCategory(String category) {
this.category = category;
}
+
+ public int getMinInstanceCount() {
+ return minInstanceCount;
+ }
+
+ public void setMinInstanceCount(int minInstanceCount) {
+ this.minInstanceCount = minInstanceCount;
+ }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/39e428ab/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewController.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewController.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewController.java
index 823fea6..9485ea3 100644
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewController.java
+++ b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewController.java
@@ -20,6 +20,7 @@ package org.apache.ambari.view.slider;
import java.io.IOException;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import org.apache.hadoop.yarn.exceptions.YarnException;
@@ -82,4 +83,8 @@ public interface SliderAppsViewController {
public void thawApp(String appId) throws YarnException, IOException,
InterruptedException;
+
+
+ public void flexApp(String appId, Map<String, Integer> componentsMap)
+ throws YarnException, IOException, InterruptedException;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/39e428ab/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewControllerImpl.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewControllerImpl.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewControllerImpl.java
index f04c4a7..97919f6 100644
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewControllerImpl.java
+++ b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewControllerImpl.java
@@ -25,6 +25,7 @@ import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.inject.Inject;
import com.google.inject.Singleton;
+
import org.apache.ambari.view.ViewContext;
import org.apache.ambari.view.slider.clients.AmbariClient;
import org.apache.ambari.view.slider.clients.AmbariCluster;
@@ -53,6 +54,7 @@ import org.apache.slider.api.ClusterDescription;
import org.apache.slider.client.SliderClient;
import org.apache.slider.common.SliderKeys;
import org.apache.slider.common.params.ActionCreateArgs;
+import org.apache.slider.common.params.ActionFlexArgs;
import org.apache.slider.common.params.ActionFreezeArgs;
import org.apache.slider.common.params.ActionThawArgs;
import org.apache.slider.common.tools.SliderFileSystem;
@@ -95,6 +97,7 @@ public class SliderAppsViewControllerImpl implements SliderAppsViewController {
private List<SliderAppType> appTypes;
private Integer createAppCounter = -1;
private Map<String, MetricsHolder> appMetrics = new HashMap<String, MetricsHolder>();
+
private String getAppsFolderPath() {
return viewContext
.getAmbariProperty(org.apache.ambari.server.configuration.Configuration.RESOURCES_DIR_KEY)
@@ -350,8 +353,10 @@ public class SliderAppsViewControllerImpl implements SliderAppsViewController {
if (quickLinks != null && quickLinks.containsKey("JMX")) {
String jmxUrl = quickLinks.get("JMX");
if (matchedAppType != null) {
- MetricsHolder metricsHolder = appMetrics.get(matchedAppType.uniqueName());
- app.setJmx(sliderAppClient.getJmx(jmxUrl, viewContext, matchedAppType, metricsHolder));
+ MetricsHolder metricsHolder = appMetrics.get(matchedAppType
+ .uniqueName());
+ app.setJmx(sliderAppClient.getJmx(jmxUrl, viewContext,
+ matchedAppType, metricsHolder));
}
}
Map<String, Map<String, String>> configs = sliderAppClient
@@ -444,9 +449,10 @@ public class SliderAppsViewControllerImpl implements SliderAppsViewController {
}
if (quickLinks != null && quickLinks.containsKey("Metrics")) {
String metricsUrl = quickLinks.get("Metrics");
- MetricsHolder metricsHolder = appMetrics.get(matchedAppType.uniqueName());
- app.setMetrics(
- sliderAppClient.getGangliaMetrics(metricsUrl, gangliaMetrics, null, viewContext, matchedAppType, metricsHolder));
+ MetricsHolder metricsHolder = appMetrics.get(matchedAppType
+ .uniqueName());
+ app.setMetrics(sliderAppClient.getGangliaMetrics(metricsUrl,
+ gangliaMetrics, null, viewContext, matchedAppType, metricsHolder));
}
}
}
@@ -691,10 +697,12 @@ public class SliderAppsViewControllerImpl implements SliderAppsViewController {
appTypeComponent.setName(component.getName());
appTypeComponent.setYarnMemory(1024);
appTypeComponent.setYarnCpuCores(1);
+ // Updated below if present in resources.json
+ appTypeComponent.setInstanceCount(1);
// appTypeComponent.setPriority(component.);
if (component.getMinInstanceCount() != null) {
- appTypeComponent.setInstanceCount(Integer.parseInt(component
- .getMinInstanceCount()));
+ appTypeComponent.setMinInstanceCount(Integer
+ .parseInt(component.getMinInstanceCount()));
}
if (component.getMaxInstanceCount() != null) {
appTypeComponent.setMaxInstanceCount(Integer
@@ -704,12 +712,19 @@ public class SliderAppsViewControllerImpl implements SliderAppsViewController {
JsonElement componentJson = resourcesJson.getAsJsonObject()
.get("components").getAsJsonObject()
.get(component.getName());
- if (componentJson != null
- && componentJson.getAsJsonObject().has(
- "yarn.role.priority")) {
- appTypeComponent.setPriority(Integer.parseInt(componentJson
- .getAsJsonObject().get("yarn.role.priority")
- .getAsString()));
+ if (componentJson != null) {
+ if (componentJson.getAsJsonObject().has(
+ "yarn.role.priority")) {
+ appTypeComponent.setPriority(Integer
+ .parseInt(componentJson.getAsJsonObject()
+ .get("yarn.role.priority").getAsString()));
+ }
+ if (componentJson.getAsJsonObject().has(
+ "yarn.component.instances")) {
+ appTypeComponent.setInstanceCount(Integer
+ .parseInt(componentJson.getAsJsonObject()
+ .get("yarn.component.instances").getAsString()));
+ }
}
}
appTypeComponent.setCategory(component.getCategory());
@@ -717,10 +732,12 @@ public class SliderAppsViewControllerImpl implements SliderAppsViewController {
}
MetricsHolder metricsHolder = new MetricsHolder();
- metricsHolder.setJmxMetrics(readMetrics(zipFile, "jmx_metrics.json"));
+ metricsHolder.setJmxMetrics(readMetrics(zipFile,
+ "jmx_metrics.json"));
metricsHolder.setGangliaMetrics(readMetrics(zipFile,
- "ganglia_metrics.json"));
- appType.setSupportedMetrics(getSupportedMetrics(metricsHolder.getGangliaMetrics()));
+ "ganglia_metrics.json"));
+ appType.setSupportedMetrics(getSupportedMetrics(metricsHolder
+ .getGangliaMetrics()));
appMetrics.put(appType.uniqueName(), metricsHolder);
appType.setTypeComponents(appTypeComponentList);
@@ -964,4 +981,38 @@ public class SliderAppsViewControllerImpl implements SliderAppsViewController {
Thread.currentThread().setContextClassLoader(currentClassLoader);
}
}
-}
+
+ @Override
+ public void flexApp(String appId, final Map<String, Integer> componentsMap)
+ throws YarnException, IOException, InterruptedException {
+ ClassLoader currentClassLoader = Thread.currentThread()
+ .getContextClassLoader();
+ Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
+ try {
+ Set<String> properties = new HashSet<String>();
+ properties.add("id");
+ properties.add("name");
+ final SliderApp sliderApp = getSliderApp(appId, properties);
+ if (sliderApp == null) {
+ throw new ApplicationNotFoundException(appId);
+ }
+ ApplicationId applicationId = UserGroupInformation.getBestUGI(null,
+ "yarn").doAs(new PrivilegedExceptionAction<ApplicationId>() {
+ public ApplicationId run() throws IOException, YarnException {
+ SliderClient sliderClient = getSliderClient();
+ ActionFlexArgs flexArgs = new ActionFlexArgs();
+ flexArgs.parameters.add(sliderApp.getName());
+ for (Entry<String, Integer> e : componentsMap.entrySet()){
+ flexArgs.componentDelegate.componentTuples.add(e.getKey());
+ flexArgs.componentDelegate.componentTuples.add(e.getValue().toString());
+ }
+ sliderClient.actionFlex(sliderApp.getName(), flexArgs);
+ return sliderClient.applicationId;
+ }
+ });
+ logger.debug("Slider app has been thawed - " + applicationId.toString());
+ } finally {
+ Thread.currentThread().setContextClassLoader(currentClassLoader);
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/39e428ab/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/SliderAppsResource.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/SliderAppsResource.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/SliderAppsResource.java
index 4459db2..6cee80e 100644
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/SliderAppsResource.java
+++ b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/rest/SliderAppsResource.java
@@ -21,6 +21,9 @@ package org.apache.ambari.view.slider.rest;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
@@ -93,6 +96,16 @@ public class SliderAppsResource {
else if ("RUNNING".equals(newState))
sliderAppsViewController.thawApp(appId);
} else if (requestJson.has("components")) {
+ Map<String, Integer> componentsMap = new HashMap<String, Integer>();
+ JsonObject componentsJson = requestJson.get("components")
+ .getAsJsonObject();
+ for (Entry<String, JsonElement> e : componentsJson.entrySet()) {
+ String componentName = e.getKey();
+ int instanceCount = e.getValue().getAsJsonObject()
+ .get("instanceCount").getAsInt();
+ componentsMap.put(componentName, instanceCount);
+ }
+ sliderAppsViewController.flexApp(appId, componentsMap);
}
}
String sliderApp = sliderAppsViewController