美文网首页Spark在简书玩转大数据互联网&大数据应用学习
如何让你的 Spark SQL 查询加速数十倍?

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

作者: 牛肉圆粉不加葱 | 来源:发表于2016-09-21 07:38 被阅读2300次

先来回答标题所提的问题,这里的答案是列存储,下面对列存储及在列存储加速 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

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

参考


欢迎关注我的微信公众号:FunnyBigData

FunnyBigData

相关文章

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

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

  • SparkSQL简介

    一、 如何运行Spark SQL 查询 1.1、Spark SQL CLI 要启动Spark SQL CLI ,请...

  • Spark SQL

    Spark SQL 该模型允许你使用SQL或者DataFrame或DataSet进行关系型查询 Spark SQL...

  • 大数据开发:Spark SQL及基础引擎

    Spark SQL作为Spark计算查询的重要支撑,在Spark生态当中的重要性是不言而喻的。Spark SQL使...

  • Spark SQL概述

    简介 Spark SQL 是 Spark 处理结构化数据的一个模块。Spark SQL 提供了查询结构化数据及计算...

  • 【Spark】Spark 并行查询 Greenplum

    本文结构如下: 前言 Spark SQL 几个属性介绍 Spark 并行查询 总结 一、前言 Spark 支持通过...

  • spark sql use hive

    spark sql 通过Spark SQL 查询hive中的数据 要求提供操作截图 切换数据库,选择指定的表; 操...

  • Spark Sql之DataFrame&DataSet

    Spark Sql是spark中的一个子模块,主要用于操作结构化数据。它具有如下特点:能够将SQL查询于Spark...

  • 数据库索引相关问题

    如何定位并优化慢查询Sql 根据慢日志定位慢查询sql 使用explain等工具分析sql 修改sql或者尽量让s...

  • spark大数据架构初学入门基础详解

    Spark是什么 a)是一种通用的大数据计算框架 b)Spark Core离线计算 Spark SQL交互式查询 ...

网友评论

    本文标题:如何让你的 Spark SQL 查询加速数十倍?

    本文链接:https://www.haomeiwen.com/subject/outaettx.html