JobQueueClient.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:5k
源码类别:

网格计算

开发平台:

Java

  1. /**
  2.  * Licensed to the Apache Software Foundation (ASF) under one
  3.  * or more contributor license agreements.  See the NOTICE file
  4.  * distributed with this work for additional information
  5.  * regarding copyright ownership.  The ASF licenses this file
  6.  * to you under the Apache License, Version 2.0 (the
  7.  * "License"); you may not use this file except in compliance
  8.  * with the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18. package org.apache.hadoop.mapred;
  19. import java.io.IOException;
  20. import org.apache.hadoop.conf.Configured;
  21. import org.apache.hadoop.util.Tool;
  22. import org.apache.hadoop.util.ToolRunner;
  23. /**
  24.  * <code>JobQueueClient</code> is interface provided to the user in order
  25.  * to get JobQueue related information from the {@link JobTracker}
  26.  * 
  27.  * It provides the facility to list the JobQueues present and ability to 
  28.  * view the list of jobs within a specific JobQueue 
  29.  * 
  30. **/
  31. class JobQueueClient extends Configured implements  Tool {
  32.   
  33.   JobClient jc;
  34.   
  35.   public JobQueueClient() {
  36.   }
  37.   
  38.   public JobQueueClient(JobConf conf) throws IOException {
  39.     setConf(conf);
  40.   }
  41.   
  42.   private void init(JobConf conf) throws IOException {
  43.     setConf(conf);
  44.     jc = new JobClient(conf);
  45.   }
  46.   
  47.   @Override
  48.   public int run(String[] argv) throws Exception {
  49.     int exitcode = -1;
  50.     
  51.     if(argv.length < 1){
  52.       displayUsage("");
  53.       return exitcode;
  54.     }
  55.     String cmd = argv[0];
  56.     boolean displayQueueList = false;
  57.     boolean displayQueueInfoWithJobs = false;
  58.     boolean displayQueueInfoWithoutJobs = false;
  59.     
  60.     if("-list".equals(cmd)){
  61.       displayQueueList = true;
  62.     }else if("-info".equals(cmd)){
  63.       if(argv.length == 2 && !(argv[1].equals("-showJobs"))) {
  64.         displayQueueInfoWithoutJobs = true;
  65.       } else if(argv.length == 3){
  66.         if(argv[2].equals("-showJobs")){
  67.           displayQueueInfoWithJobs = true;
  68.         }else {
  69.           displayUsage(cmd);
  70.           return exitcode;
  71.         }
  72.       }else {
  73.         displayUsage(cmd);
  74.         return exitcode;
  75.       }      
  76.     } else {
  77.       displayUsage(cmd);
  78.       return exitcode;
  79.     }
  80.     JobConf conf = new JobConf(getConf());
  81.     init(conf);
  82.     if (displayQueueList) {
  83.       displayQueueList();
  84.       exitcode = 0;
  85.     } else if (displayQueueInfoWithoutJobs){
  86.       displayQueueInfo(argv[1],false);
  87.       exitcode = 0;
  88.     } else if (displayQueueInfoWithJobs) {
  89.       displayQueueInfo(argv[1],true);
  90.       exitcode = 0;
  91.     }
  92.     
  93.     return exitcode;
  94.   }
  95.   
  96.   /**
  97.    * Method used to display information pertaining to a Single JobQueue 
  98.    * registered with the {@link QueueManager}. Display of the Jobs is 
  99.    * determine by the boolean 
  100.    * 
  101.    * @throws IOException
  102.    */
  103.   private void displayQueueInfo(String queue, boolean showJobs) throws IOException {
  104.     JobQueueInfo schedInfo = jc.getQueueInfo(queue);
  105.     if (schedInfo == null) {
  106.       System.out.printf("Queue Name : %s has no scheduling information n", queue);
  107.     } else {
  108.       System.out.printf("Queue Name : %s n", schedInfo.getQueueName());
  109.       System.out.printf("Scheduling Info : %s n",schedInfo.getSchedulingInfo());
  110.     }
  111.     if (showJobs) {
  112.       System.out.printf("Job Listn");
  113.       JobStatus[] jobs = jc.getJobsFromQueue(queue);
  114.       if (jobs == null)
  115.         jobs = new JobStatus[0];
  116.       jc.displayJobList(jobs);
  117.     }
  118.   }
  119.   /**
  120.    * Method used to display the list of the JobQueues registered
  121.    * with the {@link QueueManager}
  122.    * 
  123.    * @throws IOException
  124.    */
  125.   private void displayQueueList() throws IOException {
  126.     JobQueueInfo[] queues = jc.getQueues();
  127.     for (JobQueueInfo queue : queues) {
  128.       String schedInfo = queue.getSchedulingInfo();
  129.       if(schedInfo.trim().equals("")){
  130.         schedInfo = "N/A";
  131.       }
  132.       System.out.printf("Queue Name : %s n", queue.getQueueName());
  133.       System.out.printf("Scheduling Info : %s n",queue.getSchedulingInfo());
  134.     }
  135.   }
  136.   private void displayUsage(String cmd) {
  137.     String prefix = "Usage: JobQueueClient ";
  138.     if ("-queueinfo".equals(cmd)){
  139.       System.err.println(prefix + "[" + cmd + "<job-queue-name> [-showJobs]]");
  140.     }else {
  141.       System.err.printf(prefix + "<command> <args>n");
  142.       System.err.printf("t[-list]n");
  143.       System.err.printf("t[-info <job-queue-name> [-showJobs]]nn");
  144.       ToolRunner.printGenericCommandUsage(System.out);
  145.     }
  146.   }
  147.   public static void main(String[] argv) throws Exception {
  148.     int res = ToolRunner.run(new JobQueueClient(), argv);
  149.     System.exit(res);
  150.   }
  151.   
  152. }