Spark SQL和 presto 访问数据源的对比分析

时间:2024-03-28 12:13:58

直观感受是使用Spark SQL比通过 presto 写SQL的查询速度更快

开发python程序访问Presto可以借助pyhive工具


Spark SQL

是什么?
  • Spark SQL是分布式SQL引擎
  • 底层依赖RDD,处理结构化数据的一个模块
和Hive的不同
  • Hive是基于mapreduce框架实现SQL基本操作
  • Spark SQL拥有Catalyst优化器
  • Spark SQL能够支持不同数据源

Hive on Spark:Hive既作为存储又负责解析,Spark只负责执行
Spark on Hive:Hive只作为存储,Spark负责解析、执行

三种数据结构

Spark SQL和 presto 访问数据源的对比分析

Dataframe和Dataset是什么

和RDD一样,都是Spark平台下的分布式弹性数据集
DF是以RDD为基础的分布式数据集,是Row对象的集合
Dataset是Dataframe的一个特例
Dataset是强类型的数据集

Datafram比RDD的优势

DF提供了数据的结构信息
DF定制化内存管理,数据存放于JVM堆外内存
DF是先转换成逻辑计划再去运行,对任何语言,执行效率一样
DF提供更丰富的API

Dataset比Dataframe的优势

具备了Dataframe的优点
编译时类型安全
API面向对象
Encoder能够在不反序列化整个对象的情况下进行操作


presto

是什么
  • Presto是由Facebook开发的分布式SQL查询引擎,用来进行高速、实时的数据分析
  • Presto的产生是为了解决Hive的Mapreduce模型太慢且不能通过BI等工具展现HDFS数据的问题
  • Presto是一个计算引擎,它不存储数据,通过丰富的Connector获取第三方服务的数据,并支持拓展
优点
  • Presto支持标准的SQL,降低了分析人员和开发人员的使用门槛
  • Presto支持可插拔的Connector,可以连接多种数据源,包括Hive、RDBMS、Kafka、MongoDB等
  • Presto是一个低延时、高并发的内存计算引擎,比Hive执行效率高的多
数据模型
  • Catalog:即数据源。Hive、Mysql都是数据源。Presto可以连接多个Hive和多个MySQL
  • Schema:类比Database,一个catalog下面有多个Schema
  • Table:数据表,与我们常用的数据库表意义相同,一个Schema下有多个数据表
架构

Presto为Master-Slave架构,由三部分组成

  • 一个coordinator节点,负责解析SQL语句,生成查询计划,分发执行任务
  • 一个Discovery Server节点,负责维护Coordinator和Worker的关系,通常内嵌于Coordinate节点
  • 多个Worker节点,负责执行查询任务以及与HDFS进行交互读取数据

Spark SQL和 presto 访问数据源的对比分析


数据库架构设计

  • shared Everthing:完全透明共享CPU/MEMORY/IO,并行处理能力是最差的
  • shared Storage:各个处理单元使用自己的私有CPU和Memory,共享磁盘系统
  • shared Nothing:各个处理单元都有自己私有的CPU/内存/硬盘等

Spark SQL和 presto 访问数据源的对比分析