Hive面试题-HQL转换MapReduce底层核心逻辑剖析

news2025/7/20 12:56:52

视频可查看:https://www.bilibili.com/video/BV1RV41147Tb/?spm_id_from=333.999.0.0&vd_source=3ba3c3ba31427f60d734ede7a948de4a
原文地址:Hive学习之路 (二十)Hive 执行过程实例分析 - 扎心了,老铁 - 博客园 (cnblogs.com)

一、Hive 执行过程概述

1、概述

(1) Hive 将 HQL 转换成一组操作符(Operator),比如 GroupByOperator, JoinOperator 等

(2)操作符 Operator 是 Hive 的最小处理单元

(3)每个操作符代表一个 HDFS 操作或者 MapReduce 作业

(4)Hive 通过 ExecMapper 和 ExecReducer 执行 MapReduce 程序,执行模式有本地模式和分 布式两种模式

2、Hive 操作符列表

3、Hive 编译器的工作职责

(1)Parser:将 HQL 语句转换成抽象语法树(AST:Abstract Syntax Tree)

(2)Semantic Analyzer:将抽象语法树转换成查询块

(3)Logic Plan Generator:将查询块转换成逻辑查询计划

(4)Logic Optimizer:重写逻辑查询计划,优化逻辑执行计划

(5)Physical Plan Gernerator:将逻辑计划转化成物理计划(MapReduce Jobs)

(6)Physical Optimizer:选择最佳的 Join 策略,优化物理执行计划

4、优化器类型

上表中带①符号的,优化目的都是尽量将任务合并到一个 Job 中,以减少 Job 数量,带②的 优化目的是尽量减少 shuffle 数据量

二、join

1、对于 join 操作

SELECT pv.pageid, u.age FROM page_view pv JOIN user u ON pv.userid = u.userid;

2、实现过程

 Map:

1、以 JOIN ON 条件中的列作为 Key,如果有多个列,则 Key 是这些列的组合

2、以 JOIN 之后所关心的列作为 Value,当有多个列时,Value 是这些列的组合。在 Value 中还会包含表的 Tag 信息,用于标明此 Value 对应于哪个表

3、按照 Key 进行排序

Shuffle:

1、根据 Key 的值进行 Hash,并将 Key/Value 对按照 Hash 值推至不同对 Reduce 中

Reduce:

1、 Reducer 根据 Key 值进行 Join 操作,并且通过 Tag 来识别不同的表中的数据

3、具体实现过程

三、Group By

1、对于 group by操作

SELECT pageid, age, count(1) FROM pv_users GROUP BY pageid, age;

2、实现过程

 四、Distinct

1、对于 distinct的操作

按照 age 分组,然后统计每个分组里面的不重复的 pageid 有多少个

SELECT age, count(distinct pageid) FROM pv_users GROUP BY age;

2、实现过程

3、详细过程解释

该 SQL 语句会按照 age 和 pageid 预先分组,进行 distinct 操作。然后会再按 照 age 进行分组,再进行一次 distinct 操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/395384.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

K_A14_012基于STM32等单片机驱动GY-25倾斜度角度模块 串口与OLED0.96双显示

K_A14_012基于STM32等单片机驱动GY-25倾斜度角度模块 串口与OLED0.96双显示一、资源说明二、基本参数参数引脚说明三、驱动说明对应程序:四、部分代码说明1、接线引脚定义1.1、STC89C52RCGY-25倾斜度角度模块1.2、STM32F103C8T6GY-25倾斜度角度模块五、基础知识学习与相关资料下…

测试按方向的分类

按方向分(都是在系统测试阶段测试的) 功能测试:举例说明什么是功能 性能测试 ①压力测试:不断地增加压力,从而找到系统的极限 ②负载测试:系统在极限工作条件下,最多能持续多久——可能发生内存泄漏/溢出,导…

angular技术(持续更新)

css类绑定[class.color-blue]"isBlue()" 如果isBlue()返回为true 这里使用color-blue的class样式style样式绑定[style.background-color]"canclick ? blue: red" 组件与模块模块的元数据*declarations: 用于指定属于这个模块的视图类(View Cla…

CM6.3.2启用Kerberos(附问题解决)

基础准备支持JCE的jdk重新安装JCE的jdk(已正确配置跳过)删除/usr/java/下面的jdk,然后通过CM->管理->安全->安装Java无限制...重新安装后,配置Java(可选)主机->主机配置->搜java->Java主目录 配置路径主机->所有主机->设置->高级:Java配置Kerberos安…

[算法]插入排序

参考:《漫画算法-小灰的算法之旅》 目录 1、排序算法的思想 2、具体步骤 3、插入排序的优化 4、时间复杂度和空间复杂度 5、代码 1、排序算法的思想 维护一个有序区,把元素一个个插入有序区的适当位置,直到所有元素都有序为止。 2、具体…

多线程面试题

1. Sychronized的锁升级过程是怎样的? 2. Tomcat 中为什么要使用自定义类加载器? 3. 说说对线程安全的理解 4. 对守护线程的理解 5. 并发、并行、串行之间的区别 6. Java死锁如何避免? 7. 谈谈你对AQS的理解,AQS如何实现可重入锁&…

华为机试题:HJ107 求解立方根(python)

文章目录(1)题目描述(2)Python3实现(3)知识点详解1、input():获取控制台(任意形式)的输入。输出均为字符串类型。1.1、input() 与 list(input()) 的区别、及其相互转换方…

2023年品牌惊蛰节气海报赏析

今天是3月6日——惊蛰,春日渐暖,春雷乍起,北方大地正在迎来新生,小鸟在枝头欢叫、种子在努力发芽,各大品牌也赶早发布了最新的惊蛰节气海报。下面就来和我们一起看看吧。 1,中国日报 2,BDuck…

java日志

日志是软件开发的重要组成部分。一个精心编写的日志代码提供快速的调试,维护方便,以及应用程序的运行时信息结构化存储。日志记录确实也有它的缺点。它可以减缓的应用程序Log4jLog4j是Apache的一个开放源代码项目,通过使用Log4j,我…

Spring | 基础

1. IOC和DI IOC:控制反转,其思想是反转资源获取的方向,传统的资源查找方式要求组件向容器发起请求查找资源,作为回应,容器适时的返回资源。而应用了 IOC 之后,则是**容器主动地将资源推送给它所管理的组件…

Sectigo中间证书根证书说明

Sectigo SSL证书产品证书链主要分为两个版本,常见的的一种版本多,但随着安全性提升,证书链的加载方式变化,第二种版本证书链更具备安全需要,对此做了详细说明。一、兼容性最高版本,根证书算法:s…

BI 是如何数据分析的?

企业部署商业智能BI前,需要进行详细的分析,了解BI能为企业带来多少价值?如何提高工作效率的等等,今天我们就来聊一聊 BI 的工作原理。 一、BI的取数方式 商业智能BI是通过访问和连接业务系统数据源数据库的方式来进行取数的&…

记录gitlab和jenkins集成的过程

gitlab设置外发请求 首先在前面的几篇文章中,我们的gitlab和jenkins都安装好了,在这里我们就可以对gitlab 和jenkins进行集成操作处理。 首先设置gitlab的外发请求,如图所示: 先点击管理员,进入到管理中心后 先点击设置,然后点击…

劲霸男装:400+门店的销售佣金管理,如何实现一键发薪

陪伴一代人记忆的劲霸男装(下文简称「劲霸」),很多人应该都不陌生。 他们的门店遍布全国的大型商场及街边店铺,自1980起,发展已40余年,现拥有形象统一、规范管理的品牌专卖店2000多家。他们门店多&#xff…

传输层协议——UDP协议

❣️关注专栏:JavaEE 传输层虽然是操纵系统内核已经实现好了的,但是我们程序猿写代码要调用系统提供的 socket API 完成网络编程,其中 socket 就属于传输层部分。 🌱 UDP协议 🌱 1 UDP协议端格式 上图就是UDP协议报…

Java面向对象特征之三:多态

一:面向对象三大特征之三:多态 1.多态是什么? 同类型的对象,执行同一个行为,会表现出不同的行为特征。 比如:猫和狗都是动物类型,执行同一个行为,但是会表现出不同的行为特征&…

flink sql 源码走读 --- 解释flink jdbc where 条件为什么没有下推数据库

本文通过一个具体案例,说明 flink sql 如何实现 connector 加载、source/sink 端操作、数据库连接等。可以帮助大家了解其原理,并在代码中找到落库执行SQL生成逻辑,得到where条件并没有下推到库执行的结论。 案例如下: create t…

Zookeeper集群和Hadoop集群安装(保姆级教程)

1. HA HA(Heigh Available)高可用 解决单点故障,保证企业服务 7*24 小时不宕机单点故障:某个节点宕机导致整个集群的宕机 Hadoop 的 HA NameNode 存在单点故障的可能,需要配置 HA 解决引入第二个 NameNode 作为备份同…

C语言学习(三)

#include <stdio.h> int main(void){int a; scanf("%d",&a); printf("%d",a); return 0&#xff1b;} 正在上传…重新上传取消正在上传…重新上传取消&符号作用是把键盘中输入的值给变量a,使用scanf()时输入数值&#xff0c;需要按一下enter…

MySQL知识点全面总结2:Mysql语句的执行(DDL DML 完整性约束)

二.MySQL知识点全面总结2&#xff1a;mysql语句的执行&#xff08;DDL DML 完整性约束&#xff09; 1.对数据库的操作&#xff08;DDL&#xff09; 2.对数据表的操作&#xff08;DDL&#xff09; 3.对数据表字段的操作&#xff08;DDL&#xff09; 4.对数据表内容的增删改&…