博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.hive命令的3种调用方式 以及源码
阅读量:5213 次
发布时间:2019-06-14

本文共 9718 字,大约阅读时间需要 32 分钟。

 

安装 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
hiveVariables = new HashMap
(); @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
options.addOption(OptionBuilder .hasArg() .withArgName("filename") .withDescription("SQL from files") .create('f')); // -i
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
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
values = new ArrayList
(); /** 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; }

  

转载于:https://www.cnblogs.com/itxuexiwang/p/6288663.html

你可能感兴趣的文章
redis的window版本下载地址
查看>>
win运行canal
查看>>
idea右下角显示使用内存情况
查看>>
修改系统个人文件夹存储默认存放位置
查看>>
win10电脑休眠后无法唤醒的解决办法
查看>>
如何破解域管理员密码
查看>>
Windows Server 2008 R2忘记管理员密码后的解决方法
查看>>
IE11兼容IE8的设置
查看>>
windows server 2008 R2 怎么集成USB3.0驱动
查看>>
企业邮箱 Webmail 通讯录导入 Outlook
查看>>
Foxmail:导入联系人
查看>>
在windows上安装ubuntu双系统
查看>>
JavaScript AJAX原生写法
查看>>
详解promise、async和await的执行顺序
查看>>
NodeJs实现WebSocket——express-ws
查看>>
vue开发公众号 在钩子里面处理登录获取code
查看>>
vue路由跳转时更改页面title
查看>>
NodeJS怎么实现WebSocket功能
查看>>
vue:axios二次封装,接口统一存放
查看>>
Js三大特性--封装、继承以及多态
查看>>