Hive代码分析报告(一):Hive安装使用、代码分析工作概述

2021SC@SDUSC

目录

Hive介绍

Hive的安装部署

安装环境

安装步骤

初步使用

Hive源码分析及任务分工


Hive介绍

Hive是基于 Hadoop 的一个适用于海量数据的数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类 SQL 查询功能(HQL)。其本质是将类SQL语句转化为MapReduce程序,从而避免了去写 MapReduce程序,减少开发人员的学习成本。

Hive的安装部署

安装环境

使用VMware,Linux系统为CentOS-7

安装步骤

1.安装hive的前提准备:

提前在Linux系统中安装配置jdk、MySql

2.Hadoop安装过程:

选择伪分布式单机部署,在这之前还要进行进行配置:

修改Linux网络参数文件;

根据安装说明,配置core-site.xml、hdfs-site.xml、mapred-site.xml等文件;

在profile中添加环境变量并执行source /etc/profile;

执行hdfs namenode -format初始化,start-all.sh来启动hadoop。

至此,hadoop已经可以使用了。

3.安装hive

1) 把 apache-hive-3.1.2-bin.tar.gz 置于 linux 的/opt/software 目录下

2) 解压 apache-hive-3.1.2-bin.tar.gz 到/opt/module/ 目录下面

[root@hadoop102 software]$ tar -zxvf /opt/software/apache-hive-3.1.2-bin.tar.gz -C /opt/module/

3)修改 apache-hive-3.1.2-bin.tar.gz 的名称为 hive

[root@hadoop102 software]$ mv /opt/module/apache-hive-3.1.2-bin/opt/module/hive

4)修改/etc/profile.d/my_env.sh,添加环境变量

[root@hadoop102 software]$ sudo vim /etc/profile.d/my_env.sh

5)添加内容
 

#HIVE_HOME

export HIVE_HOME=/opt/module/hive

export PATH=$PATH:$HIVE_HOME/bin

6) 初始化元数据库

[root@hadoop102 hive]$ bin/schematool -dbType derby -initSchema

7)将元数据库的地址改为MySql

将 MySQL 的 JDBC 驱动拷贝到 Hive 的 lib 目录下

[root@hadoop102 software]$ cp /opt/software/mysql-connector-java-5.1.37.jar $HIVE_HOME/lib

8)在$HIVE_HOME/conf 目录下新建 hive-site.xml 文件

文件内容如下:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- jdbc 连接的 URL -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop102:3306/metastore?useSSL=false</value>
</property>
<!-- jdbc 连接的 Driver-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<!-- jdbc 连接的 username-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<!-- jdbc 连接的 password -->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>000000</value>
</property>
<!-- Hive 元数据存储版本的验证 -->
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<!--元数据存储授权-->
<property>
<name>hive.metastore.event.db.notification.api.auth</name>
<value>false</value>
</property>
<!-- Hive 默认在 HDFS 的工作目录 -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
</configuration>

9)登陆 MySQL

[root@hadoop102 software]$ mysql -uroot -p000000

10)新建 Hive 元数据库

mysql> create database metastore;

mysql> quit;

11)初始化 Hive 元数据库

[root@hadoop102 software]$ schematool -initSchema -dbType mysql -verbose

这样,就将Hive的元数据库配置在了MySQL数据库里,至此,就初步完成了Hive的安装。

初步使用

将hive元数据配置到了MySQL中之后再开启hive。

1)启动 Hive

[root@hadoop102 hive]$ bin/hive

2)使用 Hive查看表、执行简单SQL语句

 通过运行时间,我们也能清晰的看出,hive处理小规模数据没有什么优势,它的优势在于大数据的处理。

至此,hive的安装工作就基本完成了。

Hive源码分析及任务分工

为了更好的解读源码,需要对Hive的基本架构和运行原理有一定了解。经查询学习,Hive正常运行时需要主要组件有如下几部分:

1. 用户接口

 主要有CLI(command-line interface)、JDBC/ODBC(jdbc 访问 hive) 等

2.元数据

元数据就是数据的数据,包括:表名、表所属的数据库、表的拥有者、列/分区字段、表的类型、表的数据所在目录等;

3. 驱动器(重点)

(1)解析器:将 SQL 字符串转换成抽象语法树(AST);对 AST 进行语法分析。

(2)编译器:将 AST 编译生成逻辑执行计划。

(3)优化器:对逻辑执行计划进行优化。

(4)执行器:把逻辑执行计划转换成可以运行的物理计划。

hive的核心:HQL-->MR的编译主流程

实际上,对于hive的功能,最直观简单理解的说法,就是把一条sql进行解析成mapreduce任务,去给hadoop执行,因此hive的核心,就是怎么去解释sql。我们的代码分析将紧紧围绕这个中心线进行。

一条语句,首先要经过用户接口进入,提交给驱动引擎,这是整个流程的第一步,具体到项目源码,这项工作由用户接口(CLI)完成,对应代码主要在cli包里,在cli提交作业给driver后,就来到了hive工作的关键部分,这是hive的核心和重点,驱动引擎中主要有编译器compiler、runtime和一些工具,主要位于项目的ql包内。这部分代码的分析由小组成员分工完成。

在编译流程中,首先进行的是语法分析,将HQL转化为抽象语法树AST Tree,第二个步骤,是从AST到QB再到Operator Tree的转换过程,由Hive的语义分析框架完成,该部功能对应的代码主要位于ql包下的Semantic analyzerd等类中。

Hive的语义分析框架的代码量较大(仅Semantic analyzer类代码量就超过14000行),当然这是因为从输入的ASTTree开始,后续的QB的生成,逻辑执行计划、逻辑执行计划的优化、物理执行计划的切分、物理执行计划的优化、以MR任务的生成全部都在些语义分析代码的逻辑中。

这些流程的源代码的分析将由我和队友合作进行分析,其中我的主要工作是编译流程中第二步AST-->QB对应的功能函数进行阅读分析

另外,我们知道,hive自身并不具有任何存储数据的能力,其将元数据存储在关系数据库中(MySql等),元数据包括表的属性、表的名称、表的列、分区及其属性以及表数据所在的目录等。Hive使用元存储服务(metastore服务)来管理元数据,我将负责该部分的源码分析,Metastore模块在metastore目录下

综上,我们已完成了Hive基本知识的了解、安装。对于源码分析,我主要负责:

①阅读分析编译流程中第二大步骤语义分析框架中的关键代码。

②阅读并分析metastore部分的源码

希望通过本次项目,可以进一步提高自己的代码阅读能力和分析能力,提高解决困难问题的能力。

end

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值