Package org.springframework.yarn.client

Source Code of org.springframework.yarn.client.CommandLineClientRunner

/*
* Copyright 2013 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.yarn.client;

import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import java.util.Set;

import org.apache.hadoop.yarn.api.records.ApplicationId;
import org.apache.hadoop.yarn.api.records.ApplicationReport;
import org.springframework.util.StringUtils;
import org.springframework.yarn.YarnSystemConstants;
import org.springframework.yarn.launch.AbstractCommandLineRunner;
import org.springframework.yarn.launch.ExitStatus;
import org.springframework.yarn.support.console.Table;
import org.springframework.yarn.support.console.TableHeader;
import org.springframework.yarn.support.console.TableRow;
import org.springframework.yarn.support.console.UiUtils;

/**
* A simple client runner executing a bean named "yarnClient".
*
* @author Janne Valkealahti
*
*/
public class CommandLineClientRunner extends AbstractCommandLineRunner<YarnClient> {

  public final static String OPT_SUBMIT = "-submit";
  public final static String OPT_KILL = "-kill";
  public final static String OPT_LIST = "-list";
  public final static String ARG_APPLICATION_ID = "applicationId";

  @SuppressWarnings("serial")
  private final static List<String> opts = new ArrayList<String>() {{
      add(OPT_SUBMIT);
      add(OPT_KILL);
      add(OPT_LIST);
  }};

  @Override
  protected ExitStatus handleBeanRun(YarnClient bean, String[] parameters, Set<String> opts) {
    Properties properties = StringUtils.splitArrayElementsIntoProperties(parameters, "=");

    if (opts.contains(OPT_SUBMIT)) {
      bean.submitApplication();
    } else if (opts.contains(OPT_LIST)) {
      printApplicationsReport(bean.listApplications());
    } else if (opts.contains(OPT_KILL)) {
      ApplicationId appId = queryApplicationId(bean,
          properties != null ? properties.getProperty(ARG_APPLICATION_ID) : null);
      if (appId != null) {
        bean.killApplication(appId);
      }
    }

    return ExitStatus.COMPLETED;
  }

  @Override
  protected String getDefaultBeanIdentifier() {
    return YarnSystemConstants.DEFAULT_ID_CLIENT;
  }

  @Override
  protected List<String> getValidOpts() {
    return opts;
  }

  /**
   * Query application id.
   *
   * @param client the yarn client
   * @param applicationId the application id
   * @return the application id if exists, NULL otherwise
   */
  protected ApplicationId queryApplicationId(YarnClient client, String applicationId) {
    if (!StringUtils.hasText(applicationId)) {
      return null;
    }
    ApplicationId appId = null;
    for (ApplicationReport a : client.listApplications()) {
      if (a.getApplicationId().toString().equals(applicationId)) {
        appId = a.getApplicationId();
        break;
      }
    }
    return appId;
  }

  /**
   * Prints the applications report into system out.
   *
   * @param applications the applications
   */
  private static void printApplicationsReport(List<ApplicationReport> applications) {
    System.out.println(UiUtils.renderTextTable(getApplicationReportTable(applications), true));
  }

  /**
   * Gets the application report table.
   *
   * @param applications the applications
   * @return the application report table
   */
  private static Table getApplicationReportTable(List<ApplicationReport> applications) {
    Table table = new Table();
    table.addHeader(1, new TableHeader("Id"))
        .addHeader(2, new TableHeader("User"))
        .addHeader(3, new TableHeader("Name"))
        .addHeader(4, new TableHeader("Queue"))
        .addHeader(5, new TableHeader("StartTime"))
        .addHeader(6, new TableHeader("FinishTime"))
        .addHeader(7, new TableHeader("State"))
        .addHeader(8, new TableHeader("FinalStatus"));

    for (ApplicationReport a : applications) {
      final TableRow row = new TableRow();
      row.addValue(1, a.getApplicationId().toString())
          .addValue(2, a.getUser())
          .addValue(3, a.getName())
          .addValue(4, a.getQueue())
          .addValue(5, DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT).format(
              new Date(a.getStartTime())))
          .addValue(6, DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT).format(
              new Date(a.getFinishTime())))
          .addValue(7, a.getYarnApplicationState().toString())
          .addValue(8, a.getFinalApplicationStatus().toString());
      table.getRows().add(row);
    }
    return table;
  }

  public static void main(String[] args) {
    new CommandLineClientRunner().doMain(args);
  }

}
TOP

Related Classes of org.springframework.yarn.client.CommandLineClientRunner

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.