Presto 是一个运行在多台服务器上的分布式系统。完整安装包括一个
Coordinator
和多 个
Worker
。由
客户端
提交查询,从 Presto 命令行 CLI 提交到 Coordinator。Coordinator 进行 解析,分析并执行查询计划,然后分发处理队列到 Worker
presto中的组件:
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交互读取数据
(1)Coordinator:
负责接收来自用户的查询语句,解析这些语句,安排执行计划,并且管理worker节点.
Coordinator会跟踪每个worker的活动,并安排查询的执行,一旦接受到SQL查询,Coordinator就会负责parsing,analyzing,planning这个查询。
(2)Discovery Service
presto通过Discovery Service发现集群中的所有节点,worker启动的时候就会像Discovery Service注册,并且定时发送心跳信号
(3)worker
worker负责执行Coordinator分配给他的Tasks并且处理数据
sql的执行过程:
SQL以文本的形式被提交到Coordinator之后,Coordinator获取该文本并对其进行解析
和分析, 然后,它通过使用Presto中称为
Query Plan
的内部数据结构创建执行计划
执行流程:
(1)由客户端提交sql查询,通过presto cli提交到coordinator
(2)coordinator解析查询计划,然后把任务分发给worker
(3)worker来负责执行任务和处理数据
(4) 一个 Catalog 包含 Schema 和 Connector
Connector类似于JDBC,用于Presto和数据源的连接
Schema类似于MySQL中的数据库,Schema 是用于组织 table。把 catelog 和 schema 结合在一起来包含一组的表
Presto 处理 table 时,是通过表的
完全限定(fully-qualified)名
来找到 catalog。例如, 一个表的权限定名是
hive.test_presto.test
,则
test
是表名,
test_presto
是 schema,
hive
是 catalog,属于三层结构
每个Catalog配置使用一个Connector来访问一个特定的数据源,
Presto的Catalog相当于我们经常说的mysql实例
这个Catalog的数据源会对外暴露一个或多个Schema
每一个Schema包含一些Table,这些表以Row的方式提供数据,每一个Row中包含
多个不同数据类型的Column。
Connector-based架构
:
Presto的存储与计算分离的核心在于Connector为基础的架构。Connector为Presto 提供了一个可以访问任意数据源的接口
Presto中的执行计划使
用Metadata SPI用于获取关于表、列和类型的信息,Data Statistics SPI用于获取关于行数和表大小的信息,以便在计划期间执行基于成本(cost-based)的查询优化, Data Location SPI来收集关于数据源的表等元数据信息,它可以生成关于表内容的逻辑Splits。Splits是工作分配和并行化的最小单位。
也可参考官方网站进行学习,
https://prestodb.io/
和
https://trino.io/
Presto优点
特点 |
说明 |
多数据源 |
支持MySQL/PostgreSQL/Cassandra/Hive/Kafka等 |
支持sql |
完全支持ANSI SQL,提供SQL Shell,也支持JDBC/ODBC |
扩展性 |
connector机制,很容易扩展开发自定义connector对接特定数据源 |
混合计算 |
针对一种类型的connector配置一个或多个catalog,支持混合多个 catalog进行join查询计算 |
高性能 |
充分利用内存,平均性能是Hive的10倍以上,秒级/毫秒级响应 |
流水线 |
Pipeline设计,数据像自来水管道一样,一旦开始计算,数据就立即产生 呈现到终端直到结束 |
Presto的安装本人是通过dorker的方式进行测试的,主要是体验实践一下,大体的sql基本与MySQL或者hive类似。
dorker和presto的安装
部分图片来自于自己买的极客时间的大数据训练营的老师PPT上的图片
欢迎大家提出问题,一起学习进步。