这是我参与「第四届青训营 」笔记创作活动的第1天
大数据体系结构和SQL
在分析引擎部分中,Spark、Flink等框架使用的是同样的SQL----“one SQL rules big data all”。
SQL处理流程
1.Parser
由String -> AST(abstract syntax tree)抽象语法树,包括词法分析和语法分析:
- 词法分析:拆分字符串,形成token。
- 语法分析:将token组成AST node,最终得到AST。
2. Analyzer 和Logical Plan
- Analyzer : AST-> logical plan
- Logical Plan: 逻辑描述SQL对应的分步骤计算操作
3. 查询优化
- SQL是一种声明式语言,用户只描述什么做什么,没有告诉数据库怎么做
- 目标:找到一个正确且执行代价最小的物理执行计划
- 查询优化器是数据库的大脑,最复杂的模块,很多问题都是NP问题
- 一般SQL越复杂,join的表越多,数据量越大,查询优化的意义就越大,不同的执行方式的性能差别可能有成百上千倍。
4. Pysical Plan 和Executor
- Pysical Plan:物理计划片段,执行计划子树,最小化网络数据传输,利用数据的物理分布(数据亲和性)
- Executor:单机执行,多机并行
常见的查询优化器
RBO(Rule-based Optimizer)
1. 优化原则
- 更少的从硬盘中读取数据,更快的读取数据(I/O)
- 数据传输更少和更快(NetWork)
- 数据处理更少和更快(CPU和内存)
2.优化规则
列裁剪
只获取需要的列
谓词下推
先过滤再连表查询
传递闭包
运行时过滤
CBO(Cost-based Optimizer)
- CBO使用代价模型和统计信息估算执行计划的代价
- CBO使用贪心或者动态规划算法寻找最优执行计划
- 在大数据场景下CBO对查询性能非常重要