• Hive源码分析(1)——HiveServer2启动过程


    1.想了解HiveServer2的启动过程,则需要找到启动HiveServer2的入口,hive服务的启动命令为hive --service HiveServer2,通过分析$HIVE_HOME/binhive脚本可知,执行hive --service HiveServer2后正真调用的是$HIVE_HOME/bin/ext下的hiveserver2.sh脚本,而从hiveserver2.sh脚本可以看出,hive服务的入口为HiveServer2类,因此我们需要通过分析HiveServer2类来了解hive的启动过程。

    2.入口方法

    HiveServer2类的入口方法为main方法,该方法中做了以下几件事:

    1)设置加载hive配置的标识的值为true

    2)构造ServerOptionsProcessor对象,并调用该对象的parse()方法解析参数

    3)调用LogUtils.initHiveLog4j()方法初始化hive日志

    4)基于命令解析结果获取执行器,并调用execute()方法启动HiveServer2服务

    注:在执行以上四个步骤时,一旦捕获到异常就会执行System.exit(-1)退出程序。

    了解了main()的大致逻辑,接下来分析每个步骤的具体实现。

    1.ServerOptionsProcessorparse()方法

    parse()方法中先会通过new GnuParser().parse()方法将参数解析为CommandLine对象,然后调用CommandLinegetOptionProperties()获取hive的配置,并将这些配置设置到系统属性中,最后根据参数选项选取对应的处理器,并返回对应的参数处理的response结果,主要包括5种情况:

    1)当参数选项为H时,处理器为HelpOptionExecutor,即通过打印用法来执行--help选项;

    2)当参数选项为deregister时,处理器为DeregisterOptionExecutor,即通过从特定版本的ZooKeeper中注销所有HiveServer2实例来执行--deregister选项;

    3)当参数选项为listHAPeers时,处理器为ListHAPeersExecutor

    4)当参数选项为listHAPeers时,处理器为FailoverHS2InstanceExecutor

    接下来直接查看StartOptionExecutor类的execute方法,如下所示:

    该方法的核心是1305startHiveServer2()方法,进入该方法,可以看到该方法里的所有逻辑都包含在一个while(true)中,这样做的目的是在HiveServer2失败后增加重试操作,那什么会结束该while循环呢?有两种情况,一种是在限制的次数内执行启动成功,一种是重试次数用完还未执行成功,重试次数为默认值为30秒,重试间隔时间为60秒,可通过配置进行修改,然后来看主要启动逻辑。

    1)启动hive之前先清除hive缓存目录(/tmp/hive

    根据hive.start.cleanup.scratchdir的值判断是否需要清理,默认值为false。如果为true,则会根据hive.exec.scratchdir配置的临时目录的值,调用hdfs接口来删除该路径,如下图所示:

    1)创建HiveServer2()实例

    创建HIveServer2实例时会将loadHiveServer2Config的值设置为true,该值是标识是否加载hive配置。

    2)初始化hive配置

    a首先会初始化hive指标;

    b创建CLIService实例

    c创建ThriftHttpCLIService实例

    d获取当前线程的配置单元对象。 如果未初始化,则创建一个新的。如果新配置在元数据配置中不同,或者所有者不同,则创建一个新的。

    e如果配置HA模式,需要在zk上注册名称空间

    3)调用HiveServer2start()方法启动hive服务

    a调用父类(CompositeService)的start()方法,包括启动CLIServiceThriftHttpCLIService服务

    a如果我们支持动态服务发现,则将此HiveServer2实例的服务uri作为znode添加到Zookeeper

    b启动策略同步器

    c启动webServer

    d如果未启用HA,则启动tez session

  • 相关阅读:
    Debian Linux 查看用户命令
    WPF 样式(Style)(2)
    SQLServer2012下更改数据库名字
    WPF 触发器Triggers
    随记
    网页打印总结(1)
    安装node.js,CoffeeScript,Express.js,mysql,jade
    javascript——this
    win8下IIS8.0下uploadifyv3.1上传文件超过30M,报HTTP Error(404)
    Linux软件安装常用方法(转载)
  • 原文地址:https://www.cnblogs.com/sheng-sjk/p/14540502.html
Copyright © 2020-2023  润新知