Presto 即席查询

  • Presto
  • Presto架构
  • 优缺点
  • Presto、Impala 性能比较
  • Presto优化之数据存储
  • 合理设置分区
  • 使用列式存储
  • 使用压缩
  • Presto优化之查询SQL
  • 只选择使用的字段
  • 过滤条件必须加上分区字段
  • Group By 语句优化
  • Order by 时使用 Limit
  • 使用Join语句时将大表放在左边
  • 注意事项
  • Kylin


Presto

开源的分布式 SQL 查询引擎,数据量支持 GB 到 PB 字节,主要用来处理秒级查询的场景

虽然 Presto 可以解析 SQL,但它不是 MySQL 或 Oracle 的代替品,也不能处理在线事务 ( OLTP )

Presto架构

Presto :

  • 1 个 Coordinator
  • n 个 Worker

presto为什么分页乱序 presto 分页查询_数据库

  1. 由客户端提交查询 , 从 Presto 命令行 CLI 提交到 Coordinator
  2. Coordinator 解析查询计划 , 把任务分发给 Worket 执行
  3. Worker 负责执行任务和处理数据
  4. Catolog : 数据源 。一个 Catelog : Schema 和 Connetor
  5. Connector : 适配器。用于 Presto 和数据源 (Hive , Redis) 的连接 , 类似于JDBC
  6. Schema 类似于 Mysql 的数据库 , Table 类似于 Mysql的表
  7. Coordinator : 负责从 Worker 获取结果并返回最终结果给 Client

优缺点

presto为什么分页乱序 presto 分页查询_hive_02

优点

  • Presto 基于内存运算,减少了硬盘 IO,计算更快
  • 能连接多个数据源,跨数据源连表查,如从 Hive 查询大量网站访问记录,然后从 Mysql 中匹配出设备信息

缺点

Presto 能够处理 PB 级别的海量数据分析,但 Presto 并不是把 PB 级数据都放在内存中计算的

根据场景 (Court,AVG ) 等聚合运算,是边读数据边计算,再清内存,再读数据再计算,这种耗的内存并不高

连表查 , 会产生大量的临时数据,速度会变慢

Presto、Impala 性能比较

Impala 性能稍领先于 Presto

Presto 在数据源支持上非常丰富 ( Hive、图数据库、传统关系型数据库、Redis )

Presto优化之数据存储

合理设置分区

Presto 根据元数据信息读取分区数据,合理的分区能减少 Presto 数据读取量,提升查询性能

使用列式存储

Presto 对 ORC 文件读取做了特定优化,所以 Hive 中创建 Presto 使用的表时,建议采用 ORC 格式存储。相对于 Parquet,Presto 对 ORC 支持更好

使用压缩

数据压缩可以减少节点间数据传输对 IO 带宽压力,对于即席查询需要快速解压,建议采用 Snappy 压缩

Presto优化之查询SQL

只选择使用的字段

采用列式存储,选择需要的字段可加快字段的读取、减少数据量

避免采用 * 读取所有字段

好 :

SELECT time, user, host FROM tbl

坏 :

SELECT * FROM tbl

过滤条件必须加上分区字段

有分区的表,where 语句中优先使用分区字段进行过滤

acct_day : 分区字段
visit_time : 具体访问时间

好 :

SELECT time, user, host FROM tbl where acct_day = 20171101

坏 :

SELECT * FROM tbl where visit_time = 20171101

Group By 语句优化

Order by 时使用 Limit

使用Join语句时将大表放在左边

注意事项

Kylin