| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> Spark优化篇:RBO/CBO -> 正文阅读 |
|
[大数据]Spark优化篇:RBO/CBO |
?????? ? ??在Spark1.0中所有的Catalyst Optimizer都是基于规则 (rule) 优化的。为了产生比较好的查询规 则,优化器需要理解数据的特性,于是在Spark2.0中引入了基于代价的优化器 (cost-based optimizer),也就是所谓的CBO。然而,CBO也无法解决很多问题,比如:
总而言之,由于种种限制,Spark的优化器无法产生最好的Plan。 也许你会想:Spark为什么不解决这个问题呢?这里有很多挑战,比如:?
基于RBO优化:left join case
基于CBO优化:CBO?优化主要在物理计划层面,原理是计算所有可能的物理计划的代价,并挑选出代价最小的物理执行计划。充分考虑了数据本身的特点(如大小、分布)以及操作算子的特点(中间结果集的分布及大小)及代价,从而更好的选择执行代价最小的物理执行计划。 而每个执行节点的代价,分为两个部分:? 1、该执行节点对数据集的影响,即该节点输出数据集的大小与分布; 2、该执行节点操作算子的代价。 每个操作算子的代价相对固定,可用规则来描述。而执行节点输出数据集的大小与分布,分为两个部分: 1、初始数据集,也即原始表,其数据集的大小与分布可直接通过统计得到; 2、中间节点输出数据集的大小与分布可由其输入数据集的信息与操作本身的特点推算。 需要先执行特定的?SQL?语句来收集所需的表和列的统计信息。?
没有执行 ANALYZE状态? 执行 ANALYZE后,发现多了很多spark.sql.statistics信息 ? ?使用?CBO 通过?"spark.sql.cbo.enabled"?来开启,默认是?false。配置开启?CBO?后,CBO?优化器可以基于表和列的统计信息,进行一系列的估算,最终选择出最优的查询计划。比如:Build?侧选择、优化?Join?类型、优化多表?Join?顺序等。
???????
123 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 4:07:07- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |