博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hive启动的参数提取+日志设置
阅读量:6325 次
发布时间:2019-06-22

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

hot3.png

当我们启动cli环境后,其实是启动了一个java程序,只不过这个程序是从console里读取命令进行交互,就跟shell一样的。

好,那么当我们启动之后,敲入命令"CREATE DATABASE financials;"之后,到底发生了什么?程序背后又是怎么做的呢?

就让我们跟着源码一起来分析下。

-------------------------------------------------------------------------------------

首先代码CliDriver.java的main函数很简单,如下:

  public static void main(String[] argsthrows Exception {

    int ret = run(args);

    System.exit(ret);

  }

所以需要继续跟踪run函数。

-------------------------------------------------------------------------------------

OptionsProcessor oproc = new OptionsProcessor();---生成了这么一个对象,

 

  private final Options options = new Options();---内部变量,属于commons-cli类

然后紧接着就加入了若干对象

 

 

// -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());

 

    // -h hostname/ippaddress

    options.addOption(OptionBuilder

        .hasArg()

        .withArgName("hostname")

        .withDescription("connecting to Hive Server on remote host")

        .create('h'));

 

    // -p port

    options.addOption(OptionBuilder

        .hasArg()

        .withArgName("port")

        .withDescription("connecting to Hive Server on port number")

        .create('p'));

 

    // Substitution option -d, --define

    options.addOption(OptionBuilder

        .withValueSeparator()

        .hasArgs(2)

        .withArgName("key=value")

        .withLongOpt("define")

        .withDescription("Variable subsitution 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 subsitution 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"));

---这个没啥好说的,继续,初始化完之后,就开始使用了

 

if (!oproc.process_stage1(args)) {

      return 1;

    }

那么process_stage1内部究竟做了什么事情呢?--

 

public boolean process_stage1(String[] argv) {

// 看到这里了

try {

commandLine = new GnuParser().parse(optionsargv);// 依赖commons-cli第三方的包来解析参数

Properties confProps = commandLine.getOptionProperties("hiveconf");//---解析hiveconf的属性

for (String propKey : confProps.stringPropertyNames()) {---解析hiveconf的属性

System.setProperty(propKeyconfProps.getProperty(propKey));

}

 

Properties hiveVars = commandLine.getOptionProperties("define");---解析define 的属性

for (String propKey : hiveVars.stringPropertyNames()) {

hiveVariables.put(propKeyhiveVars.getProperty(propKey));

}

Properties hiveVars2 = commandLine.getOptionProperties("hivevar");---解析 hivevar的属性

for (String propKey : hiveVars2.stringPropertyNames()) {

hiveVariables.put(propKeyhiveVars2.getProperty(propKey));

}

catch (ParseException e) {

System.err.println(e.getMessage());

printUsage();

return false;

}

return true;---返回true.

}

 到目前为止,一切都很简单,就是解析了args 里的几个参数而已。

接下来是设置log4j

 

boolean logInitFailed = false;// ---设置日志属性,hive-log4j.properties

String logInitDetailMessage;

try {

logInitDetailMessage = LogUtils.initHiveLog4j();

catch (LogInitializationException e) {

logInitFailed = true;

logInitDetailMessage = e.getMessage();

}

很简单

------

 

 

 

 

转载于:https://my.oschina.net/qiangzigege/blog/636278

你可能感兴趣的文章
《学习OpenCv》 笔记(1)
查看>>
[百度]数组A中任意两个相邻元素大小相差1,在其中查找某个数
查看>>
温故而知新:Delegate,Action,Func,匿名方法,匿名委托,事件
查看>>
strtok、strtok_s、strtok_r 字符串切割函数
查看>>
shell编程基础(5)---循环指令
查看>>
八皇后问题
查看>>
.NET破解之爱奇迪(二)
查看>>
C#反射方法学习
查看>>
MD5加密解密
查看>>
.Net 转战 Android 4.4 日常笔记(6)--Android Studio DDMS用法
查看>>
SVN被锁定的几种解决方法
查看>>
js如何判断是否在iframe中及防止网页被别站用 iframe嵌套 (Load denied by X-Frame-Options)...
查看>>
ios ios7 取消控制拉升
查看>>
182在屏幕中实现网格化视图效果
查看>>
本文摘录 - FlumeJava
查看>>
Scala学习(三)----数组相关操作
查看>>
Matlab基于学习------------------函数微分学
查看>>
UVa 11790 - Murcia&#39;s Skyline
查看>>
启动时创建线程并传递数据
查看>>
汉字正字表达式解决方案
查看>>