CommandExecutor.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.cli.util;
  19. import java.io.ByteArrayOutputStream;
  20. import java.io.File;
  21. import java.io.PrintStream;
  22. import java.util.StringTokenizer;
  23. import org.apache.hadoop.cli.TestCLI;
  24. import org.apache.hadoop.cli.util.CLITestData.TestCmd;
  25. import org.apache.hadoop.cli.util.CLITestData.TestCmd.CommandType;
  26. import org.apache.hadoop.fs.FsShell;
  27. import org.apache.hadoop.hdfs.tools.DFSAdmin;
  28. import org.apache.hadoop.mapred.tools.MRAdmin;
  29. import org.apache.hadoop.util.ToolRunner;
  30. /**
  31.  *
  32.  * This class executed commands and captures the output
  33.  */
  34. public class CommandExecutor {
  35.   private static String commandOutput = null;
  36.   private static int exitCode = 0;
  37.   private static Exception lastException = null;
  38.   private static String cmdExecuted = null;
  39.   
  40.   private static String[] getCommandAsArgs(final String cmd, final String masterKey,
  41.                                        final String master) {
  42.     StringTokenizer tokenizer = new StringTokenizer(cmd, " ");
  43.     String[] args = new String[tokenizer.countTokens()];
  44.     
  45.     int i = 0;
  46.     while (tokenizer.hasMoreTokens()) {
  47.       args[i] = tokenizer.nextToken();
  48.       args[i] = args[i].replaceAll(masterKey, master);
  49.       args[i] = args[i].replaceAll("CLITEST_DATA", 
  50.         new File(TestCLI.TEST_CACHE_DATA_DIR).
  51.         toURI().toString().replace(' ', '+'));
  52.       args[i] = args[i].replaceAll("USERNAME", System.getProperty("user.name"));
  53.       i++;
  54.     }
  55.     
  56.     return args;
  57.   }
  58.   
  59.   public static int executeCommand(final TestCmd cmd, 
  60.                                    final String namenode, final String jobtracker) 
  61.   throws Exception {
  62.     switch(cmd.getType()) {
  63.     case DFSADMIN:
  64.       return CommandExecutor.executeDFSAdminCommand(cmd.getCmd(), namenode);
  65.     case MRADMIN:
  66.       return CommandExecutor.executeMRAdminCommand(cmd.getCmd(), jobtracker);
  67.     case FS:
  68.       return CommandExecutor.executeFSCommand(cmd.getCmd(), namenode);
  69.     default:
  70.       throw new Exception("Unknow type of Test command:"+ cmd.getType()); 
  71.     }
  72.   }
  73.   
  74.   public static int executeDFSAdminCommand(final String cmd, final String namenode) {
  75.       exitCode = 0;
  76.       
  77.       ByteArrayOutputStream bao = new ByteArrayOutputStream();
  78.       PrintStream origOut = System.out;
  79.       PrintStream origErr = System.err;
  80.       
  81.       System.setOut(new PrintStream(bao));
  82.       System.setErr(new PrintStream(bao));
  83.       
  84.       DFSAdmin shell = new DFSAdmin();
  85.       String[] args = getCommandAsArgs(cmd, "NAMENODE", namenode);
  86.       cmdExecuted = cmd;
  87.      
  88.       try {
  89.         ToolRunner.run(shell, args);
  90.       } catch (Exception e) {
  91.         e.printStackTrace();
  92.         lastException = e;
  93.         exitCode = -1;
  94.       } finally {
  95.         System.setOut(origOut);
  96.         System.setErr(origErr);
  97.       }
  98.       
  99.       commandOutput = bao.toString();
  100.       
  101.       return exitCode;
  102.   }
  103.   
  104.   public static int executeMRAdminCommand(final String cmd, 
  105.                                           final String jobtracker) {
  106.     exitCode = 0;
  107.     
  108.     ByteArrayOutputStream bao = new ByteArrayOutputStream();
  109.     PrintStream origOut = System.out;
  110.     PrintStream origErr = System.err;
  111.     
  112.     System.setOut(new PrintStream(bao));
  113.     System.setErr(new PrintStream(bao));
  114.     
  115.     MRAdmin mradmin = new MRAdmin();
  116.     String[] args = getCommandAsArgs(cmd, "JOBTRACKER", jobtracker);
  117.     cmdExecuted = cmd;
  118.    
  119.     try {
  120.       ToolRunner.run(mradmin, args);
  121.     } catch (Exception e) {
  122.       e.printStackTrace();
  123.       lastException = e;
  124.       exitCode = -1;
  125.     } finally {
  126.       System.setOut(origOut);
  127.       System.setErr(origErr);
  128.     }
  129.     
  130.     commandOutput = bao.toString();
  131.     
  132.     return exitCode;
  133.   }
  134.   public static int executeFSCommand(final String cmd, final String namenode) {
  135.     exitCode = 0;
  136.     
  137.     ByteArrayOutputStream bao = new ByteArrayOutputStream();
  138.     PrintStream origOut = System.out;
  139.     PrintStream origErr = System.err;
  140.     
  141.     System.setOut(new PrintStream(bao));
  142.     System.setErr(new PrintStream(bao));
  143.     
  144.     FsShell shell = new FsShell();
  145.     String[] args = getCommandAsArgs(cmd, "NAMENODE", namenode);
  146.     cmdExecuted = cmd;
  147.     
  148.     try {
  149.       ToolRunner.run(shell, args);
  150.     } catch (Exception e) {
  151.       e.printStackTrace();
  152.       lastException = e;
  153.       exitCode = -1;
  154.     } finally {
  155.       System.setOut(origOut);
  156.       System.setErr(origErr);
  157.     }
  158.     
  159.     commandOutput = bao.toString();
  160.     
  161.     return exitCode;
  162.   }
  163.   
  164.   public static String getLastCommandOutput() {
  165.     return commandOutput;
  166.   }
  167.   public static int getLastExitCode() {
  168.     return exitCode;
  169.   }
  170.   public static Exception getLastException() {
  171.     return lastException;
  172.   }
  173.   public static String getLastCommand() {
  174.     return cmdExecuted;
  175.   }
  176. }