Hive源码阅读(1)阅读环境搭建

  • 前言:让学习成为一种习惯
  • 环境准备
  • Hive源码下载
  • Hive源码目录
  • hive三个最重要的组件:
  • 其他组件
  • hive辅助组件
  • 编译源码
  • 配置Hive本地调试
  • 配置IDEA-DEBUG(注意端口和Host)
  • 开始Debug,配置成功图片一张,入口类选择了CLi,想看一下具体的源码执行流程


前言:让学习成为一种习惯

工作已经两年多了,各种各样的大数据框架也使用过,各种官网也翻了很多,但是对于框架的底层源码从未细细的了解过,有一位大佬对我说如果你遇到瓶颈就去看看源码,看看别人的代码怎么写,看看别人的思想,然后总结归纳,与自己的思想相结合,于是我就有了阅读源码的计划,说实话这个计划我纠结了很久,一直未付出实践,纠结Flink,Spark,Hive,Hadoop源码我究竟该从那一方面下手,经过我苦苦思考,最终将目光放在了ApacheHive之上,Hive身为主流的数据仓库框架,可以说已经很成熟了,并且应用广泛,而且兼容Spark,Flink,所以我决定先从Hive源码开始,源码阅读不是说你看这人家的源码全部读一遍就是阅读源码,这样无非是浪费时间,首先定义重点,我们如何阅读Hive源码,应该从那里下手,应该阅读那几部分的源码,废话不多说,我们开始

环境准备

我推荐系统Linux或者Mac作为主系统,测试过win但是没有成功,准备以下环境

  1. JDK这是必备的,个人目前主要是使用JDK8;
  2. Hadoop单机环境,没必要集群环境,因为我们只是为了阅读源码,不是为了去执行计算;
  3. Spark环境,这个随自己,主要是我自己本身就有这个环境,如果是新环境Hadoop+Hive就够了;
  4. Maven这个是必须的;

Hive源码下载

  1. CDH源码
    源码下载戳我
  2. 社区源码
    源码下载戳我 (我没有用过CDH的源码调试,但是因为目前公司使用的是CDH环境,所以是有尝试的想法)

Hive源码目录

hive源码解析 hive源码阅读_大数据

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

更多详细信息可以到官网看 ApacheHive

编译源码

  1. 编译命令:mvn clean package -DskipTests -Phadoop-2 -Pdist mvn clean install -DskipTests -Phadoop-2 -Pdist (二选一,注意依赖的Hadoop版本)

hive源码解析 hive源码阅读_大数据_02

  1. 编译完成后导入IDEA

配置Hive本地调试

  1. 配置Hadoop位置
    进入/opt/software/apache-hive-1.2.2-src/packaging/target/apache-hive-1.2.2-bin/apache-hive-1.2.2-bin/conf
    目录复制目录下的hive-env.sh.template为hive-env.sh(cp命令拷贝一份就行)
    添加Hadoop所在目录:export HADOOP_HOME=/opt/environment_variable/hadoop-2.6.0
  2. 初始化Hive元数据信息
    进入/opt/software/apache-hive-1.2.2-src/packaging/target/apache-hive-1.2.2-bin/apache-hive-1.2.2-bin
    运行命令bin/schematool -dbType derby -initSchema(这里为了方便使用的是derby,也可设置为MySQL)
    看到结果,说明成功;(图都丢了,所以没办法,这个装过Hive的应该都没问题)
  3. 启动HiveDebug
    hive --debug --hiveconf hive.root.logger=DEBUG,console
    出现Listening即为成功
./hive --debug --hiveconf ^Cve.root.logger=DEBUG,console
Listening for transport dt_socket at address: 8000

配置IDEA-DEBUG(注意端口和Host)

hive源码解析 hive源码阅读_apache_03

开始Debug,配置成功图片一张,入口类选择了CLi,想看一下具体的源码执行流程

hive源码解析 hive源码阅读_apache_04


这里说一下,我没有解决代码报红,因为爆红也不影响Debug,但是有时间的最好解决一下,因为如果不解决会很坑的,本次文章就到这里拉,如果觉得作者的文章不错,点个赞吧,开始我的源码阅读之旅,之后每周都会更新一篇源码阅读心得,在说一下如果有那位大佬测试了CDH版本的希望可以指点一下小弟,感谢阅读