这是我参与「第四届青训营 」笔记创作活动的的第1天
本节课主要内容
- 大数据体系和SQL
- 常见的查询优化器
- 社区开源实战
- 前沿趋势
01大数据体系和SQL
主要介绍大数据体系和SQL的处理流程,重点介绍SQL在分布式环境下的处理
(1)大数据中的SQL
(2)SQL处理流程(重点⭐)
SQL-->Parser(AST)-->Analyzer(Logical Plan)-->Optimizer(Physical Plan)-->Executor
01)Parser
功能:String-->AST(abstract syntax tree)
字符串-->关键字、字符串常量等token-->将token组成AST node-->AST
02)Analyzer
功能:访问库/表元信息并绑定;判断 SQL 是否合理;将 AST 转换成逻辑计划树
*Logical Plan *(理解⭐⭐):
逻辑地描述一个 SQL 如何执行查询和计算,最终得到执行结果的一个分步骤地计划。树中每个节点是一个算子,定义了对数据集合的计算操作,边代表了数据的流向,从孩子节点流向父节点。
举例说明:
SELECT country.name, SUM(weblog.bytes) as total
FROM country
INNER JOIN geoip ON country.id = geoip.country_id
INNER JOIN weblog ON geoip.host = weblog.host
WHERE weblog.reply = "200" and weblog.host is not null
GROUP BY country.name
ORDER BY total
LIMIT10
逻辑计划树如下图所示:
注意:left-deep tree JOIN要在左边。
03)Optimizer(重点⭐⭐⭐⭐)
为什么要优化?
一般 SQL 越复杂,Join 的表越多,数据量越大,查询优化的意义就越大,因为不同执行方式的性能差别可能有成百上千倍
Physical Plan(Plan Fragment)
功能:最小化网络数据传输;利用上数据的物理分布;增加Shuffle算子
- 优化器的输出是一个分布式的物理执行计划。
- 分布式物理执行计划的目标是在单机 Plan 的基础上最小化数据移动和最大化本地 Scan,生成 PlanFragment 树。
- 一个 PlanFragment 封装了在一台机器上对数据集的操作逻辑。每个 PlanFragment 可以在每个 executor 节点生成 1 个或多个执行实例,不同执行实例处理不同的数据集,通过并发来提升查询性能。
- Plan 分布式化的方法是增加 shuffle 算子,执行计划树会以 shuffle 算子为边界拆分为PlanFragment。
04)Executor Executor 按照物理执行计划扫描和处理数据,充分利用机器资源(CPU 流水线,乱序执行,cache,SIMD)