Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Presto介绍与常用查询优化方法

Presto介绍与常用查询优化方法

作者头像
高广超
发布于 2018-12-12 02:36:39
发布于 2018-12-12 02:36:39
3.5K0
举报
文章被收录于专栏:互联网技术栈互联网技术栈

Presto

Hive使用MapReduce作为底层计算框架,是专为批处理设计的。但随着数据越来越多,使用Hive进行一个简单的数据查询可能要花费几分到几小时,显然不能满足交互式查询的需求。

2012年秋季开始开发,目前该项目已经在超过 1000名Facebook雇员中使用,运行超过30000个查询,每日数据在1PB级别。Facebook称Presto的性能比Hive要好上10倍多。2013年Facebook正式宣布开源Presto。

Presto架构

image.png

Presto查询引擎是一个Master-Slave的架构,由一个Coordinator节点,一个Discovery Server节点,多个Worker节点组成,Discovery Server通常内嵌于Coordinator节点中。

Coordinator负责解析SQL语句,生成执行计划,分发执行任务给Worker节点执行。

Worker节点负责实际执行查询任务。Worker节点启动后向Discovery Server服务注册,Coordinator从Discovery Server获得可以正常工作的Worker节点。

如果配置了Hive Connector,需要配置一个Hive MetaStore服务为Presto提供Hive元信息,Worker节点与HDFS交互读取数据。

Presto实现低延时查询的原理,我认为主要是下面几个关键点:

  1. 完全基于内存的并行计算
  2. 流水线
  3. 本地化计算
  4. 动态编译执行计划
  5. 小心使用内存和数据结构
  6. 类BlinkDB的近似查询
  7. GC控制

更多详情:https://blog.csdn.net/fly_time2012/article/details/52160140

Presto查询优化

数据存储

合理设置分区

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

使用列式存储

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

使用压缩

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

预先排序

对于已经排序的数据,在查询的数据过滤阶段,ORC格式支持跳过读取不必要的数据。比如对于经常需要过滤的字段可以预先排序。

SQL优化

  • 只选择使用必要的字段: 由于采用列式存储,选择需要的字段可加快字段的读取、减少数据量。避免采用*读取所有字段
  • 过滤条件必须加上分区字段
  • Group By语句优化: 合理安排Group by语句中字段顺序对性能有一定提升。将Group By语句中字段按照每个字段distinct数据多少进行降序排列, 减少GROUP BY语句后面的排序一句字段的数量能减少内存的使用.
  • Order by时使用Limit, 尽量避免ORDER BY: Order by需要扫描数据到单个worker节点进行排序,导致单个worker需要大量内存
  • 使用近似聚合函数: 对于允许有少量误差的查询场景,使用这些函数对查询性能有大幅提升。比如使用approx_distinct() 函数比Count(distinct x)有大概2.3%的误差
  • 用regexp_like代替多个like语句: Presto查询优化器没有对多个like语句进行优化,使用regexp_like对性能有较大提升
  • 使用Join语句时将大表放在左边: Presto中join的默认算法是broadcast join,即将join左边的表分割到多个worker,然后将join右边的表数据整个复制一份发送到每个worker进行计算。如果右边的表数据量太大,则可能会报内存溢出错误。
  • 使用Rank函数代替row_number函数来获取Top N
  • UNION ALL 代替 UNION :不用去重
  • 使用WITH语句: 查询语句非常复杂或者有多层嵌套的子查询,请试着用WITH语句将子查询分离出来

与Impala对比

Impala是Cloudera在受到Google的Dremel启发下开发的实时交互SQL大数据查询工具,Impala没有再使用缓慢的Hive+MapReduce批处理,而是通过使用与商用并行关系数据库中类似的分布式查询引擎。

Impala性能稍领先于presto,但是presto在数据源支持上非常丰富,presto对SQL的支持上也更多一些。同时由于版本迭代的问题,有一段时间Impala对 hadoop某些社区版本并不支持。


本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.10.10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Presto介绍及常用查询优化方法总结
Presto是Facebook开源的MPP(Massive Parallel Processing)SQL引擎,其理念来源于一个叫Volcano的并行数据库,该数据库提出了一个并行执行SQL的模型,它被设计为用来专门进行高速、实时的数据分析。
硬核林川
2021/05/09
2.8K0
Presto介绍及常用查询优化方法总结
从 0 到 1 学习 Presto,这一篇就够了
Presto 作为现在在企业中流行使用的即席查询框架,已经在不同的领域得到了越来越多的应用。本期内容,我会从一个初学者的角度,带着大家从 0 到 1 学习 Presto,希望大家能够有所收获!
大数据梦想家
2021/10/22
8.3K1
快速学习-Presto优化
1)合理设置分区 与Hive类似,Presto会根据元信息读取分区数据,合理的分区能减少Presto数据读取量,提升查询性能。 2)使用列式存储 Presto对ORC文件读取做了特定优化,因此在Hive中创建Presto使用的表时,建议采用ORC格式存储。相对于Parquet,Presto对ORC支持更好。 3)使用压缩 数据压缩可以减少节点间数据传输对IO带宽压力,对于即席查询需要快速解压,建议采用Snappy压缩。 4)预先排序 对于已经排序的数据,在查询的数据过滤阶段,ORC格式支持跳过读取不必要的数据。比如对于经常需要过滤的字段可以预先排序。
cwl_java
2020/03/24
1.9K0
大数据Presto(五):Presto优化与Impala对比
合理设置分区在读取数据时可以针对分区数据读取,可以减少Presto数据读取量,提升查询性能。
Lansonli
2022/11/26
1.7K1
大数据Presto(五):Presto优化与Impala对比
大数据Presto(一):Presto介绍
Presto是Facebook在2012年开发的,是专为Hadoop打造的一款数据仓库工具。在早期Facebook依赖Hive做数据分析,Hive底层依赖MapReduce,随着数据量越来越大,使用Hive进行数据分析,时间可能需要分钟级到小时级别,不能满足交互式查询的数据分析场景。2012年秋季,Facebook开发Presto,目前该项目在Facebook中运行超过30000个查询,每日处理数据PB以上。Presto的查询速度是Hive的5-10倍。
Lansonli
2022/10/07
2.3K0
大数据Presto(一):Presto介绍
Hive/HiveSQL常用优化方法全面总结
Hive作为大数据领域常用的数据仓库组件,在平时设计和查询时要特别注意效率。影响Hive效率的几乎从不是数据量过大,而是数据倾斜、数据冗余、job或I/O过多、MapReduce分配不合理等等。对Hive的调优既包含对HiveSQL语句本身的优化,也包含Hive配置项和MR方面的调整。
王知无-import_bigdata
2019/07/01
24.9K0
Hive/HiveSQL常用优化方法全面总结
快速学习-Presto简介
Presto是一个开源的分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节。 Presto的设计和编写完全是为了解决像Facebook这样规模的商业数据仓库的交互式分析和处理速度的问题。
cwl_java
2020/03/24
1.8K0
Presto原理&调优&面试&实战全面升级版
很久之前,曾经写过一篇 《Presto在大数据领域的实践和探索》 。文中详细讲解了Presto的原理和应用。
王知无-import_bigdata
2021/07/12
2.2K0
Presto原理&调优&面试&实战全面升级版
Presto系列 | Presto基本介绍
Presto是一款Facebook开源的MPP架构的OLAP查询引擎,可针对不同数据源执行大容量数据集的一款分布式SQL执行引擎。因为工作中接触到Presto,研究它对理解SQL Parser、常见算子的实现(如SQL中table scan,join,aggregation)、资源管理与调度、查询优化(如向量化执行、动态代码生成)、大数据下各个组件为何适用不同场景等等都有帮助。我希望通过这个系列可以了解一条SQL在大数据场景下该如何高效执行。233酱准备不定时持续更新这个系列,本文主要从Presto的使用举例,Presto的应用场景、Presto的基本概念三个部分来初步介绍Presto。
Monica2333
2020/09/24
4.4K0
Presto系列 | Presto基本介绍
大数据开发:分布式OLAP查询引擎Presto入门
在之前的《大数据开发:OLAP开源数据分析引擎简介》一文当中,我们对主流的一些开源数据分析查询引擎做了大致的介绍,今天的大数据开发分享,我们具体来讲解其中的Presto查询引擎,是什么,为什么会出现,又能够解决什么样的数据处理需求。
成都加米谷大数据
2021/01/19
1.4K0
大数据开发:分布式OLAP查询引擎Presto入门
Presto 在有赞的实践之路
本文主要介绍了 Presto 的简单原理,以及 Presto 在有赞的实践之路。
有赞coder
2020/08/24
9870
Presto 在有赞的实践之路
两种列式存储格式:Parquet和ORC
随着大数据时代的到来,越来越多的数据流向了Hadoop生态圈,同时对于能够快速的从TB甚至PB级别的数据中获取有价值的数据对于一个产品和公司来说更加重要,在Hadoop生态圈的快速发展过程中,涌现了一批开源的数据分析引擎,例如Hive、Spark SQL、Impala、Presto等,同时也产生了多个高性能的列式存储格式,例如RCFile、ORC、Parquet等,本文主要从实现的角度上对比分析ORC和Parquet两种典型的列存格式,并对它们做了相应的对比测试。
不吃西红柿
2022/07/29
6.9K0
两种列式存储格式:Parquet和ORC
hive优化总结
hive强大之处不要求数据转换成特定的格式,而是利用hadoop本身InputFormat API来从不同的数据源读取数据,同样地使用OutputFormat API将数据写成不同的格式。所以对于不同的数据源,或者写出不同的格式就需要不同的对应的InputFormat和OutputFormat类的实现。以stored as textFile为例,其在底层java API中表现是输入InputFormat格式:TextInputFormat以及输出OutputFormat格式:HiveIgnoreKeyTextOutputFormat。这里InputFormat中定义了如何对数据源文本进行读取划分,以及如何将切片分割成记录存入表中。而OutputFormat定义了如何将这些切片写回到文件里或者直接在控制台输出。
数字悠客
2020/05/27
1.8K0
即席查询引擎对比:我为什么选择Presto
即席查询AD-HOC :以单独的SQL语句的形式执行的查询就是即席查询,比如说:HUE里面输入SQL语句并获得结果或者使用dbeaver连接hiveserver2自己键入的SQL代码并获取结果,这样的操作就是即席查询。
deephub
2021/09/15
4K0
即席查询引擎对比:我为什么选择Presto
干货 | 携程Presto技术演进之路
作者简介 张巍,携程技术中心大数据资深研发工程师。2017年加入携程,在大数据平台部门从事基础框架的研发和运维,目前主要负责 Presto,Kylin,StructedStreaming 等大数据组建的运维,优化,设计及调研工作。对资源调度,OLAP引擎,存储引擎等大数据模块有浓厚的兴趣, 对 hdfs,yarn,presto,kylin,carbondata 等大数据组建有相关优化和改造经验。 一、背景介绍 携程作为中国在线旅游的龙头,提供酒店,机票,度假等服务,这些服务的背后是基于各个部门每天对海量数
携程技术
2018/07/05
3.4K0
Presto 分布式SQL查询引擎及原理分析
Presto是由 Facebook 推出的一个基于Java开发的开源分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节。Presto本身并不存储数据,但是可以接入多种数据源,并且支持跨数据源的级联查询。
yuanyi928
2020/05/20
4.8K0
大数据面试:面试官要求我了解过Presto——Presto到底是个什么东西
城市匹配 技能匹配 福利匹配 还是一家游戏公司 (典型的钱多离家近,事估计少不了了 ) 三配下来我不得不认真研究该公司的职位要求:
Maynor
2021/08/10
1.1K0
Presto架构原理与优化介绍 | 青训营笔记
关于大数据概念,这里参考马丁·希尔伯特的总结:大数据其实是在2000年后,因为信息化的快速发展。信息交换、信息存储、信息处理三个方面能力的大幅增长而产生的数据。
鳄鱼儿
2024/05/21
2020
Presto架构原理与优化介绍 | 青训营笔记
Presto实战
Presto是一个开源的分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节。
全栈程序员站长
2022/09/20
2K0
快速学习-Presto上使用SQL遇到的坑
很多的时候,在Presto上对数据库跨库查询,例如Mysql数据库。这个时候Presto的做法是从MySQL数据库端拉取最基本的数据,然后再去做进一步的处理,例如统计等聚合操作。
cwl_java
2020/03/24
4.4K1
相关推荐
Presto介绍及常用查询优化方法总结
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档