3.3 Hive查询(Hadoop3.0系列)

3.3 Hive查询(Hadoop3.0系列)

【实验目的】

1.了解Hive的SQL基本语法

2.掌握Hive多种查询方式

【实验原理】

Hive查询操作过程严格遵守Hadoop MapReduce的作业执行模型,Hive将用户的HQL语句通过解释器转换为MapReduce作业提交到Hadoop集群上,Hadoop监控作业执行过程,然后返回作业执行结果给用户。

如下图Hive执行流程大致步骤为:

(1)用户提交查询等任务给Driver。

(2)编译器获得该用户的任务Plan。

(3)编译器Compiler根据用户任务去MetaStore中获取需要的Hive的元数据信息。

(4)编译器Compiler得到元数据信息,对任务进行编译,先将HiveQL转换为抽象语法树,然后将抽象语法树转换成查询块,将查询块转化为逻辑的查询计划,重写逻辑查询计划,将逻辑计划转化为物理的计划(MapReduce),最后选择最佳的策略。

(5)将最终的计划提交给Driver。

(6)Driver将计划Plan转交给ExecutionEngine去执行,获取元数据信息,提交给JobTracker或者SourceManager执行该任务,任务会直接读取HDFS中文件进行相应的操作。

(7)获取执行的结果。

(8)取得并返回执行结果。

https://adminmanage.ipieuvre.com/cs/doc/3/161/exper/31704857099556170733410/img/01.jpg

Hive的入口是Driver,执行的SQL语句首先提交到Driver驱动,然后调用Compiler解释驱动,最终解释成MapReduce任务执行,最后将结果返回。

https://adminmanage.ipieuvre.com/cs/doc/3/161/exper/31704857099556170733410/img/02.png

(编译流程)

一条SQL进入Hive经过上述过程,使得一个编译过程变成了一个作业。

(1)首先,Driver会输入一个字符串SQL,然后经过Parser变成AST,这个变成AST的过程是通过Antlr来完成的,也就是Anltr根据语法文件来将SQL变成AST。

(2)AST进入Semantic Analyzer(核心)变成QB(QueryBlock)。一个最简的查询块,通常来讲,一个From子句会生成一个QB,生成QB是一个递归过程,生成的QB经过GenLogical Plan过程,变成了一个有向无环图。

(3)OP DAG经过逻辑优化器,对这个图上的边或者结点进行调整,顺序修订,变成了一个优化后的有向无环图。这些优化过程包括谓词下推(Predicate Push Down),分区剪裁(Partition Prunner),关联排序(Join Reorder)等等。

(4)经过了逻辑优化,这个有向无环图还要能够执行。所以有了生成物理执行计划的过程。Gen Tasks。Hive的作法通常是碰到需要分发的地方,切上一刀,生成一道MapReduce作业。如Group By切一刀,Join切一刀,Distribute By切一刀,Distinct切一刀。这么很多刀砍下去之后,这个逻辑有向无环图就被切成了很多个子图,每个子图构成一个结点。这些结点又连成了一个执行计划图,也就是Task Tree。

(5)对于Task Tree的优化,比如基于输入选择执行路径,增加备份作业等。可以由Physical Optimizer来完成。经过Physical Optimizer,每一个结点就是一个MapReduce作业或者本地作业,就可以执行了。

这就是一个SQL如何变成MapReduce作业的过程。

【实验环境】

AnolisOS8.8

Java 1.8.0

Hadoop-3.0.0

Eclipse-JEE 2022.03

HBase 1.4.10

mysql-8.0.26

Pycharm

apache-hive-2.3.5

【实验内容】

1.掌握Hive的普通查询、别名查询、限定查询与多表联合查询。

2.掌握Hive的多表插入、多目录输出以及使用Shell脚本查看Hive中的表。

【实验步骤】

切换到vmuser用户下,密码(vm123456)

1切换到/apps/hadoop/sbin目录下,启动Hadoop。

cd /apps/hadoop/sbin

./start-all.sh

使用jps查看启动的进程

jps

然后执行启动以下命令,查看Mysql数据库服务是否开启(Mysql用于存放Hive的元数据)

sudo systemctl status mysqld

MYSQL 正在运行

启动Mysql后,在终端命令行界面,直接输入Hive命令,启动Hive命令行。

cd /apps/hive/bin

./hive

2.打开一个新的命令行,切换到vmuser用户(vm123456)

提前创建文件夹hive3。

sudo mkdir -p /data/hive3

sudo chown -R vmuser:vmuser /data/hive3

使用wget命令,下载文件。

cd /data/hive3

wget http://hive3/buyer_log

wget http://hive3/buyer_favorite

posted @ 2024-06-05 10:37  jhtchina  阅读(13)  评论(0编辑  收藏  举报