01 | Hive SQL执行步骤

Hive(五) -- Hive执行流程、数据倾斜和优化 Hive的数据倾斜实际上就是MR的数据倾斜 阅读详情

Hive SQL 的执行过程是将用户编写的类 SQL 语句(HiveQL)转化为底层可执行的计算任务(如 MapReduce、Tez 或 Spark),并在 Hadoop 生态中完成数据处理。整个流程可分为 6 个核心步骤,体现了 Hive “SQL → 逻辑计划 → 物理计划 → 分布式执行” 的编译与优化思想。


一、Hive SQL 执行全流程概览

用户输入 HiveQL
       ↓
1. 词法 & 语法解析(Parsing)
       ↓
2. 抽象语法树(AST)
       ↓
3. 语义分析(Semantic Analysis)
       ↓
4. 生成逻辑执行计划(Logical Plan)
       ↓
5. 逻辑优化(Logical Optimizer)
       ↓
6. 生成物理执行计划(Physical Plan)→ 提交到执行引擎(MR/Tez/Spark)

二、详细执行步骤解析

步骤 1️⃣:词法 & 语法解析(Parsing)

  • 使用 Antlr(或早期的 JavaCC)对 HiveQL 进行词法和语法分析;
  • 检查 SQL 是否符合 Hive 语法规则(如关键字、括号匹配、表是否存在等);
  • 输出:抽象语法树(Abstract Syntax Tree, AST)。

✅ 示例:
SELECT id FROM users WHERE age > 18;
→ 被解析为一棵树结构,包含 SELECT、FROM、WHERE 等节点。


步骤 2️⃣:语义分析(Semantic Analysis)

  • 遍历 AST,进行上下文校验:
    • 表/字段是否存在?
    • 数据类型是否匹配?(如 age > 'abc' 会报错)
    • 权限检查(如果启用授权)
    • 分区字段是否合法?
  • 构建 Operator Tree(操作符树),也称为 逻辑执行计划雏形;
  • 确定输入表的元数据(来自 Metastore)。

🔑 关键组件:SemanticAnalyzer 类。


步骤 3️⃣:生成逻辑执行计划(Logical Plan)

  • 将 Operator Tree 转换为标准的 逻辑执行计划(Logical Plan);
  • 计划由一系列 Operator 组成,如:
    • TableScan(表扫描)
    • Filter(过滤)
    • Select(投影)
    • GroupBy(聚合)
    • Join(连接)
  • 此时还未决定如何分布式执行。

步骤 4️⃣:逻辑优化(Logical Optimizer)

  • 应用一系列规则优化器(Rule-based Optimizer) 对逻辑计划进行改写;
  • 常见优化包括:
优化类型说明
谓词下推(Predicate Pushdown)将 WHERE 条件尽可能下推到 TableScan,减少 I/O
列裁剪(Column Pruning)只读取 SELECT 中用到的列
常量折叠(Constant Folding)如 WHERE 1=1 AND age > 18 → WHERE age > 18
MapJoin 优化小表自动转为 Map-side Join
分区裁剪(Partition Pruning)只扫描满足条件的分区

💡 优化目标:减少数据量、降低计算复杂度、提升执行效率。


步骤 5️⃣:生成物理执行计划(Physical Plan)

  • 将优化后的逻辑计划转换为特定执行引擎的物理任务;
  • 根据配置的引擎(hive.execution.engine)生成不同计划:
    • MapReduce:生成 JobConf,划分 Map/Reduce 阶段;
    • Tez:生成 DAG(有向无环图);
    • Spark:生成 RDD 转换链(DAGScheduler)。

📌 例如:
GROUP BY 在 MR 中 → 1 个 Map + 1 个 Reduce;
在 Tez/Spark 中 → 可能合并为单个 Vertex 或 Stage。


步骤 6️⃣:提交执行 & 获取结果

  • 将物理计划提交给对应的计算框架:
    • MR → 提交到 YARN;
    • Spark → 提交到 Spark Cluster;
  • 执行过程中:
    • 从 HDFS 读取数据;
    • 在 TaskManager/Container 中运行计算;
    • 中间结果写入临时目录;
    • 最终结果写入目标表或返回客户端。
  • 客户端轮询任务状态,成功后返回结果集(或写入表)。

三、关键组件角色

组件作用
Driver控制整个编译和执行流程
Compiler负责 Parsing → Logical Plan → Physical Plan
Metastore提供表结构、分区、统计信息等元数据
Execution Engine实际执行任务(MR/Tez/Spark)
SerDe序列化/反序列化数据(如 JSON、Parquet)

四、执行计划查看(调试必备)

查看逻辑计划:

EXPLAIN SELECT id FROM users WHERE age > 18;

查看物理计划(含 MR/Tez 任务):

EXPLAIN EXTENDED SELECT ...;
-- 或
EXPLAIN DEPENDENCY SELECT ...;

输出包含:

  • Stage 依赖关系
  • Map/Reduce 输入输出
  • 使用的 SerDe、文件格式
  • 是否触发 MapJoin 等

五、影响执行效率的关键因素

  1. 数据存储格式:Parquet/ORC 列式存储 + 谓词下推 ≫ TextFile;
  2. 分区 & 分桶:合理设计可大幅减少扫描量;
  3. 统计信息:ANALYZE TABLE ... COMPUTE STATISTICS 帮助 CBO 优化;
  4. 执行引擎选择:Tez/Spark 通常比 MR 快 2~10 倍;
  5. 资源配置:YARN 内存、CPU、并行度。

六、总结:Hive SQL 执行本质

Hive 不是数据库,而是一个“SQL 到分布式计算的翻译器”。

阶段目标
解析 & 语义分析理解用户意图,验证合法性
逻辑计划 & 优化用最少的计算做最多的事
物理计划 & 执行借助 Hadoop 生态高效跑任务

通过理解这一流程,你可以:

  • 编写更高效的 Hive SQL;
  • 快速定位性能瓶颈(如全表扫描、数据倾斜);
  • 合理调优参数(如 hive.auto.convert.join);
  • 选择合适的文件格式和执行引擎。

💡 记住:Hive 的慢,往往不是 SQL 的错,而是执行计划没优化好。

你真的了解HiveSql吗?真实的HiveSql执行顺序是长这样的 通过上面的研究我们发现在hivesql中其执行顺序大致如下: from->where(谓词下推)->join->on->select(select中的字段与group by只要不一致就会有)->group by->select(为having准备数据,因而having中可以使用select别名)->having->select(过滤后的结果集)->distinct->select->order by ->select->limit 实际上上述需要注意的是select在group by前和group by 阅读详情

相关推荐

【Hive基础】-- hive sql 的执行原理和流程

Hive查询优化器对查询进行分析,并生成一个执行计划,使执行查询所需的MapReduce作业数量最小。在地图阶段,输入数据被分割成较小的块,每个块由一个地图任务处理。地图任务对输入数据中的每条记录应用一个用户定义的函数,并生成一组键值对。在还原阶段,还原任务处理从洗牌和排序阶段收到的键-值对。减少任务对与每个键相关的值应用一个用户定义的函数,并生成一组输出记录。总之,Hive SQL查询的执行包括解析查询,优化查询,并生成执行计划。减少任务的输出被存储在HDFS中或返回给用户,这取决于查询。

欢迎来到我的博客,一起探索代码里的世界! 1319

hive sql 语句正确执行顺序

执行顺序:from ..on .. join .. .. where .. select .. group by .. having .. order by... limit ... map阶段 from 加载,进行表的查找和加载 where过滤 select查询 Reduce阶段 group by :对map端发来的文件进行分组合并 order by : 对结果进行排序 limit 控制结果输出的行数 案例: select dt, user_id, min(age)..

帅成一匹马 9266

PCIe学习笔记(一)-------1.3 PCIe数据包(TLP,DLLP,PLP)

1,PCIe的层次结构 PICe设备在硬件电路上可以分为三个层次结构:事务层(Transaction Layer)、数据链路层(Data Link Layer)、物理层(Physical)。每一个层次又可以分为两个部分,分别为处理发送和处理接收的部分。 也可以分为四个层次,将事务层以上的层次称为软件层(Software Layer)。 2,PCIe数据包 前面已经说过PCIe之间是以数据包的形式来传输数据的,协议共定义了3类数据包。与处理层相关的是处理层数据包(TLP),与数据链路层相关的是数据

llxxyy507的博客 2万+

Hive SQL语句的正确执行顺序

关于 sql 语句的执行顺序网上有很多资料,但是大多都没进行验证,并且很多都有点小错误,尤其是对于 select 和 group by 执行的先后顺序,有说 select 先执行,有说 group by 先执行,到底它俩谁先执行呢? 今天我们通过 explain 来验证下 sql 的执行顺序。 在验证之前,先说结论,Hive 中 sql 语句的执行顺序如下: from .. where .. join .. on .. select .. group by .. select .. having ..

格子衫 3907

STM32项目实战_基于STM32F103的智能药箱设计与实现(硬件详解+软件逻辑+调试要点)

本文详细介绍了基于STM32F103的智能药箱设计与实现,涵盖硬件设计、软件逻辑和调试要点。项目核心功能包括精准提醒、药品管理和远程监控,采用STM32单片机作为主控,结合光电开关、蓝牙模块等实现智能化管理。文章还分享了电路图设计、程序优化及常见问题解决方案,为嵌入式开发爱好者提供实用参考。

weixin_28717683的博客 303

《QT+PCL 第一章》:点云读取显示

点云读取显示一、核心代码二、QT设置三、效果展示 一、核心代码 二、QT设置 三、效果展示

阁楼 1万+

大数据 - hive执行SQL语句基本流程- 源码01

目录hive简介hive架构图hive cli架构图hive源码结构hive三大核心模块hive执行命令入口接收命令的入口函数调用`cli.CliDriver.run()`方法`executeDriver`调用 `cli.processLine()`或者`cli.processFile()`调用`CliDriver.processCmd()`方法调用processLocalCmd()方法调用Driver.run()方法 hive简介 什么是Hive? 数据仓库:存储、查询、分析大规模数据 SQL语言:简单

weixin_45518155的博客 680

6、基于深度强化学习的无人机路径规划

本文介绍了一种结合人工势场法的改进DQN深度强化学习算法在无人机路径规划中的应用。通过设计合理的网络结构、状态空间、动作空间和融合引力-斥力机制的奖励函数,实现了无人机在复杂环境中的自主避障与目标导向飞行。采用轻量级神经网络提升实时性,并在Gazebo仿真环境中进行训练与测试,结果表明该算法具有快速收敛、高成功率和良好适应性。实验评估指标包括损失函数、最大Q值和任务成功率,验证了方法的有效性。文章还探讨了其在物流配送、农业植保和环境监测等领域的应用前景,并展望了多无人机协同与复杂环境适应性等未来研究方向。

html8的博客 238

Hive【应用 01】CLI 命令行工具使用(创建库+创建表+导入数据+执行SQL文件+交互式命令+执行SQL命令+配置Hive变量)

本文介绍了Hive CLI命令行工具的基本使用方法。首先通过创建测试数据库和表,并导入示例数据作为准备工作。然后详细讲解了Hive CLI的各项功能:包括查看帮助信息(-H)、交互式命令行模式、直接执行SQL命令(-e)、执行SQL脚本文件(-f,支持本地和HDFS文件)、配置Hive变量(--hiveconf)以及通过初始化文件配置启动参数。文章通过具体示例展示了每种功能的用法,并验证了操作结果,为Hive CLI的使用提供了实用参考。

Java与大数据相关实践内容分享! 1213

FlexSim:FlexSim软件介绍与安装

在开始安装FlexSim之前,首先需要从FlexSim官方网站下载安装包。FlexSim提供不同版本的软件,包括教育版、专业版等,确保选择适合您需求的版本。下载页面通常会列出系统要求,包括操作系统、处理器、内存和硬盘空间,确保您的计算机满足这些要求。访问FlexSim官方网站。导航至下载页面。选择适合您需求的FlexSim版本。点击下载按钮,开始下载安装包。在开始构建模型之前,首先需要明确模型的目标。模型目标是指导模型设计和分析的核心,它定义了你希望通过模型解决的问题或探索的系统行为。

kkchenjj的博客 5802

带洞多边形如何分成凸多边形集合,对多边形进行凸分解?

摘要: 凸分解是计算几何中的经典问题,分为三角化和凸分解两种方法。三角化将带洞多边形转换为简单多边形并分割为三角形,常用算法包括耳剪法、单调多边形三角化等。凸分解则生成更少但更大的凸多边形,常用Hertel-Mehlhorn算法或基于凹点的递归切割。实际应用中建议使用CGAL、Poly2Tri等成熟库处理。三角化适合图形渲染,凸分解更适用于物理引擎和路径规划。关键步骤包括数据校验、选择合适的算法及后处理优化。

插件开发 353

oozie 调度 hive 之 demo

描述 本文给出oozie调度hive的一些解释和配置demo,其中hive01是该配置的目录,其中job.properties、workflow.xml都放在该目录下,该目录还有一个子目录为script,这个子目录存放的是sql脚本,运行该程序需要用到hive-site.xml 配置文件 job.properties,该文件在hive01目录下 nameNode=hdfs://nod...

Niki20034655的博客 558

RK3568笔记二:部署手写数字识别模型

部署手写数字识别模型,使用手写数字识别(mnist)数据集训练了一个 LENET 的五层经典网络模型。Lenet是我们的深度学习入门的必学模型,是深度学习领域中的经典卷积神经网络(CNN)架构之一。过程分为:训练,导出ONNX,转化RKNN,测试。

1169

hive资料

hive 默认的字段分隔符为\001

a280966503的博客 259

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Hive 执行sql 报 2015-01-22 17:07:59,263 WARN conf.HiveConf (HiveConf.java:initialize(1507)) - DEPRECAT

在执行Hive的时候报 2015-01-22 17:07:59,263 WARN  conf.HiveConf (HiveConf.java:initialize(1507)) - DEPRECATED: Configuration property hive.metastore.local no longer has any effect. Make sure to provide a val

寂空师叔 588

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Hive SQL执行流程详解

在 Apache Hive 中,一条 SQL 查询(HiveQL)的执行会经过多个步骤,涉及。

走过冬季 946

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

HIVE——常用sql命令总结

库 创建库 CREATE DATABASE IF NOT EXISTS db01; 查看库 SHOW DATABASES; 使用库 USE db01; 删除库 DROP DATABASE db01; 表 查看表 SHOW TABLES; 创建分区表 CREATE TABLE IF NOT EXISTS tab_01 (colume01 string) partitioned by (colume02 string) row format delimited fields terminated by

Andya_net的博客 1万+

01 Hive SQL基础知识

本文主要讲的是一些Hive SQL的基础知识,希望能帮助到想要接触大数据分析和刚接触大数据分析的同学。实际永远比所见的复杂,但万丈高楼平地起,一切来源于基础。 关键字:初步了解sql每个关键字的功能 执行顺序/执行计划:看懂执行步骤,有助优化sql和排查sql执行遇到的问题 SQL优化/特殊运算/特殊函数:提高SQL的执行效率 补充知识:表结构处理语句/SQL书写规范/数据仓库基础知识

WAYDN412的博客 2910

hive sql执行异常终止

具体sql如下: select a1.cust_id, a1.house_id, a1.cell_id, f1.cell_hot_flag, a1.city_id, f1.fdd_c...

3410

hive 查看历史job的执行sql

问题 线上hadoop有个hivesql执行较耗时,1hour 8min;收到运维预警 定位 查找job history 页面 http://node:8088/cluster/app/application_xxxx_xx http://node:8088/proxy/application_xxxx_xx http://node:19888/jobhistory/jo...

FireCoder的专栏 4298

hivef:hive 执行 sql 文件

hivef:hive 执行 sql 文件 #!/bin/bash yesterday=`date -d -1days '+%Y-%m-%d'` today=`date '+%Y-%m-%d'` tomarrow=`date -d 1days '+%Y-%m-%d'` #echo "从外部只传递两个参数时,第一个参数必须是 hive sql 文件,第二个必须是YYYY-MM-DD格式的...

weixin_30734435的博客 1238

Hive SQL 执行计划解析

Hive SQL 的执行计划揭示了 SQL 查询在实际执行中的完整流程,通过分析执行计划,可以清楚地看到 SQL 是如何被转换为MR执行逻辑的,掌握这些逻辑有助于快速定位性能瓶颈,从而制定更有针对性的优化策略。

DataCrafter的博客 1131

如何写SQL(HIVE)?

以下内容用hive举例: 简单的SQL 数据 student表 #字段名:s_id s_name s_birth s_sex 01 赵雷 1990-01-01 男 02 钱电 1990-12-21 男 03 孙风 1990-05-20 男 04 李云 1990-08-06 男 05 周梅 1991-12-01 女 06 吴兰 1992-03-01 女 07 郑竹 1989-07-01 女 0...

ZYG的博客 2332

Hive查询计划解析:如何理解并优化SQL执行过程

Apache Hive作为大数据领域的重要工具,其**查询计划解析**功能是SQL性能优化的关键。通过深入理解Hive查询计划,你可以快速定位性能瓶颈,实现SQL执行效率的显著提升。🚀 ## 什么是Hive查询计划? Hive查询计划是SQL语句在执行前的详细执行蓝图,它展示了数据处理的完整流程。在Hive中,使用`EXPLAIN`命令可以查看查询计划,帮助你了解SQL语句在Hadoop集群

gitblog_00880的博客 1059

Spark SQL 和 Hive on Spark的区别

维度Spark SQL性能✅ 更优(5-15%提升)良好(兼容优先)优化器Catalyst(激进优化)Hive + Spark(双重优化)生态集成✅ 原生 Spark 生态依赖 Hive 生态兼容性有限(Spark SQL 语法)✅ 完全 Hive 兼容适用场景新项目、高性能分析现有 Hive 迁移💡核心结论Spark SQL 性能通常优于 Hive on Spark,差异主要源于优化器的差异和架构设计。但在生产环境中,Hive on Spark 的兼容性价值往往更重要。

走过冬季 1264
上一篇: 07 | Flink的API可分为哪几层?
下一篇: 02 | Hive SMB Join 原理
走过冬季
博客等级 码龄9年 1609粉丝 341原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

走过冬季

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值