1.想了解HiveServer2的启动过程,则需要找到启动HiveServer2的入口,hive服务的启动命令为hive --service HiveServer2,通过分析$HIVE_HOME/bin下hive脚本可知,执行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.ServerOptionsProcessor的parse()方法

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

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

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

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

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

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

该方法的核心是1305行startHiveServer2()方法,进入该方法,可以看到该方法里的所有逻辑都包含在一个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)调用HiveServer2的start()方法启动hive服务

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

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

b启动策略同步器

c启动webServer

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

Hive源码分析(1)——HiveServer2启动过程的更多相关文章

  1. tomcat8 源码分析 | 组件及启动过程

    tomcat 8 源码分析 ,本文主要讲解tomcat拥有哪些组件,容器,又是如何启动的 推荐访问我的个人网站,排版更好看呦: https://chenmingyu.top/tomcat-source ...

  2. Netty源码分析之客户端启动过程

    一.先来看一下客户端示例代码. public class NettyClientTest { public void connect(int port, String host) throws Exc ...

  3. wxWidgets源码分析(1) - App启动过程

    目录 APP启动过程 wxApp入口定义 wxApp实例化准备 wxApp的实例化 wxApp运行 总结 APP启动过程 本文主要介绍wxWidgets应用程序的启动过程,从app.cpp入手. wx ...

  4. JVM源码分析之JVM启动流程

      原创申明:本文由公众号[猿灯塔]原创,转载请说明出处标注 “365篇原创计划”第十四篇. 今天呢!灯塔君跟大家讲: JVM源码分析之JVM启动流程 前言: 执行Java类的main方法,程序就能运 ...

  5. Spring源码分析之`BeanFactoryPostProcessor`调用过程

    前文传送门: Spring源码分析之预启动流程 Spring源码分析之BeanFactory体系结构 本文内容: AbstractApplicationContext#refresh前部分的一点小内容 ...

  6. Spring Ioc源码分析系列--Bean实例化过程(一)

    Spring Ioc源码分析系列--Bean实例化过程(一) 前言 上一篇文章Spring Ioc源码分析系列--Ioc容器注册BeanPostProcessor后置处理器以及事件消息处理已经完成了对 ...

  7. Tomcat源码分析之—具体启动流程分析

    从Tomcat启动调用栈可知,Bootstrap类的main方法为整个Tomcat的入口,在init初始化Bootstrap类的时候为设置Catalina的工作路径也就是Catalina_HOME信息 ...

  8. MyBatis 源码分析 - 映射文件解析过程

    1.简介 在上一篇文章中,我详细分析了 MyBatis 配置文件的解析过程.由于上一篇文章的篇幅比较大,加之映射文件解析过程也比较复杂的原因.所以我将映射文件解析过程的分析内容从上一篇文章中抽取出来, ...

  9. Spring Ioc源码分析系列--Bean实例化过程(二)

    Spring Ioc源码分析系列--Bean实例化过程(二) 前言 上篇文章Spring Ioc源码分析系列--Bean实例化过程(一)简单分析了getBean()方法,还记得分析了什么吗?不记得了才 ...

随机推荐

  1. 快速计算类似斐波那契数列数列的数列的第N项,矩阵快速幂

    这个题有循环节,可以不用这么做,这个可以当一个模板 #include <iostream> #include <cstdio> using namespace std; typ ...

  2. 后Low Code时代:聚焦和突破

    很多人都不想被贴上标签,我曾经也一样.觉得青春不能被定义,人也不能被分类.但随着学习和工作的变迁,慢慢开始发现标签也是一种名片效应. 比如一个做汽车销售的朋友,他就对BMW的车型非常熟悉,可以说是懂车 ...

  3. Monorepo All In One

    Monorepo All In One monorepos 只是一种思想,或设计模式,架构风格 https://trunkbaseddevelopment.com/monorepos/ Lerna h ...

  4. vue & async mounted

    vue & async mounted refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

  5. vue 自动注册全局组件

    vue 自动注册全局组件 vue 注册全局组件的方式 const plugins = { install(Vue) { const requireComponent = require.context ...

  6. Flutter for web

    Flutter for web https://flutter.dev/web https://github.com/flutter/flutter_web Dart https://github.c ...

  7. Techme INC:红光和近红外光疗法有效加速肌肉恢复,美国橄榄球队已采用

    Techme INC创始人兼董事长MADELEINE VAUGHAN表示:在运动结束后,肌肉纤维因为细微损伤造成酸痛情形,即是延迟性肌肉酸痛-DOMS.这类酸痛发生时,需要适度的恢复,避免造成肌肉拉伤 ...

  8. NGK全球启动大会正式启动,资产上链的前景与机会在哪?

    据彭博社报道,加州时间11月25日,NGK全球启动大会在美国硅谷圆满落幕,本次NGK全球启动大会为NGK全球化进程正式拉开了帷幕. 众多业界人士共襄盛举,共同进行探讨未来公链发展的去向和契机. 当前, ...

  9. 线上CPU飙升100%问题排查

    本文转载自线上CPU飙升100%问题排查 引子 对于互联网公司,线上CPU飙升的问题很常见(例如某个活动开始,流量突然飙升时),按照本文的步骤排查,基本1分钟即可搞定!特此整理排查方法一篇,供大家参考 ...

  10. banner自用图床

    放些常用的图做图床,也不在别的平台用.