/** * 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.hadoop.yarn.client.cli; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.nio.charset.Charset; import java.text.DecimalFormat; import java.util.Set; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.GnuParser; import org.apache.commons.cli.HelpFormatter; import org.apache.commons.cli.MissingArgumentException; import org.apache.commons.cli.Options; import org.apache.hadoop.classification.InterfaceAudience.Private; import org.apache.hadoop.classification.InterfaceStability.Unstable; import org.apache.hadoop.util.ToolRunner; import org.apache.hadoop.yarn.api.records.NodeLabel; import org.apache.hadoop.yarn.api.records.QueueInfo; import org.apache.hadoop.yarn.exceptions.YarnException; import com.google.common.annotations.VisibleForTesting; @Private @Unstable public class QueueCLI extends YarnCLI { public static final String QUEUE = "queue"; public static void main(String[] args) throws Exception { QueueCLI cli = new QueueCLI(); cli.setSysOutPrintStream(System.out); cli.setSysErrPrintStream(System.err); int res = ToolRunner.run(cli, args); cli.stop(); System.exit(res); } @Override public int run(String[] args) throws Exception { Options opts = new Options(); opts.addOption(STATUS_CMD, true, "List queue information about given queue."); opts.addOption(HELP_CMD, false, "Displays help for all commands."); opts.getOption(STATUS_CMD).setArgName("Queue Name"); CommandLine cliParser = null; try { cliParser = new GnuParser().parse(opts, args); } catch (MissingArgumentException ex) { sysout.println("Missing argument for options"); printUsage(opts); return -1; } if (cliParser.hasOption(STATUS_CMD)) { if (args.length != 2) { printUsage(opts); return -1; } return listQueue(cliParser.getOptionValue(STATUS_CMD)); } else if (cliParser.hasOption(HELP_CMD)) { printUsage(opts); return 0; } else { syserr.println("Invalid Command Usage : "); printUsage(opts); return -1; } } /** * It prints the usage of the command * * @param opts */ @VisibleForTesting void printUsage(Options opts) { new HelpFormatter().printHelp(QUEUE, opts); } /** * Lists the Queue Information matching the given queue name * * @param queueName * @throws YarnException * @throws IOException */ private int listQueue(String queueName) throws YarnException, IOException { int rc; PrintWriter writer = new PrintWriter( new OutputStreamWriter(sysout, Charset.forName("UTF-8"))); QueueInfo queueInfo = client.getQueueInfo(queueName); if (queueInfo != null) { writer.println("Queue Information : "); printQueueInfo(writer, queueInfo); rc = 0; } else { writer.println("Cannot get queue from RM by queueName = " + queueName + ", please check."); rc = -1; } writer.flush(); return rc; } private void printQueueInfo(PrintWriter writer, QueueInfo queueInfo) { writer.print("Queue Name : "); writer.println(queueInfo.getQueueName()); writer.print("\tState : "); writer.println(queueInfo.getQueueState()); DecimalFormat df = new DecimalFormat("#.0"); writer.print("\tCapacity : "); writer.println(df.format(queueInfo.getCapacity() * 100) + "%"); writer.print("\tCurrent Capacity : "); writer.println(df.format(queueInfo.getCurrentCapacity() * 100) + "%"); writer.print("\tMaximum Capacity : "); writer.println(df.format(queueInfo.getMaximumCapacity() * 100) + "%"); writer.print("\tDefault Node Label expression : "); String nodeLabelExpression = queueInfo.getDefaultNodeLabelExpression(); nodeLabelExpression = (nodeLabelExpression == null || nodeLabelExpression.trim().isEmpty()) ? NodeLabel.DEFAULT_NODE_LABEL_PARTITION : nodeLabelExpression; writer.println(nodeLabelExpression); Set<String> nodeLabels = queueInfo.getAccessibleNodeLabels(); StringBuilder labelList = new StringBuilder(); writer.print("\tAccessible Node Labels : "); for (String nodeLabel : nodeLabels) { if (labelList.length() > 0) { labelList.append(','); } labelList.append(nodeLabel); } writer.println(labelList.toString()); Boolean preemptStatus = queueInfo.getPreemptionDisabled(); if (preemptStatus != null) { writer.print("\tPreemption : "); writer.println(preemptStatus ? "disabled" : "enabled"); } } }