Spark SQL概念学习系列之Spark SQL 优化策略(五)
查询优化是传统数据库中最为重要的一环,这项技术在传统数据库中已经很成熟。除了查询优化, Spark SQL 在存储上也进行了优化,从以下几点查看 Spark SQL 的一些优化策略。
(1)内存列式存储与内存缓存表
Spark SQL 可以通过 cacheTable 将数据存储转换为列式存储,同时将数据加载到内存进行缓存。 cacheTable 相当于在分布式集群的内存物化视图,将数据进行缓存,这样迭代的或者交互式的查询不用再从 HDFS 读数据,直接从内存读取数据大大减少了 I/O 开销。列式存储的优势在于 Spark SQL 只需要读出用户需要的列,而不需要像行存储那样需要每次将所有列读出,从而大大减少内存缓存数据
量,更高效地利用内存数据缓存,同时减少网络传输和 I/O 开销。数据按照列式存储,由于是数据类型相同的数据连续存储,能够利用序列化和压缩减少内存空间的占用。
(2)列存储压缩
为了减少内存和硬盘空间占用, Spark SQL 采用了一些压缩策略对内存列存储数据 进 行 压 缩。 Spark SQL 的 压 缩 方 式 要 比 Shark 丰 富 很 多, 例 如 它 支 持 PassThrough,RunLengthEncoding, DictionaryEncoding, BooleanBitSet, IntDelta, LongDelta 等多种压缩方式。这样能够大幅度减少内存空间占用和网络传输开销和 I/O 开销。
(3)逻辑查询优化
Spark SQL 在逻辑查询优化(如图 1 所示)上支持列剪枝、谓词下压、属性合并等逻辑查询优化方法。列剪枝为了减少读取不必要的属性列,减少数据传输和计算开销,在查询优化器进行转换的过程中会进行列剪枝的优化。

图 1 逻辑查询优化
下面介绍一个逻辑优化例子:
SELECT Class FROM (SELECT ID,Name,Class FROM STUDENT ) S WHERE S.ID=1
Catalyst 将原有查询通过谓词下压,将选择操作 ID=1 优先执行,这样过滤大部分数据,通过属性合并将最后的投影只做一次最终保留 Class 属性列。
(4) Join 优化
Spark SQL 深度借鉴传统数据库查询优化技术的精髓,同时也在分布式环境下进行特定的优化策略调整和创新。 Spark SQL 对 Join 进行了优化支持多种连接算法,现
在的连接算法已经比 Shark 丰富,而且很多原来 Shark 的元素也逐步迁移过来。例如:BroadcastHashJoin、 BroadcastNestedLoopJoin、 HashJoin、 LeftSemiJoin,等等。
下面介绍一个其中的 BroadcastHashJoin 算法思想。BroadcastHashJoin 将小表转化为广播变量进行广播,这样避免 Shuff le 开销,最后在分区内做 Hash 连接。这里用的就是 Hive 中 Map Side Join 的思想。同时用了 DBMS中的 Hash 连接算法做连接。
随着 Spark SQL 的发展,未来会有更多的查询优化策略加入进来。同时后续 SparkSQL 会 支 持 像 Shark Server 一 样 的 服 务 端、 JDBC 接 口, 兼 容 更 多 的 持 久 化 层 例 如NoSQL,传统的 DBMS 等。一个强有力的结构化大数据查询引擎正在崛起。
Spark SQL概念学习系列之Spark SQL 优化策略(五)的更多相关文章
- Spark SQL概念学习系列之Spark SQL 架构分析(四)
Spark SQL 与传统 DBMS 的查询优化器 + 执行器的架构较为类似,只不过其执行器是在分布式环境中实现,并采用的 Spark 作为执行引擎. Spark SQL 的查询优化是Catalyst ...
- Spark SQL概念学习系列之Spark SQL概述
很多人一个误区,Spark SQL重点不是在SQL啊,而是在结构化数据处理! Spark SQL结构化数据处理 概要: 01 Spark SQL概述 02 Spark SQL基本原理 03 Spark ...
- Spark SQL概念学习系列之分布式SQL引擎
不多说,直接上干货! parkSQL作为分布式查询引擎:两种方式 除了在Spark程序里使用Spark SQL,我们也可以把Spark SQL当作一个分布式查询引擎来使用,有以下两种使用方式: 1.T ...
- Spark RDD概念学习系列之Spark Hash Shuffle内幕彻底解密(二十)
本博文的主要内容: 1.Hash Shuffle彻底解密 2.Shuffle Pluggable解密 3.Sorted Shuffle解密 4.Shuffle性能优化 一:到底什么是Shuffle? ...
- Spark SQL概念学习系列之Spark SQL的简介(一)
Spark SQL提供在大数据上的SQL查询功能,类似于Shark在整个生态系统的角色,它们可以统称为SQL on Spark. 之前,Shark的查询编译和优化器依赖于Hive,使得Shark不得不 ...
- Spark SQL概念学习系列之Spark SQL入门
前言 第1章 为什么Spark SQL? 第2章 Spark SQL运行架构 第3章 Spark SQL组件之解析 第4章 深入了解Spark SQL运行计划 第5章 测试环境之搭建 第6章 ...
- Spark SQL概念学习系列之Spark SQL入门(八)
前言 第1章 为什么Spark SQL? 第2章 Spark SQL运行架构 第3章 Spark SQL组件之解析 第4章 深入了解Spark SQL运行计划 第5章 测试环境之搭建 第6章 ...
- Spark SQL概念学习系列之Spark SQL基本原理
Spark SQL基本原理 1.Spark SQL模块划分 2.Spark SQL架构--catalyst设计图 3.Spark SQL运行架构 4.Hive兼容性 1.Spark SQL模块划分 S ...
- Spark SQL概念学习系列之Spark生态之Spark SQL(七)
具体,见
随机推荐
- iptables配置——NAT地址转换
iptables nat 原理同filter表一样,nat表也有三条缺省的"链"(chains): PREROUTING:目的DNAT规则 把从外来的访问重定向到其他的机子上,比如 ...
- Windows下使用Visual Studio 2010编译ffmpeg全过程
在visual studio 2010中调用ffmpeg http://blog.sina.com.cn/s/blog_4178f4bf01018wqh.html Windows下使用Visual S ...
- MyEclipse Blue Edition 6.5 注册码生成程序
import java.text.DecimalFormat; import java.text.NumberFormat; import java.text.SimpleDateFormat; im ...
- poj3468,poj2528
其实这两题都是基础的线段树,但对于我这个线段树的初学者来说,总结一下还是很有用的: poj3468显然是线段树区间求和,区间更改的问题,而poj2528是对区间染色,问有多少种颜色的问题: 线段树的建 ...
- Ajax、Comet与Websocket
从 http 协议说起 1996年IETF HTTP工作组发布了HTTP协议的1.0版本 ,到现在普遍使用的版本1.1,HTTP协议经历了17 年的发展.这种分布式.无状态.基于TCP的请求/响应式 ...
- [反汇编练习] 160个CrackMe之008
[反汇编练习] 160个CrackMe之008. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...
- 修改placeholder属性
input::-webkit-input-placeholder{ font-size:12px;}input:-ms-input-placeholder{ font-size:12px;}input ...
- Java [Leetcode 290]Word Pattern
题目描述: Given a pattern and a string str, find if str follows the same pattern. Here follow means a fu ...
- B树索引和位图索引的区别!
B树索引主键和唯一性约束字段的B树索引,效率几乎和海量数据没有关系. 键值重复率低的字段比较适合使用B树索引. 位图索引键值重复率高的字段比较适合使用位图索引.count.and.or.in这些特定的 ...
- POJ 2481 Cows
Cows Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 16546 Accepted: 5531 Description ...