Presto入门概念基础

Presto是一个分布式SQL查询引擎,适用于交互式分析查询,数据量支持PB到GB字节,不具备存储功能,可以接入多种数据源,并支持跨数据源的数据查询计算

特点:

查询速度快,可以快速给出结果

内存需求大,计算成本高

给予其他组件之上进行快速运算

替代Hive、MapReduce,擅长OLAP

优点:

1.Presto与Hive相比,都能够处理PB级别的海量数据分析,但Presto是基于内存计算,减少没必要的硬盘IO,所以更快

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

3.部署比Hive简单,因为Hive是基于HDFS的,需要部署HDFS

缺点:

1.虽然能够处理PB几倍的海量数据分析,但不代表Presto能把PB级别的数据都放在内存中计算,而是根据场景,如count,avg等聚合运算,是边读数据变计算,在清除内存,在读数据在计算,这种消耗的内存并不高,但是连表查询可能就产生大量的临时数据,因此速度会变慢,反而Hive会更适合

2.为了到达实时查询,可能会想到用它直连MySql来操作查询,这种效率并不会提升,瓶颈依然在Mysql,此时还引入了网络瓶颈,所以会比原来操作数据要慢

Presto优化:

数据存储:

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

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

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

SQL优化:

1.子查询,只选择需要的字段

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

2.查询加上分区字段

对于有分区的表,where语句优先使用分区字段进行过滤。acc_day是分区字段,visit_time是具体访问时间

3.GroupBy语句优化

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

4.orderby时使用limit

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

5.join时将大表放在左边

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据界一个小小的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值