Presto 之Pipeline

一. 前言

我们知道在Presto中有个叫Pipeline的概念,Pipeline其实就是一条包含各个算子的流水线,如下所示。本文主要介绍在Presto中,Pipeline是如何划分的。

二. Pipeline

在Presto中,一个Stage中包括一个或者多个Pipeline,一个Pipeline中包括多个Driver,数据在同一个Pipeline的内部Driver间数据交换不需要经过网络,在pipeline与pipeline之间也只经过内存Exchange在本地进行数据交换即可。

三. Pipeline切分

Pipeline的管理都在LocalExecutionPlanner类中实现的,在Stage在生成Driver的时候,是否要切分成多个Pipeline时,主要遵循如下几个原则:

  1. 每个Stage至少有有1条Pipeline去执行,主要代码流程如下所示:

    LocalExecutionPlanner::plan
    PhysicalOperation physicalOperation = plan.accept
    context.addDriverFactory // Stage的主pipeline

因为每个Stage都会调用LocalExecutionPlanner::plan生成Operator算子,因此可以保证每个Stage至少有一个pipeline来执行。

  1. 对于Exchange算子时增加一条Pipeline对Source进行并行处理。

    LocalExecutionPlanner::plan
    PhysicalOperation physicalOperation = plan.accept
    ​ visitExchange
    ​ createLocalExchange
    ​ context.addDriverFactory // 对于exchange的source plan,新增一条pipeline处理

  2. 在处理Join算子时增加单独一条Pipeline执行Hash表的创建处理。

    LocalExecutionPlanner::plan
    PhysicalOperation physicalOperation = plan.accept
    ​ visitJoin
    ​ createLookupJoin
    ​ createLookupSourceFactory
    ​ context.addDriverFactory // 对于Hash表的构建,新产生一个pipeline处理

  3. 此外, 还有其他的一些算子也会切分pipeline,比如semi join等,但是原理和上边是一样的,因此不再重复叙述。

相关推荐
不辉放弃9 分钟前
Flink/Kafka在python中的用处
大数据·python
薇晶晶17 分钟前
虚拟机安装linux系统无法上网的解决方法
大数据
阿里云大数据AI技术2 小时前
高效向量检索实践:阿里云百炼生成+Milvus存储技术方案解析
大数据·数据分析·云计算
Jing_saveSlave3 小时前
Kafka Stream从入门到精通:构建高吞吐、低延迟的实时流处理应用
大数据·分布式·kafka·linq
尘世壹俗人3 小时前
presto任务优化参数
大数据
lilye663 小时前
程序化广告行业(44/89):岗位职责与RTB竞价逻辑深度解析
大数据·elasticsearch·flask·memcache
镜舟科技4 小时前
镜舟科技荣膺“北京市用户满意企业”认证,以用户为中心驱动高质量发展
大数据·科技·lakehouse·创新·镜舟科技
b***25114 小时前
磷酸铁锂电池自动分选机:新能源产业的智能新宠
大数据·人工智能
宝哥大数据4 小时前
flink 基站与服务器长连接,每次连接和断开都会上报数据,统计过去一小时每个基站断开次数和时长
大数据·服务器·flink
Arbori_262156 小时前
Spark 程序的本地模式和集群模式
大数据·分布式·spark