Presto核心设计

presto 核心设计

1 RESTFUL架构

在presto中几乎所有的操作都是依赖于AirLift构造的RESTful服务来完成的,包括worker节点的管理、查询语句的提交、查询状态的显示、各个task之间数据的传递等。因此presto中的RESTful服务是presto集群的基础。

presto中提供了四种类型的RESTful接口,分别是statement服务接口、query服务接口、stage服务接口、task服务接口

1.statement服务接口

与sql语句相关的请求均由该服务接口处理,包括接收提交的sql语句、获取查询执行结果的语句、取消查询语句等。statement服务接口的实现类为StatementResource。

2.query服务接口

与查询相关 的RESTful请求均由query服务接口处理,包裹sql语句的提交、获取查询执行的结果、取消查询等。query服务接口实现类为QueryResource。


Presto基础概念

Presto 基础概念

presto服务进程

presto服务器进程一共有两种服务器进程:coordinator服务进程和worker服务进程

coordinator服务进程主要作用是:接收查询请求、生成查询执行计划、任务调度和worker管理

worker服务进程则执行被分解后的查询执行计划:task。


SQL on Everything(Presto)

2019ICDE-Presto: SQL on Everything

本文发表于2019年,但是presto从2013年开始就有了,2019年原作者从Facebook分道扬镳。有关这段爱恨情仇可以在trino官网(presto主流继承版本)中看到。本文的作者是presto的原作者,发表于2019年,此时presto已经是比较成熟完善的系统了,学习的价值更大。

Abstract

Presto是分布式查询引擎,支持SQL负载。既能承担亚秒级别的交互式查询,也要能支持几小时的ETL任务。
主要特性是:灵活、自适应、扩展性强(支持多个外部源,包括HDFS、RDBMS、NoSQL、流处理系统)。

I. INTRODUCTION

Presto作为交互式的查询引擎,从2013年诞生开始,已经在Facebook以及世界上众多大公司使用,以满足端上用户交互式查询分析的需求。它主要有以下特性:

  • 多租户系统。要支持几百个查询并行;要有扩展性,能扩展到几千个节点去。
  • 集成性。管理员可以设置集群,让它可以兼容多个外部数据源,甚至在一条SQL里用多个数据源。
  • 灵活性。能应对各种工作负载。
  • 高度优化。多个query可以共享一个JVM运行,当然这就需要调度、资源管理、隔离等。

Presto架构

Presto架构

Presto是一个在一组机器上运行的分布式系统。 完整安装包括协调员和多个工作人员。 查询从客户端(Presto CLI、presto-jdbc)提交给协调器。 协调器解析, 分析和计划查询执行,然后将处理分发给worker工作进程。

presto硬件架构


Presto 主动Kill 机制

Presto 主动Kill 机制

背景:用户界面中,为了改善用户使用体验,移除了 查询时点击按钮的操作,变更为只要检测到查询条件的修改都会自动触发计算。而实际使用过程中,用户在最终条件确定前,所有条件变更导致的查询计算均是计算资源的浪费

目的:为了避免自动触发的计算导致Presto 计算资源的浪费

如图所示,左侧指标、细分维度、公共过滤条件以及 日期范围、日期粒度、人群的变化都会导致分析查询的调用

方案:


Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×