扩展_Catalyst 优化器_优化过程 | 学习笔记

简介: 快速学习扩展_Catalyst 优化器_优化过程

开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段扩展_Catalyst 优化器_优化过程】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/690/detail/12040


扩展_Catalyst 优化器_优化过程

 

Catalyst 优化器_优化过程

 

为了解决过多依赖 Hive 的问题, SparkSQL 使用了一个新的 SQL 优化器替代 Hive 中的优化器,这个优化器就是 Catalyst ,整个 SparkSQL 的架构大致如下:

image.png

1.API 层简单的说就是 Spark 会通过一些 API 接受 sQL 语句

2.收到 SQL 语句以后,将其交给 Catalyst, Catalyst 负责解析 sQL,生成执行计划等

3.Catalyst 的输出应该是 RDD 的执行计划

4.最终交由集群运行

大致步骤是 Spark SQL 的 API,SQL 的 API,大致有两种,一种是声明式的,还有一种是命令式的,两种 API 都可以,两种 API 在调用过了以后,其调用的结果会被传入 catalyst,catalyst 会根据你传入进来的一些 API 一些结果,生成对应的执行计划,执行计划生成的时候,会经历大致四个阶段,第一个阶段就是解析,第二个阶段是优化,第三个阶段是运行,就是物理计划,总共是三个大阶段,然后第四个阶段是运行。

运行的时候,就会给其放入这个 RDD 当中,最终在我们到这个 catalyst 当中去运行,这是 catalyst 的工作的一个大致的步骤。

image.png

我们把视角放在 catalyst 这个东西之上,直接去看这个 catalyst 是怎么工作的,它里面都有什么样的一些步骤。

首先第一步,解析 SQL。一般情况下,编译器里面最常做的一件事情就是先去解析,传进来的这个编程语言,比如说 Java 这些都是一样的。他们如果编译器的话,要先根据你的这个代码来去生成一棵语法树,这棵树里面就包含了你从底层到上层所做的所有事情,生成这样的一棵树以后,Catalyst 会做什么样的工作呢image.png

Catalyst 会在第二步,向这棵树里面添加一些对应的一些元素,添加一些这个结构化的一些信息,比如说我们来看这棵树。

image.png

第一步去读取 People 的这样的一张表,第二个步骤要读取 score 这样的一张表,然后对其进行着完以后 filter, filter 完以后,Project 就是筛选某一列,最终 aggregate 就是聚合得到结果,这是我们的一棵树,在这棵树当中,我们整个的步骤首先,对于第一个地方,这个 filter 的地方,要有一些代码的执行,要知道你要去判断什么样的 filter,我们这个地方的判断,就是判断 people ID 等于 score ID,并且 people 的 age 大于十岁,看一下这个 SQL 语句,做的就是这样的事情。

第二大步骤,加入数据信息数据的元素。

在这个位置,本来是一个 people ID,不知道他是什么类型,SKY 不知道它是什么类型,不知道这个 age 是什么类型,第一步需要为 score ID 生成一个新的标识,首先他叫 ID,然后,第一个就是他的 ID,这个列的 ID。

接下来,在 project 这个地方,取出 score math 再加上 180,如果是这样,math 其实也会被转换,转换成 Mascot#2。2 就是 math score 的标识,是一个 L 类型,根据这样的一个步骤,就可以为这个 ast 当中加入一些这个标识符,一些类型信息,一些结构信息。有了结构信息以后,就可以对其来进行优化。

l score.id - id#1#L 为 score.id 生成 id 为 1,类型是 Long

l score.math_score - math_score#2#L 为 score.math_score 生成 id 为 2,类型为 Long

l people.id - id#3#L 为 people.id 生成 id 为 3,类型为 Long

l people.age - age#4#L 为 people.age 生成 id 为 4,类型为 Long

一般情况下,这个优化指的都是按照规则进行优化,也就是比较死板的一种优化方式,我们会先通过一些规则来去看你符合这个规则,如果你符合这个规则,就来进行优化。

比如说这样的一棵树,在我们的 John 之后做了一个 filter,如果我们把这个 filter 挪到 John 之前呢?也就是在 scan 以后直接 filter,join 的数据就变少,这种优化方式叫做谓词下推,谓词下推的这种优化方式,它的优势就是在于减少数据量,这个 catalyst 会先去看你符合这样的一个方式,只要他去看一看这个 filter 前面是不是有这样的一个 join。

如果有的话,是否会影响你的结果,如果不影响,把 filter 下推一下,推到 scan 的后面,把这个 filter 也往下推一下,推到 scan 的后面,所以这时,就要留在这个位置,也就是说本来就变到了这个位置,本来 filter 到了后面,所以,这是谓词下推。

image.png

怎么做到的呢?是通过规则的匹配来做到的,符合这个规则,就推一下。

除了谓词下推以外,我们还有一个叫做裂值裁剪,、假设说你现在执行的一个 SQL 是这样的,一个 select 的 name,只取了一列,这个 person 中有十列,我们应该把这个 project 也往下推,只要这一列,后面所有的操作基本上都是围绕这一切来,假如说后面的一些操作是围绕着一列来的,其他的数据就没有必要参与那些操作,这棵树会变成这个样子。

首先,我们通过规则匹配到这个 project,在这个位置,是有影响的,也就是说这个 project 可以推到这个位置,通过一些规则匹配,这个 project 你可以理解为就是 select,然后,select 的操作,就会被推到我们的 Join 和 filter,这个时候,project 就会被优化,传到 join 的数据,就再一次变少了。

image.png

这是我们所说的两种显著的优化方式,一个叫做谓词下推,一个叫做列词裁剪。

这个时候我们生成的还没有办法直接运行,因为生成的是一个逻辑计划,把这个数怎么放到集群里运行?

要把这棵树最终要翻译成什么,翻译成我们的 RDD 才能去运行到集群,这一步就叫做逻辑计划生成为物理计划,根据这样的一棵树生成物理计划,一颗优化过的树生成物理,就是物理计划,最终去调度这个 ID 的去运行,这就是我们 Catalyst 的一个大致的原理。

相关文章
|
达摩院 开发者 容器
「达摩院MindOpt」优化形状切割问题(MILP)
在制造业,高效地利用材料不仅是节约成本的重要环节,也是可持续发展的关键因素。无论是在金属加工、家具制造还是纺织品生产中,原材料的有效利用都直接影响了整体效率和环境影响。
「达摩院MindOpt」优化形状切割问题(MILP)
|
人工智能 自然语言处理 达摩院
MindOpt 云上建模求解平台:多求解器协同优化
数学规划是一种数学优化方法,主要是寻找变量的取值在特定的约束情况下,使我们的决策目标得到一个最大或者最小值的决策。
|
3月前
|
并行计算 算法 调度
【微电网优化】基于吸血水蛭优化器(BSLO)的微电网优化研究(Matlab代码实现)
【微电网优化】基于吸血水蛭优化器(BSLO)的微电网优化研究(Matlab代码实现)
114 3
|
机器学习/深度学习 算法 数据可视化
如果你的PyTorch优化器效果欠佳,试试这4种深度学习中的高级优化技术吧
在深度学习领域,优化器的选择对模型性能至关重要。尽管PyTorch中的标准优化器如SGD、Adam和AdamW被广泛应用,但在某些复杂优化问题中,这些方法未必是最优选择。本文介绍了四种高级优化技术:序列最小二乘规划(SLSQP)、粒子群优化(PSO)、协方差矩阵自适应进化策略(CMA-ES)和模拟退火(SA)。这些方法具备无梯度优化、仅需前向传播及全局优化能力等优点,尤其适合非可微操作和参数数量较少的情况。通过实验对比发现,对于特定问题,非传统优化方法可能比标准梯度下降算法表现更好。文章详细描述了这些优化技术的实现过程及结果分析,并提出了未来的研究方向。
442 1
|
人工智能 算法 调度
优化问题之如何选择合适的优化求解器
优化问题之如何选择合适的优化求解器
|
达摩院 调度
使用达摩院MindOpt优化交通调度_最大化通行量—线性规划问题
在数学规划中,网络流问题是指一类基于网络模型的流量分配问题。网络流问题的目标是在网络中分配资源,使得网络的流量满足一定的限制条件,并且使得某些目标函数最小或最大化。网络流问题通常涉及一个有向图,图中每个节点表示一个资源,每条边表示资源之间的关系。边上有一个容量值,表示该边上最多可以流动的资源数量。流量从源节点开始流出,经过一系列中间节点,最终到达汇节点。在这个过程中,需要遵守一定的流量守恒和容量限制条件。
|
调度 决策智能
优化问题之优化求解器有哪些主要的评估特性
优化问题之优化求解器有哪些主要的评估特性
|
存储 达摩院 调度
「达摩院MindOpt」优化FlowShop流水线作业排班问题
在企业在面临大量多样化的生产任务时,如何合理地安排流水线作业以提高生产效率及确保交货期成为了一个重要的问题。
「达摩院MindOpt」优化FlowShop流水线作业排班问题
MindOpt V1.0优化种植计划问题,新的建模方法
种植计划是指农业生产中针对不同农作物的种植时间、面积和种植方式等方面的规划安排。根据具体情况进行合理的规划和安排,以实现农作物的高产、优质和可持续发展。
MindOpt V1.0优化种植计划问题,新的建模方法
|
存储 安全 调度
MindOpt——优化虚拟电厂智能调度问题(一)
近年来,在实现“双碳”目标的道路上,以风、光为代表的可再生能源作为缓解能源压力、促进可持续发展的重要途径广受关注。虚拟电厂作为一种区域性多能源聚合形式,实现了可再生能源大量接入电力系统运行,推动城市能源系统绿色高效发展。研究大规模常态化运行的虚拟电厂关键技术成为亟待解决的问题。分布式光伏、分布式储能及可控负荷等灵活性资源具有容量小、资源种类多、数量庞大等特点,难以直接参与电网互动运行。虚拟电厂有效聚合电源、负荷、储能等各类资源,参与电力市场,响应价格信号,为电网提供调峰、调频、调压与备用等辅助服务。
MindOpt——优化虚拟电厂智能调度问题(一)

热门文章

最新文章