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

网格计算

开发平台:

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.tools;
  19. import java.io.IOException;
  20. import javax.security.auth.login.LoginException;
  21. import org.apache.hadoop.conf.Configuration;
  22. import org.apache.hadoop.conf.Configured;
  23. import org.apache.hadoop.ipc.RPC;
  24. import org.apache.hadoop.ipc.RemoteException;
  25. import org.apache.hadoop.mapred.JobTracker;
  26. import org.apache.hadoop.net.NetUtils;
  27. import org.apache.hadoop.security.UnixUserGroupInformation;
  28. import org.apache.hadoop.security.authorize.RefreshAuthorizationPolicyProtocol;
  29. import org.apache.hadoop.util.Tool;
  30. import org.apache.hadoop.util.ToolRunner;
  31. /**
  32.  * Administrative access to Hadoop Map-Reduce.
  33.  *
  34.  * Currently it only provides the ability to connect to the {@link JobTracker}
  35.  * and refresh the service-level authorization policy.
  36.  */
  37. public class MRAdmin extends Configured implements Tool {
  38.   public MRAdmin() {
  39.     super();
  40.   }
  41.   public MRAdmin(Configuration conf) {
  42.     super(conf);
  43.   }
  44.   private static void printHelp(String cmd) {
  45.     String summary = "hadoop mradmin is the command to execute Map-Reduce administrative commands.n" +
  46.     "The full syntax is: nn" +
  47.     "hadoop mradmin [-refreshServiceAcl] [-help [cmd]]n"; 
  48.   String refreshServiceAcl = "-refreshServiceAcl: Reload the service-level authorization policy filen" +
  49.     "ttJobtracker will reload the authorization policy file.n";
  50.   
  51.   String help = "-help [cmd]: tDisplays help for the given command or all commands if nonen" +
  52.     "ttis specified.n";
  53.   if ("refreshServiceAcl".equals(cmd)) {
  54.     System.out.println(refreshServiceAcl);
  55.   } else if ("help".equals(cmd)) {
  56.     System.out.println(help);
  57.   } else {
  58.     System.out.println(summary);
  59.     System.out.println(refreshServiceAcl);
  60.     System.out.println(help);
  61.     System.out.println();
  62.     ToolRunner.printGenericCommandUsage(System.out);
  63.   }
  64. }
  65.   
  66.   /**
  67.    * Displays format of commands.
  68.    * @param cmd The command that is being executed.
  69.    */
  70.   private static void printUsage(String cmd) {
  71.     if ("-refreshServiceAcl".equals(cmd)) {
  72.       System.err.println("Usage: java MRAdmin"
  73.                          + " [-refreshServiceAcl]");
  74.     } else {
  75.       System.err.println("Usage: java MRAdmin");
  76.       System.err.println("           [-refreshServiceAcl]");
  77.       System.err.println("           [-help [cmd]]");
  78.       System.err.println();
  79.       ToolRunner.printGenericCommandUsage(System.err);
  80.     }
  81.   }
  82.   
  83.   private static UnixUserGroupInformation getUGI(Configuration conf) 
  84.   throws IOException {
  85.     UnixUserGroupInformation ugi = null;
  86.     try {
  87.       ugi = UnixUserGroupInformation.login(conf, true);
  88.     } catch (LoginException e) {
  89.       throw (IOException)(new IOException(
  90.           "Failed to get the current user's information.").initCause(e));
  91.     }
  92.     return ugi;
  93.   }
  94.   private int refreshAuthorizationPolicy() throws IOException {
  95.     // Get the current configuration
  96.     Configuration conf = getConf();
  97.     
  98.     // Create the client
  99.     RefreshAuthorizationPolicyProtocol refreshProtocol = 
  100.       (RefreshAuthorizationPolicyProtocol) 
  101.       RPC.getProxy(RefreshAuthorizationPolicyProtocol.class, 
  102.                    RefreshAuthorizationPolicyProtocol.versionID, 
  103.                    JobTracker.getAddress(conf), getUGI(conf), conf,
  104.                    NetUtils.getSocketFactory(conf, 
  105.                                              RefreshAuthorizationPolicyProtocol.class));
  106.     
  107.     // Refresh the authorization policy in-effect
  108.     refreshProtocol.refreshServiceAcl();
  109.     
  110.     return 0;
  111.   }
  112.   
  113.   @Override
  114.   public int run(String[] args) throws Exception {
  115.     if (args.length < 1) {
  116.       printUsage("");
  117.       return -1;
  118.     }
  119.     int exitCode = -1;
  120.     int i = 0;
  121.     String cmd = args[i++];
  122.     //
  123.     // verify that we have enough command line parameters
  124.     //
  125.     if ("-refreshServiceAcl".equals(cmd)) {
  126.       if (args.length != 1) {
  127.         printUsage(cmd);
  128.         return exitCode;
  129.       }
  130.     }
  131.     
  132.     exitCode = 0;
  133.     try {
  134.       if ("-refreshServiceAcl".equals(cmd)) {
  135.         exitCode = refreshAuthorizationPolicy();
  136.       } else if ("-help".equals(cmd)) {
  137.         if (i < args.length) {
  138.           printUsage(args[i]);
  139.         } else {
  140.           printHelp("");
  141.         }
  142.       } else {
  143.         exitCode = -1;
  144.         System.err.println(cmd.substring(1) + ": Unknown command");
  145.         printUsage("");
  146.       }
  147.     } catch (IllegalArgumentException arge) {
  148.       exitCode = -1;
  149.       System.err.println(cmd.substring(1) + ": " + arge.getLocalizedMessage());
  150.       printUsage(cmd);
  151.     } catch (RemoteException e) {
  152.       //
  153.       // This is a error returned by hadoop server. Print
  154.       // out the first line of the error mesage, ignore the stack trace.
  155.       exitCode = -1;
  156.       try {
  157.         String[] content;
  158.         content = e.getLocalizedMessage().split("n");
  159.         System.err.println(cmd.substring(1) + ": "
  160.                            + content[0]);
  161.       } catch (Exception ex) {
  162.         System.err.println(cmd.substring(1) + ": "
  163.                            + ex.getLocalizedMessage());
  164.       }
  165.     } catch (Exception e) {
  166.       exitCode = -1;
  167.       System.err.println(cmd.substring(1) + ": "
  168.                          + e.getLocalizedMessage());
  169.     } 
  170.     return exitCode;
  171.   }
  172.   public static void main(String[] args) throws Exception {
  173.     int result = ToolRunner.run(new MRAdmin(), args);
  174.     System.exit(result);
  175.   }
  176. }