跳至主要內容

Presto

张启忻大约 3 分钟OLAP查询引擎

Presto 的一些概念

  1. Server Types 服务类型
  2. Datasources 数据源
  3. Query Execution Model 查询执行模型

Server Types 服务类型

在Presto中有三种服务类型:Resource Manager 资源管理器(非必须)Coordinators 协调器Workers 工作节点
Resource Manager: 它是从 Coordinators 和 Workers 中聚合数据,管理分配资源的进程,非必须的。它与协调器、工作节点通讯采用 thrift API。
Coordinators: 解析查询语句,生成执行计划,以及管理 Workers 节点的进程,它是必须的,并且与 Worker 的对应关系是1对多。它与工作节点、客户端通讯采用 REST API。
Workers: 执行 task,处理数据,连接数据源从数据源中拉取数据,并且工作节点之间相互交换数据。它也是必须的,并且和协调器、工作节点之间通讯采用 REST API。

Datasources 数据源

在数据源概念中有四种东西是需要理解的:Connector 连接器CatalogSchemaTable
Connector: 连接器对应着各种各样的数据源,你如 mysql、Hive、Hudi 等,它采用 SPI 的方式,不同的数据源有不同的连接器插件。
Catalog: catalog包含了数据源连接器和模式,可以理解成一个连接好的数据源和下面的数据库。在使用时我们可以跨 catalog 查询,记得带上 catalog 名这个前缀。
Schema: schema在大多数情况下可以理解成数据库名字,它是一堆表的集合。
Table: 表的理解相信大家都不陌生。

Query Execution Model 查询执行模型

Presto 执行SQL,并转换成执行计划,然后让这些分布式的 Coordinators 和 Workers 去执行。
Statement: 在presto中statement仅简单的理解为一段要与数据库交互的SQL语句。(标准SQL中的statement理解为与数据交互的基本单位) Query: 区分statement,这里的Query理解为从数据SQL查询,解析生成分布式执行计划,然后执行返回结果这么一整个全过程,也就是说它包括了:Stage、task、split、connector和其它组件以及数据源返回的数据结果
Stage: stage是一个抽象的概念,presto通过把执行计划建模成多层次的阶段,然后在执行时候对个层次分别处理。比如在root根stage中做数据的聚合。
Task: 执行计划被划分成多层Stage模型,但并不是具体的执行,具体执行是由workers节点去执行一个个的 task 任务。 Split: 在数据层面,presto把大规模数据进行分段split,这类似于大数据存储/计算中的分区的概念。
driver: presto的driver(驱动程序)是最低的并行性级别,怎么理解呢?可以理解成一系列操作符的实例,它包含了数据的输入和输出,在Query中的不同stage都有一个driver,每个Driver负责数据的处理、联合、聚合然后传递到另一阶段去处理。
Operator: 操作符是逻辑执行计划中的一个个节点,用来消费、转换、生产数据。
Exchange: 不同stage之间传输数据。