实战班-Hive高级(二)

本文主要介绍了Hive SQL的执行流程,包括SQL解析、逻辑执行计划优化、物理执行计划优化等关键步骤。深入讲解了Select过程、group by操作以及Hive中的UDF函数。此外,还探讨了面试中可能遇到的关于Hive认识的问题。
摘要由CSDN通过智能技术生成

一、上次回顾

二、Hive SQL的执行流程

三、Hive中的UDF函数

四、本次课程涉及面试题

一、上次回顾

  • https://blog.csdn.net/SparkOnYarn/article/details/105706114

二、Hive SQL的执行流程

1、场景:数据量不大,但是使用Hive SQL执行起来比较慢;

Hive中常用的SQL语句?

  • select yyy,聚合函数 from xxx group by yyy;
  • select a.,b. from a join b on a.id=b.id;
一个SQL的执行流程大概会分为如下几个流程:
  1. SQL on Hadoop的一个引擎,一个SQL语句进来,把作业提交到集群环境中去执行,结果出来,对于使用者来说,这一步就是个黑盒子,不去了解的话根本就不会知道;

在这里插入图片描述

无外乎几个动作,SQL语句进来,有一个SQL parse的过程 --> AST(抽象语法树,是一个字符串)–> Analyzer(去到meta info中查看表字段在不在)–> Logical Plan(逻辑执行计划)–> 对应的是一堆Operator Tree --> 逻辑执行计划优化 --> 物理执行计划 --> 物理执行计划优化 --> 提交一堆task;

重要的两个过程:逻辑执行计划优化、物理执行计划优化

1、Predicate Push Down
2、Mapjoin
如上两步发生在哪两个过程?

2.1、Select 的过程

join不仅仅只有sql中的join,还有map join和reduce join,看见一个join知道底层是怎么样的;使用mapreduce的思想去描述出来;

  • select a.id,a.city,a.catalog from access a where a.day=‘2019-04-14’ and a.catalog=‘奔驰’; (求出这个表中分区中带大奔的视频有哪些),这个sql不涉及shuffle,仅仅只是过滤而已;access这个 表的数据是存放在hdfs上的,既然涉及到读取表,就肯定存在inputsplit(输入分片),假设这个SQL语句进来有两个分片

  • 下图解析:两个输入分片对应两个map task,map中的逻辑就是先拆分,splits(2)拿到类别字段,第二个字段=大奔,就会收集出来,map就已经结束了,直接输出了。

  • inputsplit划分为几块取决于blocksize的大小
    在这里插入图片描述

group by 的过程
  • group by条件后跟的字段在select中也要有,select city, count(1) from access where day = ‘20190414’ and catalog = ‘大奔’ group by city;

mr的count是怎么执行的:
1、map: split --> (word,1)
2、shuffle:(word,1)partitioner --> reduce
3、reduce:(word,可迭代的(1,1,1,1,1,)) --> (word, sum(可迭代的1))

1)、map:split --> (city,1),可能还会涉及到Combiner过程,Combiner:local reducer局部的聚合

在这里插入图片描述
task tree是最终的发送map task和reduce task去运行的,一个SQL进来是在哪个层面做什么调优的呢,按照split去读取数据,经过map按照所需要的城市求次数,经过combine操作,计算每一个task的结果,经过shuffle把每一个reduce中的key分到不同的reduce上去,结果累加计算;

三、Hive中的UDF函数

  • https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF
  1. UDF:一对一,upper substr
  2. UDAF:多对一,sum
  3. UDTF:一对多,lateral view

四、本次课程涉及面试题

面试题:你对Hive的认识?

  • 答:Hive就是在写SQL,这句话的理解是非常片面的;impala等等底层的执行流程大体是一致的,SQL是考察的一个功底,增量求全量,全量求增量;在大数据时代,存储、机器来说成本还是比较高的。

combiner的使用场景
Spark中reduceByKey和GroupByKey的区别

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值