专栏首页牛肉圆粉不加葱如何让你的 Spark SQL 查询加速数十倍?

如何让你的 Spark SQL 查询加速数十倍?

先来回答标题所提的问题,这里的答案是列存储,下面对列存储及在列存储加速 Spark SQL 查询速度进行介绍

列存储

什么是列存储

传统的数据库通常以行单位做数据存储,而列式存储(后文均以列存储简称)以列为单位做数据存储,如下:

优势

列存储相比于行存储主要有以下几个优势:

  • 数据即索引,查询是可以跳过不符合条件的数据,只读取需要的数据,降低 IO 数据量(行存储没有索引查询时造成大量 IO,建立索引和物化视图代价较大)
  • 只读取需要的列,进一步降低 IO 数据量,加速扫描性能(行存储会扫描所有列)
  • 由于同一列的数据类型是一样的,可以使用高效的压缩编码来节约存储空间

当然列存储并不是在所有场景都强于行存储,当查询要读取多个列时,行存储一次就能读取多列,而列存储需要读取多次。Spark 原始支持 parquet 和 orc 两个列存储,下文的实践使用 parquet

使用 Parquet 加速 Spark SQL 查询

在我的实践中,使用的 Spark 版本是 2.0.0,测试数据集包含1.18亿条数据,44G,每条数据共有17个字段,假设字段名是 f1,f2...f17。

使用 Parquet 格式的列存储主要带来三个好处

大大节省存储空间

使用行存储占用 44G,将行存储转成 parquet 后仅占用 5.6G,节省了 87.2% 空间,使用 Spark 将数据转成列存储耗时4分钟左右(该值与使用资源相关)

只读取指定行

Sql: select count(distinct f1) from tbInRow/tbInParquet

行存储耗时: 119.7s 列存储耗时: 3.4s 加速 35 倍

跳过不符合条件数据

Sql: select count(f1) from tbInRow/tbInParquet where f1 > 10000

行存储耗时: 102.8s 列存储耗时: 1.3s 加速 78 倍

当然,上文也提到了,列存储在查询需要读取多列时并不占优势: Sql: select f1, f2, f3...f17 from tbInRow/tbInParquet limit 1

行存储耗时: 1.7s 列存储耗时: 1.9s

列存储带来的加速会因为不同的数据,不同的查询,不同的资源情况而不同,也许在你的实践中加速效果可能不如或比我这里例子的更好,这需要我们根据列存储的特性来善用之

参考


本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [源码剖析]Spark读取配置Spark读取配置

    我们知道,有一些配置可以在多个地方配置。以配置executor的memory为例,有以下三种方式:

    codingforfun
  • Spark executor模块① - 主要类以及创建 AppClient

    SchedulerBackend 在 Standalone 模式下的 SchedulerBackend 的实现是 StandaloneSchedulerBack...

    codingforfun
  • Spark Sql 源码剖析(一):sql 执行的主要流程

    之前写过不少 Spark Core、Spark Streaming 相关的文章,但使用更广泛的 Spark Sql 倒是极少,恰好最近工作中使用到了,便开始研读...

    codingforfun
  • 干货 | 如何评估Kubernetes持久化存储方案

    从用户角度看,存储就是一块盘或者一个目录,用户不关心盘或者目录如何实现,用户要求非常“简单”,就是稳定,性能好。为了能够提供稳定可靠的存储产品,各个厂家推出了各...

    焱融科技
  • 深度||全球存储二十年并购回顾,中国存储何时迎来春天?

    1998--2018年是全球存储工业从崛起走向成熟的二十年。回顾这二十年全球存储市场的并购之路,我们发现收购金额超过10亿美金的重要收购超过50个,涵盖了从传统...

    大数据在线
  • 腾讯云-对象存储介绍

    首先介绍存储的分类,并主要介绍对象存储的分类,接着介绍用户的常见问题包括计费项和计费周期,最后介绍对象存储的控制台和使用案例。

    研究僧
  • 聊聊越来越火的对象存储

    随着云计算的发展,云存储作为一种更基础的云上资源池设施也越来越受到重视和欢迎。从云存储的类型来讲,目前流行的有块存储、文件存储和对象存储三种。今天的主角是对象存...

    飞雪无情
  • 如何利用公共云存储构建中小企业存储

    中小型企业(SME)的技术需求虽然比大企业的少,但仍然很重要。其中的关键是中小企业的存储。

    CloudBest
  • 如何利用公共云存储构建中小企业存储

    内部部署的超融合基础设施对于中小企业来说非常适合,这消除了对SAN存储及其相关技能的需求,但是,对于希望实现存储基础设施现代化的中小企业,有许多方法可以从云存储...

    静一
  • 云存储是如何工作的?

    如今,企业越来越多地采用云存储选项,因为它们需要更多的容量、弹性容量以及更好的方式来管理存储成本。事实证明,越来越多的企业数据和云数据难以让IT部门单独使用他们...

    静一

扫码关注云+社区

领取腾讯云代金券