这次主要对hive源码包及hive的两种调试方式做了介绍,这篇结束后,整个源码调试环境的搭建已经完成。

1、Hive源码包介绍

hive 源码导入 hive源码解析_hadoop

  • hive三个最重要的组件:

serde:这个组件是 hive内置的一些序列化解析类,此组件允许用户自己开发自定义序列化、反序列化文件解析器

MetaStore:hive的元数据服务器,用来存放数据仓库中所有表和分区的信息,hive元数据建表sql、升级sql脚本都存放在此目录下

ql:此组件用于解析sql生成执行计划(hive核心包,熟读此包,可了解hive执行流程核心)

  • 其他组件

cli:hive命令的入口,用于处理命令行提交作业

service:此组件所有对外api接口的服务端(通过thrift实现),可用于其他客户端与hive交互,比如jdbc。  

common:hive基础代码库,hive各个组件信息的传递也是有此包HiveConf类来管理。

ant:此组件包含一些ant任务需要的基础代码

bin:此组件包涵hive里的所有脚本,包括hivecli的脚本

beeline: HiveServer2提供的一个新的命令行工具Beeline

hcatalog: 是apache开源的对于表和底层数据管理统一服务平台,HCatalog底层依赖于Hive Metastore

findbugs:Findbugs是一个在java程序中查找bug的程序,它查找bug模式的实例,也就是可能出错的代码实例,注意Findbugs是检查java字节码,也就是*.class文件。  

hwi: hive web页面的接口

shims: shims相关类是用来兼容不同的hadoop和hive版本

llap: 是基于tez的一种近实时查询方案

  • hive辅助组件

conf: 此目录包涵hive配置文件hive-default.xml、hive-site.xml

data: hive测试所用数据

lib:  hive运行期间依赖的jar

2、调试

  • 远程调试

使用hive –debug启动hive远程调试模式

hive 源码导入 hive源码解析_hive_02

可以看到监听端口是8000,处于等待状态

设置eclipse远程调试:

在cliDriver类中打断点,在CliDriver类上右键Debug As->DebugConfigurations

hive 源码导入 hive源码解析_hive 源码导入_03

右键Remote Java Application-> New

hive 源码导入 hive源码解析_hive 源码导入_04

点Debug,我们看到hive shell会继续执行

hive 源码导入 hive源码解析_数据仓库_05

输入命令进入调试:

hive 源码导入 hive源码解析_hive_06

  • 本地调试

本地调试是通过运行hive-cli项目中的CliDriver类来进行调试:

在cliDriver类中打断点,在CliDriver类上右键Debug As->Java Application

hive 源码导入 hive源码解析_hadoop_07

点击yes进入调试界面

hive 源码导入 hive源码解析_hive 源码导入_08

在分析hive源码过程中,本地调试用起来更为方便