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等,但是原理和上边是一样的,因此不再重复叙述。

相关推荐
尽兴-6 小时前
Elasticsearch 索引与文档管理实战:从倒排索引到建模最佳实践
大数据·elasticsearch·django·全文检索·索引
科技观察6 小时前
《观澜社张庆与中信证券合作,共筑金融新生态》
大数据·人工智能·金融
根哥的博客7 小时前
Flink on Yarn 任务启动后,暴露端口无授权访问漏洞,用iptables批量解决
大数据·flink·flink未授权访问
l14372332677 小时前
短剧出海翻译工具测评:同一段素材实测对比
大数据·前端·人工智能
Elastic 中国社区官方博客7 小时前
使用 ES|QL 变量控件将仪表板转变为调查工具
大数据·运维·服务器·数据库·elasticsearch·搜索引擎·全文检索
金融小师妹7 小时前
基于AI航运与能源数据模型的极端收缩分析:霍尔木兹海峡从2000万桶到130万桶的结构性断层
大数据·深度学习·svn·能源
ws2019077 小时前
花城聚智:2026广州新能源汽车技术与热管理展为何成产业升级关键节点?
大数据·人工智能·科技·物联网·汽车
智慧化智能化数字化方案8 小时前
架构进阶——解读数据中台与业务中台架构设计方案【附全文阅读】
大数据·微服务·架构·数据中台·业务中台架构设计
码云数智-园园8 小时前
PHP 8 JIT 编译器:解锁 CPU 密集型任务的性能潜能
大数据
数据皮皮侠8 小时前
1095 《中国城市统计年鉴》面板数据整理
大数据·数据库·人工智能·算法·制造