文档章节

hive启动的参数提取+日志设置

强子1985
 强子1985
发布于 2016/03/12 15:42
字数 582
阅读 78
收藏 0

当我们启动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();

}

很简单

------

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
强子1985

强子1985

粉丝 895
博文 1295
码字总数 959063
作品 8
南京
架构师
私信 提问
yum安装CDH5.5 hive、impala

一、安装hive 组件安排如下: 1.安装hive 在77上安装hive: 在其他节点上可以安装客户端: 2.安装mysql yum方式安装mysql: 启动数据库: 安装jdbc驱动: 设置mysql初始密码为bigdata: 进入...

PeanutLike
2016/10/13
392
1
利用java jdbc从hive提取日志数据进行简单处理

基于hive和spark的日志处理 从hive中读取数据 通过java中的jdbc方式连接hive 利用java中的java.sql.DriverManager连接hive,将数据暂时放到ListBuffer,之后转换成RDD进行spark基本操作。 利...

MyNameIsObama
2017/11/01
0
0
[翻译]Hive wiki GettingStarted

安装和配置 需求 java1.6 hadoop 0.20.x 使用发布包安装Hive 首先从Apache下载镜像下载最新的发布包(见Hive版本)接下来解压缩tar包。这将会创建一个名字为hive-x.y.z的子目录 配置环境变量H...

xiangel
2014/03/19
0
0
hive(03)、数据仓库Hive Web UI的配置使用

Hive有一个基于web界面的东西,主要用于查看当前HiveServer2服务链接的会话、服务日志、配置参数等信息,这个服务更像是一个hive提供的监控服务,更加方便对hive的使用情况进行监控,本文我们...

MaxBill
2018/01/15
0
0
大数据实时查询-Presto集群部署搭建

Presto介绍 Presto是一个分布式SQL查询引擎, 它被设计为用来专门进行高速、实时的数据分析。它支持标准的ANSI SQL,包括复杂查询、聚合(aggregation)、连接(join)和窗口函数(window fu...

高广超
2018/10/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Linux iptables之mangle表使用案例

mangle表的用途 mangle表的主要功能是根据规则修改数据包的一些标志位,以便其他规则或程序可以利用这种标志对数据包进行过滤或策略路由。 mangel表使用示例 示例1-策略路由1 内网的客户机通...

月下狼
36分钟前
2
0
OSChina 周日乱弹 —— 兼职我想去学学布偶戏

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @clouddyy : 《火炎 - 女王蜂》 《火炎 - 女王蜂》 手机党少年们想听歌,请使劲儿戳(这里) @小鱼丁 :还在睡觉突然接到一个小哥哥电话“x...

小小编辑
48分钟前
42
3
租房软件隐私保护如同虚设

近日,苏州市民赵先生向江苏新闻广播新闻热线025-84658888反映,他在“安居客”手机应用软件上浏览二手房信息,并且使用该软件自动生成的虚拟号码向当地一家中介公司进行咨询。可电话刚挂不久...

linux-tao
今天
3
0
分布式项目(五)iot-pgsql

书接上回,在Mapping server中,我们已经把数据都整理好了,现在利用postgresql存储历史数据。 iot-pgsql 构建iot-pgsql模块,这里我们写数据库为了性能考虑不在使用mybatis,换成spring jd...

lelinked
今天
6
0
一文分析java基础面试题中易出错考点

前言 这篇文章主要针对的是笔试题中出现的通过查看代码执行结果选择正确答案题材。 正式进入题目内容: 1、(单选题)下面代码的输出结果是什么? public class Base { private Strin...

一看就喷亏的小猿
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部