没有合适的资源?快使用搜索试试~ 我知道了~
二万字讲解HiveSQL技术原理、优化与面试.pdf
需积分: 1 0 下载量 23 浏览量
2024-04-10
10:04:13
上传
评论
收藏 598KB PDF 举报
温馨提示
试读
26页
二万字讲解HiveSQL技术原理、优化与面试.pdf
资源推荐
资源详情
资源评论
本文基本涵盖以下内容:
Hive SQL 编译成MapReduce过程
Hive 千亿级数据倾斜
Hive执行计划
Hive 底层执行架构
- Hive SQL 编译成MapReduce过程 -
编译
SQL
的任务是在上节中介绍的
COMPILER
(编译器组件)中完成的。
Hive
将
SQL
转化为
MapReduce
任
务,整个编译过程分为六个阶段:
1. 词法、语法解析: Antlr 定义 SQL 的语法规则,完成 SQL 词法,语法解析,将
SQL
转化为抽象语法树
AST Tree
;
Antlr是一种语言识别的工具,可以用来构造领域语言。使用Antlr构造特定的语言只需要编
写一个语法文件,定义词法和语法替换规则即可,Antlr完成了词法分析、语法分析、语义
分析、中间代码生成的过程。
2. 语义解析: 遍历 AST Tree,抽象出查询的基本组成单元 QueryBlock;
3. 生成逻辑执行计划: 遍历 QueryBlock,翻译为执行操作树 OperatorTree;
4. 优化逻辑执行计划: 逻辑层优化器进行 OperatorTree 变换,合并 Operator,达
到减少
MapReduce Job
,减少数据传输及
shuffle
数据量;
5. 生成物理执行计划: 遍历 OperatorTree,翻译为 MapReduce 任务;
6. 优化物理执行计划: 物理层优化器进行 MapReduce 任务的变换,生成最终的执
行计划。
下面对这六个阶段详细解析:
为便于理解,我们拿一个简单的查询语句进行展示,对
5
月
23
号的地区维表进行查询:
select * from dim.dim_region where dt = '2021-05-23';
阶段一:词法、语法解析
根据
Antlr
定义的
sql
语法规则,将相关
sql
进行词法、语法解析,转化为抽象语法树
AST Tree
:
ABSTRACT SYNTAX TREE:
TOK_QUERY
TOK_FROM
TOK_TABREF
TOK_TABNAME
dim
dim_region
TOK_INSERT
TOK_DESTINATION
TOK_DIR
TOK_TMP_FILE
TOK_SELECT
TOK_SELEXPR
TOK_ALLCOLREF
TOK_WHERE
=
TOK_TABLE_OR_COL
dt
'2021-05-23'
阶段二:语义解析
遍历
AST Tree
,抽象出查询的基本组成单元
QueryBlock
:
AST Tree
生成后由于其复杂度依旧较高,不便于翻译为
mapreduce
程序,需要进行进一步抽象和结构化,形
成
QueryBlock
。
QueryBlock
是一条
SQL
最基本的组成单元,包括三个部分:输入源,计算过程,输出。简单来讲一
个
QueryBlock
就是一个子查询。
QueryBlock
的生成过程为一个递归过程,先序遍历
AST Tree
,遇到不同的
Token
节点
(
理解为特殊标记
)
,
保存到相应的属性中。
阶段三:生成逻辑执行计划
遍历
QueryBlock
,翻译为执行操作树
OperatorTree
:
Hive
最终生成的
MapReduce
任务,
Map
阶段和
Reduce
阶段均由
OperatorTree
组成。
基本的操作符包括:
TableScanOperator
SelectOperator
FilterOperator
JoinOperator
GroupByOperator
ReduceSinkOperator
Operator
在
Map Reduce
阶段之间的数据传递都是一个流式的过程。每一个
Operator
对一行数据完成操作后
之后将数据传递给
childOperator
计算。
由于
Join/GroupBy/OrderBy
均需要在
Reduce
阶段完成,所以在生成相应操作的
Operator
之前都会先生成一
个
ReduceSinkOperator
,将字段组合并序列化为
Reduce Key/value, Partition Key
。
阶段四:优化逻辑执行计划
Hive
中的逻辑查询优化可以大致分为以下几类:
投影修剪
推导传递谓词
谓词下推
将Select-Select,Filter-Filter合并为单个操作
多路 Join
查询重写以适应某些列值的Join倾斜
阶段五:生成物理执行计划
生成物理执行计划即是将逻辑执行计划生成的OperatorTree转化为MapReduce
Job
的过程,主要分为下面几个阶段:
对输出表生成MoveTask
从OperatorTree的其中一个根节点向下深度优先遍历
ReduceSinkOperator标示Map/Reduce的界限,多个Job间的界限
遍历其他根节点,遇过碰到JoinOperator合并MapReduceTask
生成StatTask更新元数据
剪断Map与Reduce间的Operator的关系
阶段六:优化物理执行计划
Hive
中的物理优化可以大致分为以下几类:
分区修剪(Partition Pruning)
基于分区和桶的扫描修剪(Scan pruning)
如果查询基于抽样,则扫描修剪
在某些情况下,在 map 端应用 Group By
在 mapper 上执行 Join
优化 Union,使Union只在 map 端执行
在多路 Join 中,根据用户提示决定最后流哪个表
删除不必要的 ReduceSinkOperators
对于带有Limit子句的查询,减少需要为该表扫描的文件数
对于带有Limit子句的查询,通过限制 ReduceSinkOperator 生成的内容来限制
来自
mapper
的输出
减少用户提交的
SQL
查询所需的
Tez
作业数量
如果是简单的提取查询,避免使用MapReduce作业
对于带有聚合的简单获取查询,执行不带
MapReduce
任务的聚合
重写 Group By 查询使用索引表代替原来的表
当表扫描之上的谓词是相等谓词且谓词中的列具有索引时,使用索引扫描
经过以上六个阶段,
SQL
就被解析映射成了集群上的
MapReduce
任务。
SQL
编译成
MapReduce
具体原理
在阶段五
-
生成物理执行计划,即遍历
OperatorTree
,翻译为
MapReduce
任务,这个过程具体是怎么转化的
呢
我们接下来举几个常用
SQL
语句转化为
MapReduce
的具体步骤:
Join
的实现原理
以下面这个
SQL
为例,讲解
join
的实现:
select u.name, o.orderid from order o join user u on o.uid = u.uid;
在
map
的输出
value
中为不同表的数据打上
tag
标记,在
reduce
阶段根据
tag
判断数据来源。
MapReduce
的过程
如下:
MapReduce CommonJoin
的实现
Group By
的实现原理
以下面这个
SQL
为例,讲解
group by
的实现:
select rank, isonline, count(*) from city group by rank, isonline;
将
GroupBy
的字段组合为
map
的输出
key
值,利用
MapReduce
的排序,在
reduce
阶段保存
LastKey
区分不同
的
key
。
MapReduce
的过程如下
:
Distinct
的实现原理
以下面这个
SQL
为例,讲解
distinct
的实现:
select dealid, count(distinct uid) num from order group by dealid;
当只有一个
distinct
字段时,如果不考虑
Map
阶段的
Hash GroupBy
,只需要将
GroupBy
字段和
Distinct
字段组
合为
map
输出
key
,利用
mapreduce
的排序,同时将
GroupBy
字段作为
reduce
的
key
,在
reduce
阶段保
存
LastKey
即可完成去重
:
- Hive 千亿级数据倾斜 -
数据倾斜问题剖析
剩余25页未读,继续阅读
资源评论
资深工程师为你打call
- 粉丝: 109
- 资源: 70
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于python编写的Keras深度学习框架开发,利用卷积神经网络CNN,快速识别图片并进行分类
- 最全空间计量实证方法(空间杜宾模型和检验以及结果解释文档).txt
- 5uonly.apk
- 蓝桥杯Python组的历年真题
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 前端开发技术实验报告:内含4四实验&实验报告
- Highlight Plus v20.0.1
- 林周瑜-论文.docx
- 基于MIC+NE555光敏电阻的声光控电路Multisim仿真原理图
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功