You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by rl...@apache.org on 2017/06/23 13:29:34 UTC
[39/42] ambari git commit: AMBARI-21330.Remove slider view from
Ambari-3.0.0(Venkata Sairam)
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/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
deleted file mode 100644
index 30bc2b0..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/SliderAppsViewControllerImpl.java
+++ /dev/null
@@ -1,1510 +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.ambari.view.slider;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.reflect.UndeclaredThrowableException;
-import java.net.URI;
-import java.security.PrivilegedExceptionAction;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.regex.Pattern;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipException;
-
-import org.apache.ambari.view.ViewContext;
-import org.apache.ambari.view.slider.ViewStatus.Validation;
-import org.apache.ambari.view.slider.clients.AmbariCluster;
-import org.apache.ambari.view.slider.clients.AmbariClusterInfo;
-import org.apache.ambari.view.slider.clients.AmbariHostComponent;
-import org.apache.ambari.view.slider.clients.AmbariService;
-import org.apache.ambari.view.slider.clients.AmbariServiceInfo;
-import org.apache.ambari.view.slider.rest.client.AmbariHttpClient;
-import org.apache.ambari.view.slider.rest.client.Metric;
-import org.apache.ambari.view.slider.rest.client.SliderAppMasterClient;
-import org.apache.ambari.view.slider.rest.client.SliderAppMasterClient.SliderAppMasterData;
-import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
-import org.apache.commons.compress.archivers.zip.ZipFile;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.io.filefilter.RegexFileFilter;
-import org.apache.commons.lang.StringUtils;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fs.FileSystem;
-import org.apache.hadoop.fs.Path;
-import org.apache.hadoop.hdfs.HdfsConfiguration;
-import org.apache.hadoop.security.UserGroupInformation;
-import org.apache.hadoop.yarn.api.records.ApplicationId;
-import org.apache.hadoop.yarn.api.records.ApplicationReport;
-import org.apache.hadoop.yarn.api.records.YarnApplicationState;
-import org.apache.hadoop.yarn.conf.YarnConfiguration;
-import org.apache.hadoop.yarn.exceptions.ApplicationNotFoundException;
-import org.apache.hadoop.yarn.exceptions.YarnException;
-import org.apache.slider.api.ClusterDescription;
-import org.apache.slider.client.SliderClient;
-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.ActionInstallKeytabArgs;
-import org.apache.slider.common.params.ActionInstallPackageArgs;
-import org.apache.slider.common.params.ActionThawArgs;
-import org.apache.slider.common.tools.SliderUtils;
-import org.apache.slider.core.exceptions.SliderException;
-import org.apache.slider.core.exceptions.UnknownApplicationInstanceException;
-import org.apache.slider.core.main.LauncherExitCodes;
-import org.apache.slider.providers.agent.application.metadata.Application;
-import org.apache.slider.providers.agent.application.metadata.Component;
-import org.apache.slider.providers.agent.application.metadata.Metainfo;
-import org.apache.slider.providers.agent.application.metadata.MetainfoParser;
-import org.codehaus.jackson.map.ObjectMapper;
-import org.codehaus.jackson.type.TypeReference;
-
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
-import com.google.gson.JsonPrimitive;
-import com.google.inject.Inject;
-import com.google.inject.Singleton;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-@Singleton
-public class SliderAppsViewControllerImpl implements SliderAppsViewController {
- private static final Logger logger = LoggerFactory
- .getLogger(SliderAppsViewControllerImpl.class);
- private static String METRICS_PREFIX = "metrics/";
- @Inject
- private ViewContext viewContext;
- private List<SliderAppType> appTypes;
- private Integer createAppCounter = -1;
- @Inject
- private SliderAppsAlerts sliderAlerts;
- private Map<String, MetricsHolder> appMetrics = new HashMap<String, MetricsHolder>();
-
- private String getAppsFolderPath() {
- return viewContext.getAmbariProperty("resources.dir") + "/apps";
- }
-
- private String getAppsCreateFolderPath() {
- return getAppsFolderPath() + "/create";
- }
-
- @Override
- public ViewStatus getViewStatus() {
- ViewStatus status = new ViewStatus();
- Map<String, String> newHadoopConfigs = new HashMap<String, String>();
- status.setVersion(SliderAppsConfiguration.INSTANCE.getVersion());
- String ambariCluster = getViewParameterValue(PARAM_AMBARI_CLUSTER_API);
- String ambariUsername = getViewParameterValue(PARAM_AMBARI_USERNAME);
- String ambariPassword = getViewParameterValue(PARAM_AMBARI_PASSWORD);
- if (ambariCluster != null && ambariUsername != null
- && ambariPassword != null && ambariCluster.trim().length() > 0
- && ambariUsername.trim().length() > 0
- && ambariPassword.trim().length() > 0) {
- String APIPREFIX = "/api/v1/clusters/";
- int index = ambariCluster.indexOf(APIPREFIX);
- if (index > 0) {
- String ambariUrl = ambariCluster.substring(0, index);
- String clusterName = ambariCluster
- .substring(index + APIPREFIX.length());
- if (clusterName.endsWith("/")) {
- clusterName = clusterName.substring(0, clusterName.length() - 1);
- }
- AmbariHttpClient ambariClient = new AmbariHttpClient(ambariUrl,
- ambariUsername, ambariPassword, viewContext);
- try {
- AmbariClusterInfo clusterInfo = ambariClient.getClusterInfo();
- if (clusterInfo!=null && clusterName.equals(clusterInfo.getName())) {
- AmbariCluster cluster = ambariClient.getCluster(clusterInfo);
- AmbariServiceInfo hdfsServiceInfo = null;
- AmbariServiceInfo yarnServiceInfo = null;
- // Validate stack-version
- Validation validateStackVersion = validateStackVersion(clusterInfo.getVersion());
- if (validateStackVersion != null) {
- status.getValidations().add(validateStackVersion);
- }
- for (AmbariServiceInfo svc : cluster.getServices()) {
- if ("HDFS".equals(svc.getId())) {
- hdfsServiceInfo = svc;
- } else if ("YARN".equals(svc.getId())) {
- yarnServiceInfo = svc;
- }
- }
- // HDFS
- if (hdfsServiceInfo != null) {
- if (!hdfsServiceInfo.isStarted()) {
- status.getValidations().add(
- new ViewStatus.Validation("HDFS service is not started"));
- }
- } else {
- status.getValidations().add(
- new ViewStatus.Validation("HDFS service is not installed"));
- }
- // YARN
- if (yarnServiceInfo != null) {
- if (!yarnServiceInfo.isStarted()) {
- status.getValidations().add(
- new ViewStatus.Validation("YARN service is not started"));
- }
- } else {
- status.getValidations().add(
- new ViewStatus.Validation("YARN service is not installed"));
- }
- // JAVA_HOME
- Map<String, String> ambariServerConfigs = ambariClient.getAmbariServerConfigs();
- if (ambariServerConfigs.containsKey("java.home")) {
- newHadoopConfigs.put("java.home", ambariServerConfigs.get("java.home"));
- status.getParameters().put(PROPERTY_JAVA_HOME, ambariServerConfigs.get("java.home"));
- }
- // Configs
- if (cluster.getDesiredConfigs().containsKey("core-site")) {
- Map<String, String> coreSiteConfigs = ambariClient
- .getConfiguration(cluster, "core-site", cluster
- .getDesiredConfigs().get("core-site"));
- newHadoopConfigs.putAll(coreSiteConfigs);
- }
- if (cluster.getDesiredConfigs().containsKey("cluster-env")) {
- Map<String, String> clusterEnvConfigs = ambariClient
- .getConfiguration(cluster, "cluster-env", cluster
- .getDesiredConfigs().get("cluster-env"));
- newHadoopConfigs.put("security_enabled",
- clusterEnvConfigs.get("security_enabled"));
- }
- if (cluster.getDesiredConfigs().containsKey("hdfs-site")) {
- Map<String, String> hdfsSiteConfigs = ambariClient
- .getConfiguration(cluster, "hdfs-site", cluster
- .getDesiredConfigs().get("hdfs-site"));
- newHadoopConfigs.putAll(hdfsSiteConfigs);
- }
- if (cluster.getDesiredConfigs().containsKey("yarn-site")) {
- Map<String, String> yarnSiteConfigs = ambariClient
- .getConfiguration(cluster, "yarn-site", cluster
- .getDesiredConfigs().get("yarn-site"));
- newHadoopConfigs.putAll(yarnSiteConfigs);
- status.getParameters().put(PROPERTY_YARN_RM_WEBAPP_URL,
- newHadoopConfigs.get("yarn.resourcemanager.webapp.address"));
- }
- if (cluster.getDesiredConfigs().containsKey("yarn-env")) {
- Map<String, String> yarnEnvConfigs = ambariClient.getConfiguration(cluster, "yarn-env", cluster
- .getDesiredConfigs().get("yarn-env"));
- String yarnUser = yarnEnvConfigs.get("yarn_user");
- if (yarnUser == null || yarnUser.trim().length() < 1) {
- yarnUser = "yarn";
- }
- newHadoopConfigs.put("yarn_user", yarnUser); // YARN service user
- }
- newHadoopConfigs.put("slider.user", getUserToRunAs(newHadoopConfigs)); // Slider user
- status.getParameters().put(PROPERTY_SLIDER_USER, newHadoopConfigs.get("slider.user"));
- if (newHadoopConfigs.containsKey("security_enabled")) {
- boolean securityEnabled = Boolean.valueOf(newHadoopConfigs.get("security_enabled"));
- if (securityEnabled) {
- String yarnUser = newHadoopConfigs.get("yarn_user");
- if (yarnUser != null && yarnUser.equals(newHadoopConfigs.get("slider.user"))) {
- status.getValidations().add(
- new ViewStatus.Validation("Slider view does not support accessing secured YARN cluster as YARN superuser (" + yarnUser + ")"));
- }
- }
- }
- if (cluster.getDesiredConfigs().containsKey("zoo.cfg")) {
- Map<String, String> zkEnvConfigs = ambariClient.getConfiguration(
- cluster, "zoo.cfg",
- cluster.getDesiredConfigs().get("zoo.cfg"));
- StringBuilder zkQuorumBuilder = new StringBuilder();
- String port = zkEnvConfigs.get("clientPort");
- AmbariService zkService = ambariClient.getService(cluster,
- "ZOOKEEPER");
- if (zkService != null) {
- List<AmbariHostComponent> hostsList = zkService
- .getComponentsToHostComponentsMap().get("ZOOKEEPER_SERVER");
- int count = 1;
- for (AmbariHostComponent host : hostsList) {
- zkQuorumBuilder.append(host.getHostName() + ":" + port);
- if (count++ < hostsList.size()) {
- zkQuorumBuilder.append(",");
- }
- }
- newHadoopConfigs.put(PROPERTY_SLIDER_ZK_QUORUM,
- zkQuorumBuilder.toString());
- } else {
- status.getValidations().add(
- new ViewStatus.Validation(
- "ZooKeeper service is not installed"));
- }
- } else {
- status.getValidations()
- .add(
- new ViewStatus.Validation(
- "ZooKeeper service is not installed"));
- }
- if (cluster.getDesiredConfigs().containsKey("ams-site")) {
- Map<String, String> amsConfigs = ambariClient.getConfiguration(cluster, "ams-site", cluster.getDesiredConfigs().get("ams-site"));
- AmbariService amsService = ambariClient.getService(cluster, "AMBARI_METRICS");
- // TODO add metrics collector HA support
- List<AmbariHostComponent> hostsList = amsService.getComponentsToHostComponentsMap().get("METRICS_COLLECTOR");
- if (hostsList != null && hostsList.size() > 0) {
- String collectorHostName = hostsList.get(0).getHostName();
- newHadoopConfigs.put(PROPERTY_METRICS_SERVER_HOSTNAME, collectorHostName);
- status.getParameters().put(PROPERTY_METRICS_SERVER_HOSTNAME, collectorHostName);
- }
- if (amsConfigs != null && amsConfigs.containsKey("timeline.metrics.service.webapp.address")) {
- String portString = amsConfigs.get("timeline.metrics.service.webapp.address");
- int sepIndex = portString.indexOf(':');
- if (sepIndex > -1) {
- portString = portString.substring(sepIndex + 1);
- }
- newHadoopConfigs.put(PROPERTY_METRICS_SERVER_PORT, portString);
- status.getParameters().put(PROPERTY_METRICS_SERVER_PORT, portString);
- }
- newHadoopConfigs.put(PROPERTY_METRICS_LIBRARY_PATH, "file:///usr/lib/ambari-metrics-hadoop-sink/ambari-metrics-hadoop-sink.jar");
- status.getParameters().put(PROPERTY_METRICS_LIBRARY_PATH, "file:///usr/lib/ambari-metrics-hadoop-sink/ambari-metrics-hadoop-sink.jar");
- }
- Validation validateHDFSAccess = validateHDFSAccess(newHadoopConfigs, hdfsServiceInfo);
- if (validateHDFSAccess != null) {
- status.getValidations().add(validateHDFSAccess);
- }
- } else {
- status.getValidations().add(
- new ViewStatus.Validation("Ambari cluster with ID ["
- + clusterName + "] was not found on Ambari server"));
- }
- } catch (Throwable e) {
- logger.error("Exception determining view status", e);
- String message = e.getClass().getName() + ": " + e.getMessage();
- if (e instanceof RuntimeException && e.getCause() != null) {
- message = e.getCause().getClass().getName() + ": " + e.getMessage();
- }
- message = String.format("Unable to initialize Slider view: %s", message);
- status.getValidations().add(new ViewStatus.Validation(message));
- }
- } else {
- status
- .getValidations()
- .add(
- new ViewStatus.Validation(
- "Ambari server cluster API URL should include cluster name, for example http://ambari.server:8080/api/v1/clusters/c1"));
- }
- } else {
- status.getValidations().add(
- new ViewStatus.Validation(
- "View parameters specifying Ambari details required"));
- }
- synchronized (viewContext) {
- if (!newHadoopConfigs.equals(viewContext.getInstanceData())) {
- Set<String> removeKeys = new HashSet<String>(viewContext.getInstanceData().keySet());
- for (Entry<String, String> e : newHadoopConfigs.entrySet()) {
- viewContext.putInstanceData(e.getKey(), e.getValue());
- removeKeys.remove(e.getKey());
- }
- for (String key : removeKeys) {
- viewContext.removeInstanceData(key);
- }
- }
- }
- return status;
- }
-
- /**
- * Slider-view supports only some stack-versions. This method validates that the targeted cluster is supported.
- *
- * @param clusterVersion
- * @return
- */
- private Validation validateStackVersion(String clusterVersion) {
- // Assuming cluster versions are of the format "X-a.b.c.d"
- String stackName = clusterVersion;
- String stackVersion = clusterVersion;
- int dashIndex = clusterVersion.indexOf('-');
- if (dashIndex > -1 && dashIndex < clusterVersion.length() - 1) {
- stackName = stackName.substring(0, dashIndex);
- stackVersion = stackVersion.substring(dashIndex + 1);
- }
- String[] versionSplits = stackVersion.split("\\.");
- if (!"HDP".equals(stackName) || versionSplits.length < 2) {
- return new Validation("Stack version (" + clusterVersion + ") used by cluster is not supported");
- }
- try {
- int majorVersion = Integer.parseInt(versionSplits[0]);
- int minorVersion = Integer.parseInt(versionSplits[1]);
- if (!(majorVersion >= 2 && minorVersion >= 2)) {
- return new Validation("Stack version (" + clusterVersion + ") used by cluster is not supported");
- }
- } catch (NumberFormatException e) {
- return new Validation("Stack version (" + clusterVersion + ") used by cluster is not supported");
- }
- return null;
- }
-
- private Validation validateHDFSAccess(final Map<String, String> hadoopConfigs, AmbariServiceInfo hdfsServiceInfo) {
- if (hdfsServiceInfo != null && hdfsServiceInfo.isStarted()) {
- if (hadoopConfigs.containsKey("fs.defaultFS")) {
- try {
- invokeHDFSClientRunnable(new HDFSClientRunnable<Boolean>() {
- @Override
- public Boolean run(FileSystem fs) throws IOException, InterruptedException {
- Path homePath = fs.getHomeDirectory();
- fs.listFiles(homePath, false);
- return Boolean.TRUE;
- }
- }, hadoopConfigs);
- } catch (IOException e) {
- String message;
- if (hadoopConfigs.get("security_enabled").toLowerCase().equals("true")
- && (getViewParameterValue(PARAM_VIEW_PRINCIPAL) == null
- || getViewParameterValue(PARAM_VIEW_PRINCIPAL_KEYTAB) == null)) {
- message = "Slider View requires access to user's home directory in HDFS to proceed. Please check the kerberos configs";
- } else {
- message = "Slider View requires access to user's home directory in HDFS to proceed. Contact your administrator to create the home directory. ("
- + e.getMessage() + ")";
- }
- logger.warn(message, e);
- return new Validation(message);
- } catch (InterruptedException e) {
- String message = "Slider View requires access to user's home directory in HDFS to proceed. Contact your administrator to create the home directory. ("
- + e.getMessage() + ")";
- logger.warn(message, e);
- return new Validation(message);
- }
- } else {
- return new Validation("Location of HDFS filesystem is unknown for verification. Please check the 'fs.defaultFS' config in core-site.xml");
- }
- }
- return null;
- }
-
- private String getApplicationIdString(ApplicationId appId) {
- return Long.toString(appId.getClusterTimestamp()) + "_"
- + Integer.toString(appId.getId());
- }
-
- private ApplicationId getApplicationId(String appIdString) {
- if (appIdString != null) {
- int index = appIdString.indexOf('_');
- if (index > -1 && index < appIdString.length() - 1) {
- ApplicationId appId = ApplicationId.newInstance(
- Long.parseLong(appIdString.substring(0, index)),
- Integer.parseInt(appIdString.substring(index + 1)));
- return appId;
- }
- }
- return null;
- }
-
- private static interface SliderClientContextRunnable<T> {
- public T run(SliderClient sliderClient) throws YarnException, IOException, InterruptedException;
- }
-
- private static interface HDFSClientRunnable<T> {
- public T run(FileSystem fs) throws IOException, InterruptedException;
- }
-
- private String getUserToRunAs() {
- return getUserToRunAs(getHadoopConfigs());
- }
-
- private String getUserToRunAs(Map<String, String> hadoopConfigs) {
- String user = getViewParameterValue(PARAM_SLIDER_USER);
- if (user == null || user.trim().length() < 1) {
- if (hadoopConfigs.containsKey("yarn_user")) {
- return hadoopConfigs.get("yarn_user");
- }
- return "yarn";
- } else if ("${username}".equals(user)) {
- return viewContext.getUsername();
- } else {
- return user;
- }
- }
-
- private <T> T invokeHDFSClientRunnable(final HDFSClientRunnable<T> runnable, final Map<String, String> hadoopConfigs) throws IOException,
- InterruptedException {
- ClassLoader currentClassLoader = Thread.currentThread().getContextClassLoader();
- Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
- try {
- boolean securityEnabled = Boolean.valueOf(hadoopConfigs.get("security_enabled"));
- final HdfsConfiguration hdfsConfiguration = new HdfsConfiguration();
- for (Entry<String, String> entry : hadoopConfigs.entrySet()) {
- hdfsConfiguration.set(entry.getKey(), entry.getValue());
- }
- UserGroupInformation.setConfiguration(hdfsConfiguration);
- UserGroupInformation sliderUser;
- String loggedInUser = getUserToRunAs(hadoopConfigs);
- if (securityEnabled) {
- String viewPrincipal = getViewParameterValue(PARAM_VIEW_PRINCIPAL);
- String viewPrincipalKeytab = getViewParameterValue(PARAM_VIEW_PRINCIPAL_KEYTAB);
- UserGroupInformation ambariUser = UserGroupInformation.loginUserFromKeytabAndReturnUGI(viewPrincipal, viewPrincipalKeytab);
- if (loggedInUser.equals(ambariUser.getShortUserName())) {
- // HDFS throws exception when caller tries to impresonate themselves.
- // User: admin@EXAMPLE.COM is not allowed to impersonate admin
- sliderUser = ambariUser;
- } else {
- sliderUser = UserGroupInformation.createProxyUser(loggedInUser, ambariUser);
- }
- } else {
- sliderUser = UserGroupInformation.getBestUGI(null, loggedInUser);
- }
- try {
- T value = sliderUser.doAs(new PrivilegedExceptionAction<T>() {
- @Override
- public T run() throws Exception {
- String fsPath = hadoopConfigs.get("fs.defaultFS");
- FileSystem fs = FileSystem.get(URI.create(fsPath), hdfsConfiguration);
- try {
- return runnable.run(fs);
- } finally {
- fs.close();
- }
- }
- });
- return value;
- } catch (UndeclaredThrowableException e) {
- throw e;
- }
- } finally {
- Thread.currentThread().setContextClassLoader(currentClassLoader);
- }
- }
-
- private <T> T invokeSliderClientRunnable(final SliderClientContextRunnable<T> runnable) throws IOException, InterruptedException, YarnException {
- ClassLoader currentClassLoader = Thread.currentThread().getContextClassLoader();
- Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
- try {
- boolean securityEnabled = Boolean.valueOf(getHadoopConfigs().get("security_enabled"));
- UserGroupInformation.setConfiguration(getSliderClientConfiguration());
- UserGroupInformation sliderUser;
- String loggedInUser = getUserToRunAs();
- if (securityEnabled) {
- String viewPrincipal = getViewParameterValue(PARAM_VIEW_PRINCIPAL);
- String viewPrincipalKeytab = getViewParameterValue(PARAM_VIEW_PRINCIPAL_KEYTAB);
- UserGroupInformation ambariUser = UserGroupInformation.loginUserFromKeytabAndReturnUGI(viewPrincipal, viewPrincipalKeytab);
- if (loggedInUser.equals(ambariUser.getShortUserName())) {
- // HDFS throws exception when caller tries to impresonate themselves.
- // User: admin@EXAMPLE.COM is not allowed to impersonate admin
- sliderUser = ambariUser;
- } else {
- sliderUser = UserGroupInformation.createProxyUser(loggedInUser, ambariUser);
- }
- } else {
- sliderUser = UserGroupInformation.getBestUGI(null, loggedInUser);
- }
- try {
- T value = sliderUser.doAs(new PrivilegedExceptionAction<T>() {
- @Override
- public T run() throws Exception {
- final SliderClient sliderClient = createSliderClient();
- try {
- return runnable.run(sliderClient);
- } finally {
- destroySliderClient(sliderClient);
- }
- }
- });
- return value;
- } catch (UndeclaredThrowableException e) {
- Throwable cause = e.getCause();
- if (cause instanceof YarnException) {
- YarnException ye = (YarnException) cause;
- throw ye;
- }
- throw e;
- }
- } finally {
- Thread.currentThread().setContextClassLoader(currentClassLoader);
- }
- }
-
- @Override
- public boolean appExists(final String appName) throws IOException, InterruptedException, YarnException {
- return invokeSliderClientRunnable(new SliderClientContextRunnable<Boolean>() {
- @Override
- public Boolean run(SliderClient sliderClient) throws YarnException, IOException {
- if (appName != null) {
- try {
- return sliderClient.actionExists(appName, false) == SliderClient.EXIT_SUCCESS;
- } catch (UnknownApplicationInstanceException e) {
- return Boolean.FALSE;
- }
- }
- return Boolean.FALSE;
- }
- });
- }
-
- @Override
- public SliderApp getSliderApp(final String applicationId, final Set<String> properties)
- throws YarnException, IOException, InterruptedException {
- return invokeSliderClientRunnable(new SliderClientContextRunnable<SliderApp>() {
- @Override
- public SliderApp run(SliderClient sliderClient) throws YarnException, IOException {
- if (applicationId!=null) {
- ApplicationId appId = getApplicationId(applicationId);
- if (appId != null) {
- ApplicationReport yarnApp = sliderClient.getApplicationReport(appId);
- return createSliderAppObject(yarnApp, properties, sliderClient);
- }
- }
- return null;
- }
- });
- }
-
- private SliderApp createSliderAppObject(ApplicationReport yarnApp,
- Set<String> properties, SliderClient sliderClient) {
- if (yarnApp == null) {
- return null;
- }
-
- SliderApp app = new SliderApp();
- app.setState(yarnApp.getYarnApplicationState().name());
-
- // Valid Slider App?
- // We want all Slider apps except the ones which properly finished.
- if (YarnApplicationState.FINISHED.equals(yarnApp.getYarnApplicationState())) {
- try {
- if (sliderClient.actionExists(yarnApp.getName(), false) == LauncherExitCodes.EXIT_SUCCESS) {
- app.setState(SliderApp.STATE_FROZEN);
- }
- } catch (UnknownApplicationInstanceException e) {
- return null; // Application not in HDFS - means it is not frozen
- } catch (YarnException e) {
- logger.warn(
- "Unable to determine frozen state for " + yarnApp.getName(), e);
- return null;
- } catch (IOException e) {
- logger.warn(
- "Unable to determine frozen state for " + yarnApp.getName(), e);
- return null;
- }
- }
- if (YarnApplicationState.KILLED.equals(yarnApp.getYarnApplicationState()) || YarnApplicationState.FAILED.equals(yarnApp.getYarnApplicationState())) {
- try {
- if (sliderClient.actionExists(yarnApp.getName(), false) != LauncherExitCodes.EXIT_SUCCESS) {
- // YARN application is killed or failed, and no HDFS content - Application has been destroyed.
- return null;
- }
- } catch (UnknownApplicationInstanceException e) {
- return null; // Application not in HDFS - means it is not frozen
- } catch (YarnException e) {
- logger.warn("Unable to determine status of killed app " + yarnApp.getName(), e);
- return null;
- } catch (IOException e) {
- logger.warn("Unable to determine status of killed app " + yarnApp.getName(), e);
- return null;
- }
- }
-
- app.setId(getApplicationIdString(yarnApp.getApplicationId()));
- app.setName(yarnApp.getName());
- app.setUser(yarnApp.getUser());
- app.setDiagnostics(yarnApp.getDiagnostics());
- app.setYarnId(yarnApp.getApplicationId().toString());
- app.setStartTime(yarnApp.getStartTime());
- app.setEndTime(yarnApp.getFinishTime());
- Set<String> applicationTags = yarnApp.getApplicationTags();
- if (applicationTags != null && applicationTags.size() > 0) {
- for (String tag : applicationTags) {
- int index = tag.indexOf(':');
- if (index > 0 && index < tag.length() - 1) {
- String key = tag.substring(0, index).trim();
- String value = tag.substring(index + 1).trim();
- if ("name".equals(key)) {
- app.setType(value);
- app.setTypeId(value.toUpperCase() + "-" + app.getAppVersion());
- } else if ("version".equals(key)) {
- app.setAppVersion(value);
- app.setTypeId(app.getType() + "-" + value);
- } else if ("description".equals(key)) {
- app.setDescription(value);
- }
- }
- }
- }
- if (properties != null && !properties.isEmpty()) {
- SliderAppType matchedAppType = null;
- List<SliderAppType> matchingAppTypes = getSliderAppTypes(null);
- if (matchingAppTypes != null && matchingAppTypes.size() > 0) {
- for (SliderAppType appType : matchingAppTypes) {
- if ((appType.getTypeName() != null && appType.getTypeName()
- .equalsIgnoreCase(app.getType()))
- && (appType.getTypeVersion() != null && appType.getTypeVersion()
- .equalsIgnoreCase(app.getAppVersion()))) {
- matchedAppType = appType;
- app.setTypeId(appType.getId());
- break;
- }
- }
- }
-
- SliderAppMasterClient sliderAppClient = yarnApp.getTrackingUrl() == null ? null
- : new SliderAppMasterClient(yarnApp.getTrackingUrl(), viewContext);
- SliderAppMasterData appMasterData = null;
- Map<String, String> quickLinks = new HashMap<String, String>();
- Set<String> metrics = new HashSet<String>();
- for (String property : properties) {
- if ("RUNNING".equals(app.getState())) {
- if (sliderAppClient != null) {
- if (appMasterData == null) {
- appMasterData = sliderAppClient.getAppMasterData();
- }
- if (appMasterData!=null && "urls".equals(property.toLowerCase())) {
- if (quickLinks.isEmpty()) {
- quickLinks = sliderAppClient
- .getQuickLinks(appMasterData.publisherUrl);
- }
- app.setUrls(quickLinks);
- } else if (appMasterData!=null && "configs".equals(property.toLowerCase())) {
- Map<String, Map<String, String>> configs = sliderAppClient
- .getConfigs(appMasterData.publisherUrl);
- app.setConfigs(configs);
- } else if (appMasterData!=null && "jmx".equals(property.toLowerCase())) {
- if (quickLinks.isEmpty()) {
- quickLinks = sliderAppClient
- .getQuickLinks(appMasterData.publisherUrl);
- }
- 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));
- }
- }
- Map<String, Map<String, String>> configs = sliderAppClient
- .getConfigs(appMasterData.publisherUrl);
- app.setConfigs(configs);
- } else if ("components".equals(property.toLowerCase())) {
- try {
- ClusterDescription description = sliderClient
- .getClusterDescription(yarnApp.getName());
- if (description != null && description.status != null
- && !description.status.isEmpty()) {
- Map<String, SliderAppComponent> componentTypeMap = new HashMap<String, SliderAppComponent>();
- for (Entry<String, Object> e : description.status.entrySet()) {
- @SuppressWarnings("unchecked")
- Map<String, Map<String, Map<String, Object>>> componentsObj = (Map<String, Map<String, Map<String, Object>>>) e
- .getValue();
- boolean isLive = "live".equals(e.getKey());
- for (Entry<String, Map<String, Map<String, Object>>> componentEntry : componentsObj
- .entrySet()) {
- SliderAppComponent appComponent = componentTypeMap
- .get(componentEntry.getKey());
- if (appComponent == null) {
- appComponent = new SliderAppComponent();
- appComponent.setComponentName(componentEntry.getKey());
- appComponent
- .setActiveContainers(new HashMap<String, Map<String, String>>());
- appComponent
- .setCompletedContainers(new HashMap<String, Map<String, String>>());
- componentTypeMap.put(componentEntry.getKey(),
- appComponent);
- }
- for (Entry<String, Map<String, Object>> containerEntry : componentEntry
- .getValue().entrySet()) {
- Map<String, String> containerDataMap = new HashMap<String, String>();
- String containerId = containerEntry.getKey();
- Map<String, Object> containerValues = containerEntry
- .getValue();
- for (String containerProperty : containerValues
- .keySet()) {
- Object containerPropertyValue = containerValues
- .get(containerProperty);
- containerDataMap.put(containerProperty,
- containerPropertyValue.toString());
- }
- if (isLive) {
- appComponent.getActiveContainers().put(containerId,
- containerDataMap);
- } else {
- appComponent.getCompletedContainers().put(
- containerId, containerDataMap);
- }
- }
- // Set total instances count from statistics
- appComponent.setInstanceCount(appComponent
- .getActiveContainers().size()
- + appComponent.getCompletedContainers().size());
- if (description.statistics != null
- && description.statistics.containsKey(componentEntry.getKey())) {
- Map<String, Integer> statisticsMap = description.statistics.get(componentEntry.getKey());
- if (statisticsMap.containsKey("containers.desired")) {
- appComponent.setInstanceCount(statisticsMap.get("containers.desired"));
- }
- }
- }
- }
- app.setAlerts(sliderAlerts.generateComponentsAlerts(componentTypeMap, app.getType()));
- app.setComponents(componentTypeMap);
- }
- } catch (UnknownApplicationInstanceException e) {
- logger.warn(
- "Unable to determine app components for "
- + yarnApp.getName(), e);
- } catch (YarnException e) {
- logger.warn(
- "Unable to determine app components for "
- + yarnApp.getName(), e);
- throw new RuntimeException(e.getMessage(), e);
- } catch (IOException e) {
- logger.warn(
- "Unable to determine app components for "
- + yarnApp.getName(), e);
- throw new RuntimeException(e.getMessage(), e);
- }
- } else if (property.startsWith(METRICS_PREFIX)) {
- metrics.add(property.substring(METRICS_PREFIX.length()));
- } else if ("supportedMetrics".equals(property)) {
- if (matchedAppType != null) {
- app.setSupportedMetrics(matchedAppType.getSupportedMetrics());
- }
- }
- }
- }
- }
- if (metrics.size() > 0) {
- if (quickLinks.isEmpty()) {
- quickLinks = sliderAppClient
- .getQuickLinks(appMasterData.publisherUrl);
- }
- if (quickLinks != null && quickLinks.containsKey(METRICS_API_NAME)) {
- String metricsUrl = quickLinks.get(METRICS_API_NAME);
- MetricsHolder metricsHolder = appMetrics.get(matchedAppType
- .uniqueName());
- app.setMetrics(sliderAppClient.getMetrics(yarnApp.getName(),
- metricsUrl, metrics, null, viewContext, matchedAppType,
- metricsHolder));
- }
- }
- }
- return app;
- }
-
- /**
- * Creates a new {@link SliderClient} initialized with appropriate
- * configuration and started. This slider client can be used to invoke
- * individual API.
- *
- * When work with this client is done,
- * {@link #destroySliderClient(SliderClient)} must be called.
- *
- * @return created {@link SliderClient}
- * @see #destroySliderClient(SliderClient)
- * @see #runSliderCommand(String...)
- */
- protected SliderClient createSliderClient() {
- Configuration sliderClientConfiguration = getSliderClientConfiguration();
- SliderClient client = new SliderClient() {
- @Override
- public void init(Configuration conf) {
- super.init(conf);
- try {
- initHadoopBinding();
- } catch (SliderException e) {
- throw new RuntimeException("Unable to automatically init Hadoop binding", e);
- } catch (IOException e) {
- throw new RuntimeException("Unable to automatically init Hadoop binding", e);
- }
- }
- };
- try {
- if (logger.isDebugEnabled()) {
- logger.debug("Slider Client configuration: " + sliderClientConfiguration.toString());
- }
- sliderClientConfiguration = client.bindArgs(sliderClientConfiguration,
- new String[] { "help" });
- client.init(sliderClientConfiguration);
- client.start();
- } catch (Exception e) {
- logger.warn("Unable to create SliderClient", e);
- throw new RuntimeException(e.getMessage(), e);
- } catch (Throwable e) {
- logger.warn("Unable to create SliderClient", e);
- throw new RuntimeException(e.getMessage(), e);
- }
- return client;
- }
-
- protected void destroySliderClient(SliderClient sliderClient) {
- sliderClient.stop();
- sliderClient = null;
- }
-
- private String getViewParameterValue(String parameterName) {
- String value = viewContext.getProperties().get(parameterName);
- if ("null".equals(value)) {
- return null;
- }
- return value;
- }
-
- protected Map<String, String> getHadoopConfigs() {
- return viewContext.getInstanceData();
- }
-
- /**
- * Dynamically determines Slider client configuration. If unable to determine,
- * <code>null</code> is returned.
- *
- * @return
- */
- private Configuration getSliderClientConfiguration() {
- HdfsConfiguration hdfsConfig = new HdfsConfiguration();
- YarnConfiguration yarnConfig = new YarnConfiguration(hdfsConfig);
-
- Map<String, String> hadoopConfigs = getHadoopConfigs();
- for(Entry<String, String> entry: hadoopConfigs.entrySet()) {
- String entryValue = entry.getValue();
- if (entryValue == null) {
- entryValue = "";
- }
- yarnConfig.set(entry.getKey(), entryValue);
- }
- yarnConfig.set(PROPERTY_SLIDER_SECURITY_ENABLED, hadoopConfigs.get("security_enabled"));
- if (hadoopConfigs.containsKey(PROPERTY_SLIDER_ZK_QUORUM)) {
- yarnConfig.set(PROPERTY_SLIDER_ZK_QUORUM, hadoopConfigs.get(PROPERTY_SLIDER_ZK_QUORUM));
- }
- return yarnConfig;
- }
-
- private boolean areViewParametersSet() {
- Map<String, String> hadoopConfigs = getHadoopConfigs();
- return hadoopConfigs.containsKey("fs.defaultFS")
- && hadoopConfigs.containsKey("yarn.resourcemanager.address")
- && hadoopConfigs.containsKey("yarn.resourcemanager.webapp.address")
- && hadoopConfigs.containsKey(PROPERTY_SLIDER_ZK_QUORUM);
- }
-
- @Override
- public List<SliderApp> getSliderApps(final Set<String> properties)
- throws YarnException, IOException, InterruptedException {
- if (!areViewParametersSet()) {
- return Collections.emptyList();
- }
- return invokeSliderClientRunnable(new SliderClientContextRunnable<List<SliderApp>>() {
- @Override
- public List<SliderApp> run(SliderClient sliderClient)
- throws YarnException, IOException {
- List<SliderApp> sliderApps = new ArrayList<SliderApp>();
- Map<String, SliderApp> sliderAppsMap = new HashMap<String, SliderApp>();
- List<ApplicationReport> yarnApps = sliderClient.listSliderInstances(null);
- for (ApplicationReport yarnApp : yarnApps) {
- SliderApp sliderAppObject = createSliderAppObject(yarnApp, properties,
- sliderClient);
- if (sliderAppObject != null) {
- if (sliderAppsMap.containsKey(sliderAppObject.getName())) {
- if (sliderAppsMap.get(sliderAppObject.getName()).getId()
- .compareTo(sliderAppObject.getId()) < 0) {
- sliderAppsMap.put(sliderAppObject.getName(), sliderAppObject);
- }
- } else {
- sliderAppsMap.put(sliderAppObject.getName(), sliderAppObject);
- }
- }
- }
- if (sliderAppsMap.size() > 0)
- sliderApps.addAll(sliderAppsMap.values());
- return sliderApps;
- }
- });
- }
-
- @Override
- public void deleteSliderApp(final String applicationId) throws YarnException,
- IOException, InterruptedException {
- Integer code = invokeSliderClientRunnable(new SliderClientContextRunnable<Integer>() {
- @Override
- public Integer run(SliderClient sliderClient) throws YarnException,
- IOException, InterruptedException {
- Set<String> properties = new HashSet<String>();
- properties.add("id");
- properties.add("name");
- SliderApp sliderApp = getSliderApp(applicationId, properties);
- if (sliderApp == null) {
- throw new ApplicationNotFoundException(applicationId);
- }
- return sliderClient.actionDestroy(sliderApp.getName());
- }
- });
- logger.info("Deleted Slider App [" + applicationId + "] with exit code " + code);
- }
-
- @Override
- public SliderAppType getSliderAppType(String appTypeId, Set<String> properties) {
- List<SliderAppType> appTypes = getSliderAppTypes(properties);
- if (appTypeId != null && appTypes != null) {
- for (SliderAppType appType : appTypes) {
- if (appTypeId != null && appTypeId.equals(appType.getId())) {
- return appType;
- }
- }
- }
- return null;
- }
-
- @Override
- public List<SliderAppType> getSliderAppTypes(Set<String> properties) {
- try {
- // Need to determine security enablement before loading app types
- getViewStatus();
- } catch (Throwable t) {
- logger.warn("Unable to determine if cluster is secured when loading app-types", t);
- }
- Map<String, String> hadoopConfigs = getHadoopConfigs();
- final boolean securityEnabled = Boolean.valueOf(hadoopConfigs.get("security_enabled"));
- if (appTypes == null) {
- appTypes = loadAppTypes();
- }
- if (appTypes != null) {
- for (SliderAppType appType : appTypes) {
- Map<String, String> configs = appType.typeConfigsUnsecured;
- JsonObject resourcesObj = appType.resourcesUnsecured;
- if (securityEnabled) {
- configs = appType.typeConfigsSecured;
- if (configs == null || configs.isEmpty()) {
- configs = appType.typeConfigsUnsecured;
- }
- }
- if (securityEnabled) {
- resourcesObj = appType.resourcesSecured;
- if (resourcesObj == null) {
- resourcesObj = appType.resourcesUnsecured;
- }
- }
- Map<String, String> appTypeConfigs = new HashMap<String, String>();
- for (Entry<String, String> e : configs.entrySet()) {
- String valueString = e.getValue();
- if (valueString != null && valueString.contains("${USER_NAME}")) {
- valueString = valueString.replace("${USER_NAME}", getUserToRunAs(hadoopConfigs));
- }
- appTypeConfigs.put(e.getKey(), valueString);
- }
- appType.setTypeConfigs(appTypeConfigs);
-
- if (resourcesObj != null) {
- for (SliderAppTypeComponent component : appType.getTypeComponents()) {
- JsonElement componentJson = resourcesObj.get(component.getName());
- if (componentJson != null && componentJson.isJsonObject()) {
- JsonObject componentObj = componentJson.getAsJsonObject();
- if (componentObj.has("yarn.component.instances")) {
- component.setInstanceCount(Integer.parseInt(componentObj.get(
- "yarn.component.instances").getAsString()));
- }
- if (componentObj.has("yarn.role.priority")) {
- component.setPriority(Integer.parseInt(componentObj.get("yarn.role.priority").getAsString()));
- }
- if (componentObj.has("yarn.memory")) {
- component.setYarnMemory(Integer.parseInt(componentObj.get("yarn.memory").getAsString()));
- }
- }
- }
- }
- }
- }
- return appTypes;
- }
-
- private List<SliderAppType> loadAppTypes() {
- List<SliderAppType> appTypes = null;
- String appsFolderPath = getAppsFolderPath();
- File appsFolder = new File(appsFolderPath);
- if (appsFolder.exists()) {
- File[] appZips = appsFolder
- .listFiles((FilenameFilter) new RegexFileFilter("^.*\\.zip$"));
- if (appZips != null) {
- appTypes = new ArrayList<SliderAppType>();
- for (File appZip : appZips) {
- try {
- ZipFile zipFile = new ZipFile(appZip);
- Metainfo metainfo = new MetainfoParser().fromXmlStream(zipFile
- .getInputStream(zipFile.getEntry("metainfo.xml")));
- // Create app type object
- if (metainfo.getApplication() != null) {
- Application application = metainfo.getApplication();
- ZipArchiveEntry appConfigZipEntry = zipFile.getEntry("appConfig-default.json");
- ZipArchiveEntry appConfigSecuredZipEntry = zipFile.getEntry("appConfig-secured-default.json");
- if (appConfigZipEntry == null) {
- throw new IllegalStateException("Slider App package '" + appZip.getName() + "' does not contain 'appConfig-default.json' file");
- }
- ZipArchiveEntry resourcesZipEntry = zipFile.getEntry("resources-default.json");
- ZipArchiveEntry resourcesSecuredZipEntry = zipFile.getEntry("resources-secured-default.json");
- if (resourcesZipEntry == null) {
- throw new IllegalStateException("Slider App package '" + appZip.getName() + "' does not contain 'resources-default.json' file");
- }
- SliderAppType appType = new SliderAppType();
- appType.setId(application.getName() + "-" + application.getVersion());
- appType.setTypeName(application.getName());
- appType.setTypeDescription(application.getComment());
- appType.setTypeVersion(application.getVersion());
- appType.setTypePackageFileName(appZip.getName());
- // Configs
- appType.typeConfigsUnsecured = parseAppTypeConfigs(zipFile, appConfigZipEntry, appZip.getName(), application.getName());
- if (appConfigSecuredZipEntry != null) {
- appType.typeConfigsSecured = parseAppTypeConfigs(zipFile, appConfigSecuredZipEntry, appZip.getName(), application.getName());
- }
- // Resources
- appType.resourcesUnsecured = parseAppTypeResources(zipFile, resourcesZipEntry);
- if (resourcesSecuredZipEntry != null) {
- appType.resourcesSecured = parseAppTypeResources(zipFile, resourcesSecuredZipEntry);
- }
- // Components
- ArrayList<SliderAppTypeComponent> appTypeComponentList = new ArrayList<SliderAppTypeComponent>();
- for (Component component : application.getComponents()) {
- if ("CLIENT".equals(component.getCategory())) {
- continue;
- }
- SliderAppTypeComponent appTypeComponent = new SliderAppTypeComponent();
- appTypeComponent.setDisplayName(component.getName());
- appTypeComponent.setId(component.getName());
- 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()));
- }
- if (component.getMaxInstanceCount() != null) {
- appTypeComponent.setMaxInstanceCount(Integer
- .parseInt(component.getMaxInstanceCount()));
- }
- appTypeComponent.setCategory(component.getCategory());
- appTypeComponentList.add(appTypeComponent);
- }
-
- MetricsHolder metricsHolder = new MetricsHolder();
- metricsHolder.setJmxMetrics(readMetrics(zipFile,
- "jmx_metrics.json"));
- metricsHolder.setTimelineMetrics(readMetrics(zipFile,
- "timeline_metrics.json"));
- appType.setSupportedMetrics(getSupportedMetrics(metricsHolder
- .getTimelineMetrics()));
- appMetrics.put(appType.uniqueName(), metricsHolder);
-
- appType.setTypeComponents(appTypeComponentList);
- appTypes.add(appType);
- }
- } catch (ZipException e) {
- logger.warn("Unable to parse Slider App package " + appZip.getAbsolutePath(), e);
- } catch (IOException e) {
- logger.warn("Unable to parse Slider App package " + appZip.getAbsolutePath(), e);
- } catch (Throwable e) {
- logger.warn("Unable to parse Slider App package " + appZip.getAbsolutePath(), e);
- }
- }
- }
- }
- return appTypes;
- }
-
- private JsonObject parseAppTypeResources(ZipFile zipFile, ZipArchiveEntry resourcesZipEntry) throws ZipException, IOException {
- String resourcesJsonString = IOUtils.toString(zipFile.getInputStream(resourcesZipEntry), "UTF-8");
- JsonElement resourcesJson = new JsonParser().parse(resourcesJsonString);
- return resourcesJson.getAsJsonObject().get("components").getAsJsonObject();
- }
-
- private Map<String, String> parseAppTypeConfigs(ZipFile zipFile, ZipArchiveEntry appConfigZipEntry, String zipFileName, String appName) throws IOException,
- ZipException {
- String appConfigJsonString = IOUtils.toString(zipFile.getInputStream(appConfigZipEntry), "UTF-8");
- JsonElement appConfigJson = new JsonParser().parse(appConfigJsonString);
- Map<String, String> configsMap = new HashMap<String, String>();
- JsonObject appTypeGlobalJson = appConfigJson.getAsJsonObject().get("global").getAsJsonObject();
- for (Entry<String, JsonElement> e : appTypeGlobalJson.entrySet()) {
- String key = e.getKey();
- String valueString = e.getValue().getAsString();
- if ("application.def".equals(key)) {
- valueString = String.format(".slider/package/%s/%s", appName, zipFileName);
- }
- configsMap.put(key, valueString);
- }
- return configsMap;
- }
-
- private List<String> getSupportedMetrics(
- Map<String, Map<String, Map<String, Metric>>> metrics) {
- Set<String> supportedMetrics = new HashSet<String>();
- if (metrics != null && metrics.size() > 0) {
- for (Map<String, Map<String, Metric>> compMetrics : metrics
- .values()) {
- for (Map<String, Metric> compMetric : compMetrics.values()) {
- supportedMetrics.addAll(compMetric.keySet());
- }
- }
- }
- return new ArrayList<String>(supportedMetrics);
- }
-
- Map<String, Map<String, Map<String, Metric>>> readMetrics(ZipFile zipFile,
- String fileName) {
- Map<String, Map<String, Map<String, Metric>>> metrics = null;
- try {
- InputStream inputStream = zipFile.getInputStream(zipFile
- .getEntry(fileName));
- ObjectMapper mapper = new ObjectMapper();
-
- metrics = mapper.readValue(inputStream,
- new TypeReference<Map<String, Map<String, Map<String, Metric>>>>() {
- });
- } catch (IOException e) {
- logger.info("Error reading metrics for file " + fileName + ". " + e.getMessage());
- }
-
- return metrics;
- }
-
- @Override
- public String createSliderApp(JsonObject json) throws IOException,
- YarnException, InterruptedException {
- if (json.has("name") && json.has("typeConfigs")
- && json.has("resources") && json.has("typeName")) {
- final String appTypeId = json.get("typeName").getAsString();
- SliderAppType sliderAppType = getSliderAppType(appTypeId, null);
- final String appName = json.get("name").getAsString();
- final String queueName = json.has("queue") ? json.get("queue").getAsString() : null;
- final boolean securityEnabled = Boolean.valueOf(getHadoopConfigs().get("security_enabled"));
- final boolean twoWaySSlEnabled = json.has("twoWaySSLEnabled") ? Boolean.valueOf(json.get("twoWaySSLEnabled").getAsString()) : false;
- JsonObject configs = json.get("typeConfigs").getAsJsonObject();
- final String hdpVersion = configs.has("env.HDP_VERSION") ? configs.get(
- "env.HDP_VERSION").getAsString() : null;
- JsonObject resourcesObj = json.get("resources").getAsJsonObject();
- JsonArray componentsArray = resourcesObj.get("components").getAsJsonArray();
- String appsCreateFolderPath = getAppsCreateFolderPath();
- File appsCreateFolder = new File(appsCreateFolderPath);
- if (!appsCreateFolder.exists()) {
- appsCreateFolder.mkdirs();
- }
- int appCount;
- synchronized (createAppCounter) {
- if (createAppCounter < 0) {
- // Not initialized
- createAppCounter = 0;
- String[] apps = appsCreateFolder.list();
- for (String app : apps) {
- try {
- int count = Integer.parseInt(app);
- if (count > createAppCounter) {
- createAppCounter = count;
- }
- } catch (NumberFormatException e) {
- }
- }
- }
- appCount = ++createAppCounter;
- }
- File appCreateFolder = new File(appsCreateFolder,
- Integer.toString(appCount));
- appCreateFolder.mkdirs();
- File appConfigJsonFile = new File(appCreateFolder, "appConfig.json");
- File resourcesJsonFile = new File(appCreateFolder, "resources.json");
- saveAppConfigs(configs, componentsArray, appName, sliderAppType.getTypeName(), securityEnabled, twoWaySSlEnabled, appConfigJsonFile);
- saveAppResources(resourcesObj, resourcesJsonFile);
-
- final ActionCreateArgs createArgs = new ActionCreateArgs();
- createArgs.template = appConfigJsonFile;
- createArgs.resources = resourcesJsonFile;
- if (queueName != null && queueName.trim().length() > 0) {
- createArgs.queue = queueName;
- }
-
- final ActionInstallPackageArgs installArgs = new ActionInstallPackageArgs();
- String localAppPackageFileName = sliderAppType.getTypePackageFileName();
- installArgs.name = sliderAppType.getTypeName();
- installArgs.packageURI = getAppsFolderPath() + "/" + localAppPackageFileName;
- installArgs.replacePkg = true;
-
- final List<ActionInstallKeytabArgs> installKeytabActions = new ArrayList<ActionInstallKeytabArgs>();
- if (securityEnabled) {
- for (String keytab : getUserToRunAsKeytabs(sliderAppType.getTypeName())) {
- ActionInstallKeytabArgs keytabArgs = new ActionInstallKeytabArgs();
- keytabArgs.keytabUri = keytab;
- keytabArgs.folder = appName;
- keytabArgs.overwrite = true;
- installKeytabActions.add(keytabArgs);
- }
- }
-
- return invokeSliderClientRunnable(new SliderClientContextRunnable<String>() {
- @Override
- public String run(SliderClient sliderClient) throws YarnException, IOException, InterruptedException {
- try {
- File sliderJarFile = SliderUtils.findContainingJar(SliderClient.class);
- if (sliderJarFile != null) {
- if (logger.isDebugEnabled()) {
- logger.debug("slider.libdir=" + sliderJarFile.getParentFile().getAbsolutePath());
- }
- System.setProperty("slider.libdir", sliderJarFile.getParentFile().getAbsolutePath());
- }
- } catch (Throwable t) {
- logger.warn("Unable to determine 'slider.libdir' path", t);
- }
- if (securityEnabled) {
- for (ActionInstallKeytabArgs keytabArgs : installKeytabActions) {
- if (logger.isDebugEnabled()) {
- logger.debug("Installing keytab " + keytabArgs.keytabUri);
- }
- sliderClient.actionInstallKeytab(keytabArgs);
- }
- }
- if (StringUtils.isNotEmpty(hdpVersion)) {
- System.setProperty("HDP_VERSION", hdpVersion);
- logger.info("Setting system property HDP_VERSION=" + hdpVersion);
- }
- sliderClient.actionInstallPkg(installArgs);
- sliderClient.actionCreate(appName, createArgs);
- ApplicationId applicationId = sliderClient.applicationId;
- if (applicationId != null) {
- return getApplicationIdString(applicationId);
- }
- return null;
- }
- });
- }
- return null;
- }
-
- private void saveAppResources(JsonObject clientResourcesObj,
- File resourcesJsonFile) throws IOException {
- JsonObject resourcesObj = new JsonObject();
- JsonArray clientComponentsArray = clientResourcesObj.get("components").getAsJsonArray();
- resourcesObj.addProperty("schema",
- "http://example.org/specification/v2.0.0");
- resourcesObj.add("metadata", new JsonObject());
- resourcesObj.add("global",
- clientResourcesObj.has("global") ? clientResourcesObj.get("global")
- .getAsJsonObject() : new JsonObject());
- JsonObject componentsObj = new JsonObject();
- if (clientComponentsArray != null) {
- for (int i = 0; i < clientComponentsArray.size(); i++) {
- JsonObject inputComponent = clientComponentsArray.get(i).getAsJsonObject();
- if (inputComponent.has("id")) {
- JsonObject componentValue = new JsonObject();
- if (inputComponent.has("priority")) {
- componentValue.addProperty("yarn.role.priority", inputComponent
- .get("priority").getAsString());
- }
- if (inputComponent.has("instanceCount")) {
- componentValue.addProperty("yarn.component.instances",
- inputComponent.get("instanceCount").getAsString());
- }
- if (inputComponent.has("yarnMemory")) {
- componentValue.addProperty("yarn.memory",
- inputComponent.get("yarnMemory").getAsString());
- }
- if (inputComponent.has("yarnCpuCores")) {
- componentValue.addProperty("yarn.vcores",
- inputComponent.get("yarnCpuCores").getAsString());
- }
- if (inputComponent.has("yarnLabel")) {
- componentValue.addProperty("yarn.label.expression", inputComponent
- .get("yarnLabel").getAsString());
- }
- componentsObj.add(inputComponent.get("id").getAsString(),
- componentValue);
- }
- }
- }
- resourcesObj.add("components", componentsObj);
- String jsonString = new GsonBuilder().setPrettyPrinting().create().toJson(resourcesObj);
- FileOutputStream fos = null;
- try {
- fos = new FileOutputStream(resourcesJsonFile);
- IOUtils.write(jsonString, fos);
- } finally {
- if (fos != null) {
- fos.close();
- }
- }
- }
-
- /*
- * When security is enabled, the AppMaster itself needs the keytab identifying the calling user.
- * The user's keytab should be at the same location as the view's keytab, and should be
- * named as ${username}.headless.keytab.
- *
- * This method returns the list of keytabs where the first keytab is always the AppMaster's
- * keytab. Additional keys will be provided, only if found at the location of the view's keytab.
- * Additional keytabs should be of the format ${username}.<APP_TYPE>.*.keytab
- */
- private List<String> getUserToRunAsKeytabs(String appType) {
- List<String> keytabsList = new ArrayList<String>();
- String viewKeytab = viewContext.getProperties().get(PARAM_VIEW_PRINCIPAL_KEYTAB);
- String folderPath = "";
- int index = viewKeytab.lastIndexOf('/');
- if (index > -1) {
- folderPath = viewKeytab.substring(0, index);
- }
- String username = getUserToRunAs();
- String userKeytab = folderPath + "/" + username + ".headless.keytab";
- File folder = new File(folderPath);
- if (folder.exists()) {
- final Pattern userKeytabPattern = Pattern.compile("^" + username + "\\." + appType + "\\..*\\.keytab");
- String[] keytabNames = folder.list(new FilenameFilter() {
- @Override
- public boolean accept(File dir, String name) {
- return userKeytabPattern.matcher(name).matches();
- }
- });
- if (keytabNames != null) {
- for (String keytabName : keytabNames) {
- keytabsList.add(folderPath + "/" + keytabName);
- }
- }
- }
- keytabsList.add(0, userKeytab);
- if (logger.isDebugEnabled()) {
- logger.debug(username + " keytabs: " + keytabsList);
- }
- return keytabsList;
- }
-
- private void saveAppConfigs(JsonObject configs, JsonArray componentsArray,
- String appName, String appType, boolean securityEnabled, boolean twoWaySSlEnabled, File appConfigJsonFile) throws IOException {
- JsonObject appConfigs = new JsonObject();
- appConfigs.addProperty("schema", "http://example.org/specification/v2.0.0");
- appConfigs.add("metadata", new JsonObject());
- appConfigs.add("global", configs);
- JsonObject componentsObj = new JsonObject();
- if (componentsArray != null) {
- for (int i = 0; i < componentsArray.size(); i++) {
- JsonObject inputComponent = componentsArray.get(i).getAsJsonObject();
- if (inputComponent.has("id")) {
- componentsObj.add(inputComponent.get("id").getAsString(),
- new JsonObject());
- }
- }
- }
- if (securityEnabled) {
- JsonObject appMasterComponent = new JsonObject();
- String userToRunAsKeytab = getUserToRunAsKeytabs(appType).get(0);
- String fileName = userToRunAsKeytab.substring(userToRunAsKeytab.lastIndexOf('/') + 1);
- String userName = fileName.substring(0, fileName.indexOf('.'));
- String viewPrincipalName = getViewParameterValue(PARAM_VIEW_PRINCIPAL);
- int atIndex = viewPrincipalName.lastIndexOf('@');
- String viewPrincipalDomain = atIndex > -1 ? viewPrincipalName.substring(atIndex+1) : "";
- appMasterComponent.add("slider.keytab.principal.name", new JsonPrimitive(userName + "@" + viewPrincipalDomain));
- appMasterComponent.add("slider.am.login.keytab.name", new JsonPrimitive(fileName));
- appMasterComponent.add("slider.hdfs.keytab.dir", new JsonPrimitive(".slider/keytabs/" + appName));
- componentsObj.add("slider-appmaster", appMasterComponent);
- }
- if (twoWaySSlEnabled) {
- JsonObject appMasterComponent;
- if (componentsObj.has("slider-appmaster")) {
- appMasterComponent = componentsObj.get("slider-appmaster").getAsJsonObject();
- } else {
- appMasterComponent = new JsonObject();
- componentsObj.add("slider-appmaster", appMasterComponent);
- }
- appMasterComponent.add("ssl.server.client.auth", new JsonPrimitive("true"));
- }
- appConfigs.add("components", componentsObj);
- String jsonString = new GsonBuilder().setPrettyPrinting().create().toJson(appConfigs);
- FileOutputStream fos = null;
- try {
- fos = new FileOutputStream(appConfigJsonFile);
- IOUtils.write(jsonString, fos);
- } finally {
- if (fos != null) {
- fos.close();
- }
- }
- if (logger.isDebugEnabled()) {
- logger.debug("Saved appConfigs.json at " + appConfigJsonFile.getAbsolutePath());
- }
- }
-
- @Override
- public void freezeApp(final String appId) throws YarnException, IOException,
- InterruptedException {
- ApplicationId applicationId = invokeSliderClientRunnable(new SliderClientContextRunnable<ApplicationId>() {
- @Override
- public ApplicationId run(SliderClient sliderClient) throws YarnException, IOException, InterruptedException {
- 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);
- ActionFreezeArgs freezeArgs = new ActionFreezeArgs();
- sliderClient.actionFreeze(sliderApp.getName(), freezeArgs);
- return sliderClient.applicationId;
- }
- });
- logger.info("Frozen Slider App [" + appId + "] with response: " + applicationId.toString());
- }
-
- @Override
- public void thawApp(final String appId) throws YarnException, IOException, InterruptedException {
- ApplicationId applicationId = invokeSliderClientRunnable(new SliderClientContextRunnable<ApplicationId>() {
- @Override
- public ApplicationId run(SliderClient sliderClient) throws YarnException,
- IOException, InterruptedException {
- 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);
- ActionThawArgs thawArgs = new ActionThawArgs();
- sliderClient.actionThaw(sliderApp.getName(), thawArgs);
- return sliderClient.applicationId;
- }
- });
- logger.info("Thawed Slider App [" + appId + "] with response: " + applicationId.toString());
- }
-
- @Override
- public void flexApp(final String appId, final Map<String, Integer> componentsMap)
- throws YarnException, IOException, InterruptedException {
- ApplicationId applicationId = invokeSliderClientRunnable(new SliderClientContextRunnable<ApplicationId>() {
- @Override
- public ApplicationId run(SliderClient sliderClient) throws YarnException,
- IOException, InterruptedException {
- 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);
- }
- 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.info("Flexed Slider App [" + appId + "] with response: " + applicationId);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/TemporalInfo.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/TemporalInfo.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/TemporalInfo.java
deleted file mode 100644
index a501615..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/TemporalInfo.java
+++ /dev/null
@@ -1,48 +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.ambari.view.slider;
-
-/**
- * Temporal query data.
- */
-public interface TemporalInfo {
- /**
- * Get the start of the requested time range. The time is given in
- * seconds since the Unix epoch.
- *
- * @return the start time in seconds
- */
- Long getStartTime();
-
- /**
- * Get the end of the requested time range. The time is given in
- * seconds since the Unix epoch.
- *
- * @return the end time in seconds
- */
- Long getEndTime();
-
- /**
- * Get the requested time between each data point of the temporal
- * data. The time is given in seconds.
- *
- * @return the step time in seconds
- */
- Long getStep();
-}
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/ViewStatus.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/ViewStatus.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/ViewStatus.java
deleted file mode 100644
index 49761dc..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/ViewStatus.java
+++ /dev/null
@@ -1,72 +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.ambari.view.slider;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class ViewStatus {
- public static class Validation {
- public static enum TYPE {
- ERROR, WARN
- }
-
- public String message;
- public String type;
-
- public Validation(String message, String type) {
- this.message = message;
- this.type = type;
- }
- public Validation(String message) {
- this.message = message;
- this.type = TYPE.ERROR.name();
- }
- }
-
- private String version;
- private Map<String, String> parameters = new HashMap<String, String>();
- private List<Validation> validations = new ArrayList<ViewStatus.Validation>();
-
- public String getVersion() {
- return version;
- }
-
- public void setVersion(String version) {
- this.version = version;
- }
-
- public Map<String, String> getParameters() {
- return parameters;
- }
-
- public void setParameters(Map<String, String> parameters) {
- this.parameters = parameters;
- }
-
- public List<Validation> getValidations() {
- return validations;
- }
-
- public void setValidations(List<Validation> validations) {
- this.validations = validations;
- }
-}
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariClient.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariClient.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariClient.java
deleted file mode 100644
index b77e340..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariClient.java
+++ /dev/null
@@ -1,58 +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.ambari.view.slider.clients;
-
-import java.util.Map;
-
-public interface AmbariClient {
- /**
- * Provides the first cluster defined on this Ambari server.
- *
- * @return
- */
- public AmbariClusterInfo getClusterInfo();
-
- /**
- * Provides detailed information about the given cluster.
- *
- * @param clusterInfo
- * @return
- */
- public AmbariCluster getCluster(AmbariClusterInfo clusterInfo);
-
- /**
- * Provides configs identified by type and tag on given cluster.
- *
- * @param cluster
- * @param configType
- * @param configTag
- * @return
- */
- public Map<String, String> getConfiguration(AmbariClusterInfo cluster,
- String configType, String configTag);
-
- /**
- * Provides detailed information about the given service.
- *
- * @param cluster
- * @param serviceId
- * @return
- */
- public AmbariService getService(AmbariClusterInfo cluster, String serviceId);
-}
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariCluster.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariCluster.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariCluster.java
deleted file mode 100644
index 2ca2f16..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariCluster.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.ambari.view.slider.clients;
-
-import java.util.List;
-import java.util.Map;
-
-public class AmbariCluster extends AmbariClusterInfo {
- private Map<String, String> desiredConfigs;
- private List<AmbariServiceInfo> services;
- private List<AmbariHostInfo> hosts;
-
- public Map<String, String> getDesiredConfigs() {
- return desiredConfigs;
- }
-
- public void setDesiredConfigs(Map<String, String> desiredConfigs) {
- this.desiredConfigs = desiredConfigs;
- }
-
- public List<AmbariServiceInfo> getServices() {
- return services;
- }
-
- public void setServices(List<AmbariServiceInfo> services) {
- this.services = services;
- }
-
- public List<AmbariHostInfo> getHosts() {
- return hosts;
- }
-
- public void setHosts(List<AmbariHostInfo> hosts) {
- this.hosts = hosts;
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariClusterInfo.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariClusterInfo.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariClusterInfo.java
deleted file mode 100644
index a532b52..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariClusterInfo.java
+++ /dev/null
@@ -1,40 +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.ambari.view.slider.clients;
-
-public class AmbariClusterInfo {
- private String name;
- private String version;
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getVersion() {
- return version;
- }
-
- public void setVersion(String version) {
- this.version = version;
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariHostComponent.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariHostComponent.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariHostComponent.java
deleted file mode 100644
index 3d67d88..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariHostComponent.java
+++ /dev/null
@@ -1,49 +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.ambari.view.slider.clients;
-
-public class AmbariHostComponent {
- private String name;
- private boolean started;
- private String hostName;
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getHostName() {
- return hostName;
- }
-
- public void setHostName(String hostName) {
- this.hostName = hostName;
- }
-
- public boolean isStarted() {
- return started;
- }
-
- public void setStarted(boolean started) {
- this.started = started;
- }
-}
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariHostInfo.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariHostInfo.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariHostInfo.java
deleted file mode 100644
index f522cf3..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariHostInfo.java
+++ /dev/null
@@ -1,32 +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.ambari.view.slider.clients;
-
-public class AmbariHostInfo {
-
- private String hostName;
-
- public String getHostName() {
- return hostName;
- }
-
- public void setHostName(String hostName) {
- this.hostName = hostName;
- }
-}
http://git-wip-us.apache.org/repos/asf/ambari/blob/ec8deeba/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariService.java
----------------------------------------------------------------------
diff --git a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariService.java b/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariService.java
deleted file mode 100644
index dc9b3b3..0000000
--- a/contrib/views/slider/src/main/java/org/apache/ambari/view/slider/clients/AmbariService.java
+++ /dev/null
@@ -1,36 +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.ambari.view.slider.clients;
-
-import java.util.List;
-import java.util.Map;
-
-public class AmbariService extends AmbariServiceInfo {
-
- private Map<String, List<AmbariHostComponent>> componentsToHostComponentsMap;
-
- public Map<String, List<AmbariHostComponent>> getComponentsToHostComponentsMap() {
- return componentsToHostComponentsMap;
- }
-
- public void setComponentsToHostComponentsMap(
- Map<String, List<AmbariHostComponent>> componentsToHostComponentsMap) {
- this.componentsToHostComponentsMap = componentsToHostComponentsMap;
- }
-}