zoukankan      html  css  js  c++  java
  • .hive命令的3种调用方式 以及源码

    安装 hive后 在命令行 如输入 Hive -h

    -后面随便输入。让让他报错进入命令提示界面

    -d 定义一个变量 两种形式

    -d A=B or --define A=B

    -e 执行sql语句  hive -e "select * from a"

    -f 执行一个sql片段。或者包含sql语句的文本文件

    -i  初始化 sql文件。或者包含sql语句的文本文件

    [cloudera@quickstart Desktop]$ hive -i
    Missing argument for option: i
    usage: hive
    -d,--define <key=value> Variable subsitution to apply to hive
    commands. e.g. -d A=B or --define A=B
    --database <databasename> Specify the database to use
    -e <quoted-query-string> SQL from command line
    -f <filename> SQL from files
    -H,--help Print help information
    --hiveconf <property=value> Use value for given property
    --hivevar <key=value> Variable subsitution to apply to hive
    commands. e.g. --hivevar A=B
    -i <filename> Initialization SQL file
    -S,--silent Silent mode in interactive shell
    -v,--verbose Verbose mode (echo executed SQL to the
    console)

    -hiveconf mapred.reduce.tasks=32 修改hive/conf 配置文件默认的值

    下面对于的源代码,看是不是很熟悉。

    /**
     * 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.hive.cli;
    
    import java.util.HashMap;
    import java.util.Arrays;
    import java.util.Map;
    import java.util.Properties;
    
    import org.apache.commons.cli.GnuParser;
    import org.apache.commons.cli.HelpFormatter;
    import org.apache.commons.cli.Option;
    import org.apache.commons.cli.OptionBuilder;
    import org.apache.commons.cli.Options;
    import org.apache.commons.cli.ParseException;
    import org.apache.hadoop.hive.common.cli.CommonCliOptions;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    /**
     * OptionsProcessor.
     *
     */
    public class OptionsProcessor {
      protected static final Logger l4j = LoggerFactory.getLogger(OptionsProcessor.class.getName());
      private final Options options = new Options();
      private org.apache.commons.cli.CommandLine commandLine;
      Map<String, String> hiveVariables = new HashMap<String, String>();
    
      @SuppressWarnings("static-access")
      public OptionsProcessor() {
    
        // -database database
        options.addOption(OptionBuilder
            .hasArg()
            .withArgName("databasename")
            .withLongOpt("database")
            .withDescription("Specify the database to use")
            .create());
    
        // -e 'quoted-query-string'
        options.addOption(OptionBuilder
            .hasArg()
            .withArgName("quoted-query-string")
            .withDescription("SQL from command line")
            .create('e'));
    
        // -f <query-file>
        options.addOption(OptionBuilder
            .hasArg()
            .withArgName("filename")
            .withDescription("SQL from files")
            .create('f'));
    
        // -i <init-query-file>
        options.addOption(OptionBuilder
            .hasArg()
            .withArgName("filename")
            .withDescription("Initialization SQL file")
            .create('i'));
    
        // -hiveconf x=y
        options.addOption(OptionBuilder
            .withValueSeparator()
            .hasArgs(2)
            .withArgName("property=value")
            .withLongOpt("hiveconf")
            .withDescription("Use value for given property")
            .create());
    
        // Substitution option -d, --define
        options.addOption(OptionBuilder
            .withValueSeparator()
            .hasArgs(2)
            .withArgName("key=value")
            .withLongOpt("define")
            .withDescription("Variable substitution to apply to Hive commands. e.g. -d A=B or --define A=B")
            .create('d'));
    
        // Substitution option --hivevar
        options.addOption(OptionBuilder
            .withValueSeparator()
            .hasArgs(2)
            .withArgName("key=value")
            .withLongOpt("hivevar")
            .withDescription("Variable substitution to apply to Hive commands. e.g. --hivevar A=B")
            .create());
    
        // [-S|--silent]
        options.addOption(new Option("S", "silent", false, "Silent mode in interactive shell"));
    
        // [-v|--verbose]
        options.addOption(new Option("v", "verbose", false, "Verbose mode (echo executed SQL to the console)"));
    
        // [-H|--help]
        options.addOption(new Option("H", "help", false, "Print help information"));
    
      }
    
      public boolean process_stage1(String[] argv) {
        try {
          commandLine = new GnuParser().parse(options, argv);
          Properties confProps = commandLine.getOptionProperties("hiveconf");
          for (String propKey : confProps.stringPropertyNames()) {
            // with HIVE-11304, hive.root.logger cannot have both logger name and log level.
            // if we still see it, split logger and level separately for hive.root.logger
            // and hive.log.level respectively
            if (propKey.equalsIgnoreCase("hive.root.logger")) {
              CommonCliOptions.splitAndSetLogger(propKey, confProps);
            } else {
              System.setProperty(propKey, confProps.getProperty(propKey));
            }
          }
    
          Properties hiveVars = commandLine.getOptionProperties("define");
          for (String propKey : hiveVars.stringPropertyNames()) {
            hiveVariables.put(propKey, hiveVars.getProperty(propKey));
          }
    
          Properties hiveVars2 = commandLine.getOptionProperties("hivevar");
          for (String propKey : hiveVars2.stringPropertyNames()) {
            hiveVariables.put(propKey, hiveVars2.getProperty(propKey));
          }
        } catch (ParseException e) {
          System.err.println(e.getMessage());
          printUsage();
          return false;
        }
        return true;
      }
    
      public boolean process_stage2(CliSessionState ss) {
        ss.getConf();
    
        if (commandLine.hasOption('H')) {
          printUsage();
          return false;
        }
    
        ss.setIsSilent(commandLine.hasOption('S'));
    
        ss.database = commandLine.getOptionValue("database");
    
        ss.execString = commandLine.getOptionValue('e');
    
        ss.fileName = commandLine.getOptionValue('f');
    
        ss.setIsVerbose(commandLine.hasOption('v'));
    
        String[] initFiles = commandLine.getOptionValues('i');
        if (null != initFiles) {
          ss.initFiles = Arrays.asList(initFiles);
        }
    
        if (ss.execString != null && ss.fileName != null) {
          System.err.println("The '-e' and '-f' options cannot be specified simultaneously");
          printUsage();
          return false;
        }
    
        if (commandLine.hasOption("hiveconf")) {
          Properties confProps = commandLine.getOptionProperties("hiveconf");
          for (String propKey : confProps.stringPropertyNames()) {
            ss.cmdProperties.setProperty(propKey, confProps.getProperty(propKey));
          }
        }
    
        return true;
      }
    
      private void printUsage() {
        new HelpFormatter().printHelp("hive", options);
      }
    
      public Map<String, String> getHiveVariables() {
        return hiveVariables;
      }
    }
    hasArg()方法
      public static OptionBuilder hasArg()
        {
            OptionBuilder.numberOfArgs = 1;
    
            return INSTANCE;
        }
        public static Option create(String opt) throws IllegalArgumentException
        {
            Option option = null;
            try
            {
                // create the option
                option = new Option(opt, description);
    
                // set the option properties
                option.setLongOpt(longopt);
                option.setRequired(required);
                option.setOptionalArg(optionalArg);
                option.setArgs(numberOfArgs);
                option.setType(type);
                option.setValueSeparator(valuesep);
                option.setArgName(argName);
            }
            finally
            {
                // reset the OptionBuilder properties
                OptionBuilder.reset();
            }
    
            // return the Option instance
            return option;
        }
    

      最终一下面形式存储

     */
    public class Option implements Cloneable, Serializable
    {
        /** constant that specifies the number of argument values has not been specified */
        public static final int UNINITIALIZED = -1;
    
        /** constant that specifies the number of argument values is infinite */
        public static final int UNLIMITED_VALUES = -2;
    
        /** The serial version UID. */
        private static final long serialVersionUID = 1L;
    
        /** the name of the option */
        private final String opt;
    
        /** the long representation of the option */
        private String longOpt;
    
        /** the name of the argument for this option */
        private String argName;
    
        /** description of the option */
        private String description;
    
        /** specifies whether this option is required to be present */
        private boolean required;
    
        /** specifies whether the argument value of this Option is optional */
        private boolean optionalArg;
    
        /** the number of argument values this option can have */
        private int numberOfArgs = UNINITIALIZED;
    
        /** the type of this Option */
        private Class<?> type = String.class;
    
        /** the list of argument values **/
        private List<String> values = new ArrayList<String>();
    
        /** the character that is the value separator */
        private char valuesep;
    
        /**
         * Private constructor used by the nested Builder class.
         * 
         * @param builder builder used to create this option
         */
        private Option(final Builder builder)
        {
            this.argName = builder.argName;
            this.description = builder.description;
            this.longOpt = builder.longOpt;
            this.numberOfArgs = builder.numberOfArgs;
            this.opt = builder.opt;
            this.optionalArg = builder.optionalArg;
            this.required = builder.required;
            this.type = builder.type;
            this.valuesep = builder.valuesep;
        }
        
    

      

  • 相关阅读:
    jquery 绑定事件前先解除事件绑定
    jquer ajax的方法返回值
    jQuery动态生成不规则表格前后端
    常见的正则表达式
    锚点连接
    javascript动态添加删除表格
    java面试题之第二回
    [转]java抽象类和接口
    Java IO 和 NIO
    Java IO之序列化
  • 原文地址:https://www.cnblogs.com/itxuexiwang/p/6288663.html
Copyright © 2011-2022 走看看