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 命令行 CLI 提交到 Coordinator
- Coordinator 解析查询计划 , 把任务分发给 Worket 执行
- Worker 负责执行任务和处理数据
- Catolog : 数据源 。一个 Catelog : Schema 和 Connetor
- Connector : 适配器。用于 Presto 和数据源 (Hive , Redis) 的连接 , 类似于JDBC
- Schema 类似于 Mysql 的数据库 , Table 类似于 Mysql的表
- Coordinator : 负责从 Worker 获取结果并返回最终结果给 Client
优缺点
优点
- 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