这是我参与「第四届青训营 」笔记创作活动的第2天。
本节课程主要分为 4 个方面:
1.大数据体系和 SQL;
2.常见的查询优化器;
3.查询优化器的社区开源实践;
4.SQL 相关的前沿趋势。
1.大数据体系
大数据体系是包括计算,存储,调度,分析和应用的一系列行为框架的集合。
介绍一下各个框架的使用流程:
ETL -> 分布式存储 -> 分布式资源调度 -> 通用计算 -> 分析
ETL:大数据的的数据存储是分布式的,能够接受任务调度,所以需要ETL模块,导入到大数据的数据存储系统中存储。
ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据。ETL(Extract-Transform-Load,抽取-转换-存储)的操作,即在数据抽取过程中进行数据的加工转换,然后加载到存储中。ETL是一种对数据进行清洗和处理的操作。ETL从不同的数据库中抽取数据,进行转换,然后加载到数据仓库中。ETL的一些主要功能类似于数据分析的前提操作数据处理。
Sqoop:
Apache Sqoop(SQL-to-Hadoop)项目旨在协助RDBMS(关系型数据库)与Hadoop之间进行高效的大数据交流。用户可以在 Sqoop 的帮助下,轻松地把关系型数据库的数据导入到 Hadoop 与其相关的系统 (如HBase和Hive)中;同时也可以把数据从 Hadoop 系统里抽取并导出到关系型数据库里。
Sqoop详细介绍:zhuanlan.zhihu.com/p/444568213…
dateX也是一种ETL处理系统: dateX基础介绍:blog.csdn.net/m0_61607827…
flume:flume是高可用,高可靠的,分布式的海量日志采集、聚合和传输的系统。 flume基础介绍:zhuanlan.zhihu.com/p/337733893
大数据的数据存储系统,最常见的就是分布式文件系统HDFS;如果需要使用NoSQL数据库功能,HBase是基于HDFS实现的一个分布式NoSQL数据库。存储起来的数据,使用大数据的通用计算引擎MapReduce或Spark进行计算,这些计算任务会由资源管理框架——Yarn进行调度。将任务分发到数据的存储位置——HDFS中。
使用通用计算引擎MapReduce或Spark编写处理任务,需要使用特定的语法;这样一来,原有的特定领域的传统业务,进行迁移时就会带来很多问题。比如原有的数据仓库,使用SQL进行数据处理任务,但迁移到大数据平台之后,原来的SQL业务需要全部转换为MapReduce、Spark语法,迁移成本太大。其次,图计算、机器学习等其他领域,在MapReduce、Spark语法基础上,实现起来非常困难,且易用性很差。
于是在通用计算引擎之上,针对不同的领域,诞生了很多提升易用性的产品;以使得对存储在大数据平台上的数据进行数据分析,变得更加容易。
消息队列一般用来解耦存储和计算
2.SQL优化器
SQL 的一生
-
-
Parser
- 把文本变成抽象语法树结构(AST)
- 涉及词法分析阶段(拆分字符串,提取关键字,字符串,数值等)和语法分析阶段(把词条按照定义的语法规则组装成抽象语法树结构)
- 和编译原理课程里的“前端”知识相关
-
Analyzer
- 访问库/表元信息并绑定
- 判断 SQL 是否合理,比如数据库,表和列名是否存在,列的数据类型是否正确
- 将 AST 转换成逻辑计划树(在某些系统中这个工作由一个 Converter 完成) 。
在PostgreSQL版任何查询都会经过语法和语义分析,生成查询表达式树,也就是常用查询树。根据查询书执行器进行预处理,找到最小代价路径创建出计划树。再把查询计划交给执行器执行。这个查询树类似逻辑计划树。
物理执行计划是优化器输出。分布式物理执行计划的目标是在单机 Plan 的基础上最小化数据移动和最大化本地 Scan,生成 PlanFragment 树。
主要是关注分析引擎
为什么首先讲SQL优化? sql语言比较简单,通用性更强,接口支持多,sql是大数据处理的接口
sql优化是指在sql处理流程中的将逻辑计划转换成物理计划的过程 sql处理流程:
parser:将每个节点有特点类型的元素。父节点包含多个类型的节点。变成抽象语法树。 比如:根节点便是一个语句,它的子节点可以有多个,分别是对应的库,对应的表,对应的组等等
analyzer:AST->逻辑计划
optimization:sql是一种生命是语言,用户只描述怎么做,没告诉数据库做什么,比如你让一个人帮你买张票,他能帮你买回来, 但是,他不会的说怎么买回来的,现在你可以这样,你让他坐车帮你买一张票,这就指定怎么做了。
查询优化器分类:
top-down
bottom-up
根据方法划分:
rule-based
cost-based
RBO-关系代数 类似于集合操作
优化原则: IO 网络 cpu和内存
优化方法:
RBO:
列裁剪:对一个查询,算子中用不到的列,我们可以不用查询,可以去掉。
谓词下推:比如where就是谓词,让谓词算子下推尽早被执行,避免掉一些不必要的数据。
传递闭包:从谓语算子算子找到隐藏的传递性,利用这个更改查询逻辑计划树。
runtime filter:在算子执行后,把他的数据传递给其他算子,充分利用单个算子的信息在整个执行计划。
RBO缺点:不保证得到最优的执行计划
单表扫描:索引扫描和全表扫描:在数据分布不均匀的时候,索引扫描可能不如全表扫描。
join的实现
CBO:
使用一个模型估算执行计划的代价,选择代价最小的执行计划。
统计信息
统计信息:原始表(统计信息行数,列数,大小字节),推导统计信息(选择率<对于过滤条件,查询会从表中返回多大的比例的数据>,基数)
统计信息的收集:
1.在DDL中指定需要收集的统计信息
2.手动执行explain analyze statement,触发数据库收集或更新统计信息
3.动态采样
统计信息推导规则:
执行计划枚举:
通常使用贪心算法或动态规划选择出最优的执行规划
3.社区开源实践
查询优化器的实现
各个数据库的RBO的实现
Apache Calcite概览
获取sql->关系表达式->查询优化器(定义插件化的优化规则)
Calcite RBO
优化规则:patten:匹配表达子树;等价替换:得到新的表达式、
匹配(根据匹配规则匹配)然后替换
Calcite CBO
基于Volcano/Coscade
前沿趋势
AI4DB
自配置
自诊断和自愈合
自优化
DB4AI
内嵌人工智能算法
内嵌机器学习框架
总结
1.了解了大数据的体系和大数据的基本框架,我们知道分布式存储是大数据的一个核心,通过分布式存储,我们连接匹配各种数据库,在数据存储后进行管理,通用计算和分析。
2.了解了SQL内部的执行过程,包括词法分析,语法分析,逻辑计划,物理计划,重点学习了逻辑计划的优化分析:RBO和CBO。
3.了解了社区开源实践的一些内容以及大数据的前沿趋势
标题:青训营第二天开营 大数据学习| 青训营笔记
网址:juejin.cn/