这是我参加「第四届青训营 」笔记创作活动的第6天
-
服务相关
- Coordinator
- 解析SQL语句
- 生成执行计划
- 分发执行任务给worker节点
- Worker
- 执行Task处理数据
- 与其他worker交互传输数据(shuffle)
- Coordinator
-
数据源相关
- Connector
- 一个Connector代表一种数据源。可以认为Connectoor是由Presto提供的适配多数据源的统一接口
- Catalog
- 管理元信息与实际数据的映射关系。Catalog 对应某一类数据源,例如hive的数据,或mysql的数据。当你访问Catalog中某个表时,该表的全名总是以Catalog的名字开始。例如 名字为
example.schema1.table1
的表,指的是表table1
位于名schema1
下的schema中,而schema1
又位于example
的Catalog中 - Schema 对应mysql中的数据库
- Table 对应mysql中的表
- 管理元信息与实际数据的映射关系。Catalog 对应某一类数据源,例如hive的数据,或mysql的数据。当你访问Catalog中某个表时,该表的全名总是以Catalog的名字开始。例如 名字为
- Connector
-
Query相关
- Query:执行SQL parser后得到的执行计划
- stage:根据是否需要shuffle将Query拆分成不同的subplan,每一个subplan就是一个stage
- Stage即查询执行阶段。当Presto运行Query时,Presto会将一个Query拆分成具有层级关系的多个Stage,一个Stage就代表查询执计划的一部分。例如,当我们执行一个查询,从Hive的一张具有1亿条记录的表中查询数据并进行聚合操作时,Presto会创建一个Root Stage,该Stage聚合其上游Stage的输出数据,然后将结果输出给Coordinator,并由Coordinator将结果输出给终端用户。
- 需要注意的是,Stage并不会在集群中实际执行,它只是Coordinator用于对查询计划进行管理和建模的逻辑概念
- Fragment:等价于stage
- Task
- 单个worker节点上的最小资源管理单元:
- Stage在逻辑上又被分为一系列的Task,这些Task则是需要实际运行在Presto的各个Worker节点上的
- 在Presto集群中,一个查询执行被分解成具有层次关系的一系列的Stage,一个Stage又被拆分为一系列的Task。每个Task处理一个或者多个Split。每个Task都有对应的输入和输入。一个Stage被分解为多个Task,从而可以并行地执行一个Stage。
- Pipline:stage按照LocalExchange切分为若干Operator集合
- Driver:Pipline的可执行实体
- 一个Task包含一个或者多个Driver。一个Driver其实就是作用于一个Split的一系列Operator的集合。因此一个Driver用于处理一个Split,并且生成相应的输出,这些输出由Task收集并且传送给下游Stage中的Task。一个Driver拥有一个输入和一个输出。
- Split
- 数量上与Driver一一对应
- Split即分片,一个分片其实就是一个大的数据集中的一个小的子集。而Driver则是作用于一个分片上的一系列操作的集合。而每个节点上运行的Task,又包含多个Driver,从而一个Task可以处理多个Split。
- Operator:最小的物理算子
- 一个Operator代表对一个Spit的一种操作,例如过滤、加权、转换等。一个Operator依次读取一个Split中的数据,将Operator所代表的计算和操作作用于Split的数据上,并产生输出。每个Operator均会以Page为最小处理单元分别读取输入数据和产生输出数据。Operator每次只会读取一个Page对象,相应地,每次也只会产生一个Page对象。
-
数据传输相关
- Exchange:表示不同stage间的数据传输,大多数意义下等价于shuffle
- LocalExchange:Stage内的rehash操作,常用于提高并行处理数据的能力(Task在Presto中只是最小的容器,而不是最小的执行单元,Driver才是)