Presto 架构

2016/09/29 Presto

Presto Server

  • Coordinator
    担当 Master 角色,负责解析 SQL,生成查询计划,提交查询任务给 Worker 执行,管理 Worker 节点。
  • Worker
    执行任务和处理数据

Data Source

  • Connector
    Connector 是一个适配连接器,Presto 使用 Connector 去连接不同的数据源,比如 Hive 、关系型数据库等。可以通过实现自己的 Connector 去扩展数据源。

  • Catalog
    Catalog 多个 schema 的集合,表示通过 connector 获取的一种数据源,你可以使用 hive connector 的多个 catalog 来代表不同的 hive 集群数据源。常见的 catalog 为:mysql catalog,hive catalog 等

  • Schema
    表的集合,类似于 Hive、MySQL 中的 database。

  • Table
    类似于Hive中的table

查询 catalog 为 hive,数据库为 test,表为 table1 的语句为

select count(*) from hive.test.table1

Query Model

  • Statement
    表示一个 SQL 查询语句

  • Query
    表示 Statement 经过解析,生成的执行计划,查询计划。在 Presto 集群中运行的查询, 一个 Query 由多个 Stage 组成、Task、Driver、Split、Operator 和 Datasource 组成。

  • Stage
    查询执行阶段,一个 Query 会被拆分成具有层级关系的多个 Stage 执行,一个 Stage 就是查询执行计划的一部分。 四种stage:
    • Coordinator_Only:一般表示 DDL,DML 的 Stage。
    • Single:用于聚合子 stages 数据,并最终将数据输出给终端用户。比如每个查询中的 Root Stage。
    • Fixed:用于接收子 Stage 产生的数据,并在集群中对这些数据进行聚合或分组计算。
    • Source:连接数据源,从数据源读取数据。
  • Exchange
    连接不同的 Stage,用于不同 Stage 之间的数据交互
    • Output Buffer:向下游提供数据,数据提供者
    • Exchange Client:从上游读取数据,数据消费者
  • Task
    Stage 有多个 Task 组成。Stage 并不会运行,只是负责管理 Task 和封装建模。Stage 实际运行的是 Task。每个Task 处理一个或者多个 Split。每个 Task 都有对应的输入和输出。

  • Driver
    Task 被分解成一个或者多个 Driver,并行执行多个 Driver 的方式来实现 Task 的并发执行。Driver 是作用于一个 Split 的一系列 Operator 的集合。一个 Driver 处理一个 Split,产生输出由 Task 收集并传递给下游的 Stage 中的一个 Task。一个 Driver 拥有一个输入和输出。
  • Operator
    Operator 表示对一个 Split 的一种操作。比如过滤、转换等。 一个 Operator 一次读取一个 Split 的数据,将 Operator 所表示的计算、操作作用于 Split 的数据上,产生输出。每个 Operator 会以 Page 为最小处理单位分别读取输入数据和产生输出数据。Operator 每次只读取一个 Page,输出产生一个 Page

  • Split
    一个分片表示大的数据集合中的一个小子集,与 MapReduce 中的 Split 概念类似。

  • Page
    Presto 中处理的最小数据单元。一个 Page 对象包括多个 Block 对象,而每个 Block 对象是一个字节数组,存储一个字段的若干行。多个 Block 的横切的一行表示真实的一行数据。一个 Page 最大1MB,最多1 6x1024 行数据。

Search

    Post Directory