Presto- 基本概念

370 阅读3分钟

1.概念

要想用好、深入了解Presto,必须先了解Presto中存在的概念,本章将介绍Presto中存在的重要概念;以帮助同学在接下来更好理解Presto中其他代码逻辑;

2. Presto中节点类型

2.1 Coordinator节点

Presto中的Coordinator节点负责解析查询语句、生成查询计划并调度Presto的Worker节点;Coordinator和Worker节点之间通过http协议的restful接口通信,使用框架airlift;

这里通过阅读代码,后面可以知道Coordinator节点生成的带有分区信息逻辑计划,生成物理计划阶段在Worker节点;这一点与Spark SQL不同,Spark SQL是在Driver端已经生成了完全可以执行RDD转换的Job,可以理解为物理执行计划;

2.2 Worker 节点

Worker节点负责计算处理数据,Worker之间会传递交换数据;最终Coordinator节点负责从Worker节点拉去计算好的结果,并最终返回到client端;Presto自己实现了服务发现机制,保证服务端Worker节点可以被Coordinator节点发现并且使用

3. 数据源

3.1 Connector

Connector用于Presto向存储系统加载数据,可以类比连接驱动;Connector通过SPI加载,在启动的时候将以插件的方式注册到 ConnectorManager;在Presto内置有多种Connector,比如Hive Connector,Jdbc Connector;每一个Catalog 都会与一个Connector绑定,配置文件中 connector.name便是connector对应于catalog的name;

3.2 catalog

对应数据库实例,在 $PRESTO_HOME/etc ​/catalog/example.properties的文件中进行配置,

3.3 schema

schema是一种组织表的形式,定义了一组可以被查询的table集合;对应于连接数据源的 dababase 概念;

3.4 table

对应于连接数据源的指定database的table

4. 执行查询模型中的概念

4.1 Statment

在Presto中Statment特指查询的SQL语句(该SQL语句没有被解析成表达式和执行计划)

4.2 Query

Statment 解析后变成生成分布式执行计划,然后将被调度到Worker执行;Query是为了执行Statment而生成的一系列配置项和组件;Query包含 stage,task,split;

4.3 Stage

查询阶段:为了查询出一个Statment,需要将查询解析为分布式执行计划,类似一棵树;每一个查询Query都会对应的生成output Stage负责聚合搜集其他Stage的输出,最终output Stage将结果输出到Coordinator返回给client端; Stage是一个逻辑的概念,用于分拆建模一个Query;

4.4 Exchange

ExChange是为Stage与Stage间传递数据衍生出来的概念;Source Stage写入Output Buffer;然后下游Stage通过 exchange client 拉去数据;

4.5 Task

Stage 代表的分布式查询计划中的一环,但是Stage本身无法运行在Worker上,Stage当到了worker上后,需要将其转化成 Task集合进行运行;stage和由多个Task并行执行,同时使用很多Driver

4.6 Split

任务是在全量数据集的一个分段上执行,即Split上执行。第一个Stage从Connector中读取Split,之后的Stage会从前面的的Stage中获取数据;Worker读取数据时,Coordinator会跟踪那台机器跑那些任务,并且记录任务和Split之间的对应关系;

4.7 Driver

Task 包含一个或多个Drvier,Driver在数据上执行并且结合算子生成输出,输出会由一个Task 整合 Aggregation并传递到另外一个Stage的Task; Driver也可以任务是Operator的集合,在Presto架构中Driver是最低的并行度,Driver有一个Input和Output;

4.8 Operator

Operator 代表一种具体的操作,包括消费,转换,生成数据。比如Table Scan Operator可以根据Connector生产数据,Filter Operator可以消费其他算子生成的数据;