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节点。如果配置了HiveConnector,需要配置一个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,属于三层结构
Connector-based架构:
特点 | 说明 |
多数据源
| 支持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上的图片
欢迎大家提出问题,一起学习进步。