节点类型
Presto中有两种节点:coordinators和workers。
Coordinator
coordinator负责解析语句、规划查询、管理worker节点。其是Presto的大脑,也是client连接并提交语句的地方。每个Presto集群必须包含一个coordinator以及一个或多个worker。如果是开发或测试目的,一个节点可以同时配置为coordinator何worker。
coordinator先为查询创建logic model,涉及一系列stage,然后将这些stage转换为在Presto workers集群上运行的一系列tasks。
coordinator使用Rest API与worker和client进行交互。
Worker
worker负责执行task和处理数据。worker节点从connectors中拉取数据,并互相交换中间数据。coordinator负责拉取结果,并将其返回给client。
数据源
Connector
connector使得Presto可以连接到Hive或关系型数据库。
Presto内嵌了很多connector,比如hive connector或用于TPC-H的TPCH connector。
每个catalog都与特定的connector相关联。在catalog的配置文件中,有一个强制属性:connect.name,用于为给定的catalog创建connector。
可能会有多个catalog使用相同的connector连接到不同的数据库实例。比如有两个hive集群,可以配置两个catalog,使用hive connector分别连接。
Catalog
Catalog包含schemas,且是一个包含connector的数据源。
Schema
Schema是一种组织表的方式。catalog和schema一起定义了一组可以查询的表。
Table
与关系数据库中的表概念相同。从源表到table的映射由connector确定。
Query Execution Model
Statement
Statement是ANSI兼容的。其包含子句、表达式、以及谓语。
在Presto中,Statement只是SQL的文本表示。当一条statement被执行时,Presto创建一个query和一个query plan,然后将其分布到一系列worker中。
Query
当Presto解析一条statement时,会生成一个query以及其对应的分布式的query plan,然后将该query plan实现为一系列相互关联的stage,在workers上运行。
Stage
当Presto运行一个query,它会将其分解为stage的层次结构。例如,如果Presto需要聚合存储在Hive中的十亿行数据,它会创建一个root stage来聚合其他几个stage的输出,所有这些stage都是为了实现分布式查询计划的不同部分。
组成query的stage的层级结构类似一棵树。每个query都有一个root stage,用于聚合其他stage的结果。stage是coordinator用来对分布式查询计划建模的,其本身不运行在worker上。
Task
Stage会被实现为一系列tasks分布在Presto集群上。
一个task具有inputs和outputs,正如一个stage可以以一系列task并行执行,一个task也可以被一系列drivers并行执行。
Split
task运行在Splits上,Split是一个大数据集分割而成的。分布式查询计划的最底层的stage通过connector的split来检索数据,分较高层的中层stage则从其他stage检索数据。
Driver
task包含一个或多个并行的driver。driver根据数据进行操作,组合操作符来产生输出,然后由一个task聚合, 然后在另一个stage交付给另一个task。
一个driver是操作符实例的序列,也可以把driver看作内存中操作符的物理集合。
它是Presto架构中最低级别的并行。driver有一个input和一个output。
Operator
operator用来对数据进行消费、转换和产出。
Exchange
exchange为query的不同stage在Presto节点之间传输数据。
task将数据输出到缓冲区中,并使用exchange client消费其他task的数据。
网友评论