Presto 架构原理 | 青训营笔记

91 阅读2分钟

image.png

这是我参与「第四届青训营 」笔记创作活动的的第9天
[第四届青训营笔记创作活动]


一、介绍

Presto 是 Facebook 推出的一个基于Java开发的大数据分布式 SQL 查询引擎,可对从 GB 到 PB 级的大数据进行交互式的查询,查询的速度达到商业数据仓库的级别,据称该引擎的性能是 Hive 的 10 倍以上。Presto 可以查询包括 Hive、Cassandra 甚至是一些商业的数据存储产品,单个 Presto 查询可合并来自多个数据源的数据进行统一分析。 Presto的架构实际上就是一套分布式的SQL执行架构,它最大的特点就是天然就是存储计算分离,Presto只负责计算,存储的部分由数据源自身提供,这种存储与计算分离的架构也非常符合当今云计算发展的趋势。

二、架构原理

Presto 的架构图如下:
image.png

1. 节点角色

  • coordinator
    主要有以下几个功能:

    • 解析 SQL 语句
    • 生成执行任务
    • 分发执行任务给 Worker 节点
  • Worker
    主要有以下几个功能:

    • 执行 Task 处理数据
    • 与其它 Worker 交互传输数据
  • Connector
    一个 Connector 就代表了一种数据源。可以认为 Connector 是由 Presto 提供的适配多数据源的统一接口。可以说,通过借助 Connector 机制,Presto可以将来自一切数据源的数据计算SQL化,实现多数据源关联分析(联邦查询)

2. 执行流程

当一个 SQL Query 进入到 Presto 系统中,分别完成了以下几个关键步骤,最终将结果输出:

  • 接收 SQL Query 请求
  • SQL 解析、语义分析(生成 AST )
  • 生成执行计划、优化执行计划
  • 划分 Stage、生成和调度 Task
  • 在 Worker 上执行 Task
  • 分批返回 Query 结果给客户端

三、核心组件

  1. Discovery Service(服务发现)

    • Worker 配置文件配置 Discovery Service 地址
    • Worker 节点启动后会向 Discovery Service 注册
    • Coordinator 从 Discovery Service 获取 Worker 的地址
  2. 通信机制
    Presto 中各组件之间有以下几种通信方式:

    • Presto Client / JDBC Client 与 Server 之间:Http
    • Coordinator 与 Worker 之间:Thrift / Http
    • Worker 与 Worker 之间:Thrift / Http