Presto知识点总结

Presto简介

是Facebook开源的,完全基于内存的并⾏计算,分布式SQL交互式查询引擎

Presto架构

Presto优缺点

优点:

1)Presto基于内存运算,减少了磁盘IO,计算更快;

2)能够连接多个数据源,跨数据源连表查;

缺点:

Presto 能够处理PB级别的海量数据分析,但 Presto并不是把PB级数据都放在内存中计算的。而是根据场景,如 Count,AVG等聚合运算,是边读数据边计算,再清内存,再读数据再计算,这种耗的内存并不高。但是连表查,就可能产生大量的临时数据,因此速度会变慢

Presto使用

Presto Server部署

配置coordinator节点、worker节点

Presto命令行Client部署

启动:./prestocli --server hadoop102:8881 --catalog hive --schema default

注意:

对接Hive时,如果表使用了parquet存储+lzo压缩,需要手动添加lzo的jar包;

如果表是纯lzo压缩,需要修改hadoop-lzo源码后再手动添加lzo的jar包;

Presto可视化Client部署

Presto优化

数据存储优化

(1)合理设置分区

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

(2)使用列式存储

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

(3)使用压缩

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

SQL查询优化

(1)只选择使用的字段

由于采用列式存储,选择需要的字段可加快字段的读取、减少数据量。避免采用*读取所有字段。

(2)过滤条件加上分区字段

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

(3)Group By语句优化

合理安排Group by语句中字段顺序对性能有一定提升。将Group By语句中字段按照每个字段distinct数据多少进行降序排列。

(4)Order by时使用Limit

Order by需要扫描数据到单个worker节点进行排序,导致单个worker需要大量内存。如果是查询Top N或者Bottom N,使用limit可减少排序计算和内存压力。

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

Presto中join的默认算法是broadcast join,即将join左边的表分割到多个worker,然后将join右边的表数据整个复制一份发送到每个worker进行计算。如果右边的表数据量太大,则可能会报内存溢出错误。

注意事项

(1)字段名引用

避免和关键字冲突:MySQL对字段加反引号`、Presto对字段加双引号分割

(2)时间函数

对于Timestamp,需要进行比较的时候,需要添加Timestamp关键字,而MySQL中对Timestamp可以直接进行比较。

(3)不支持INSERT OVERWRITE语法

Presto中不支持insert overwrite语法,只能先delete,然后insert into。

(4)PARQUET格式

Presto目前支持Parquet格式,支持查询,但不支持insert。

posted @ 2022-05-18 14:11  1243741754  阅读(585)  评论(0编辑  收藏  举报