Presto 从提交SQL到获取结果 源码详解(3)

news2025/1/20 1:50:19

物理执行计划

回到SqlQueryExecution.startExecution() ,执行计划划分以后,

 // 初始化连接,获取Connect 元数据,添加会话,初始ConnectId

metadata.beginQuery(getSession(), plan.getConnectors());

// 构建物理执行计划

// plan distribution of query

planDistribution(plan);

//检测Query Split 情况及自身状态

// 创建OutputBuffers

createInitialEmptyOutputBuffers

// 创建调度器,内部通过 QueryStateMachine 存放调度状态,递归创建Stages

createSqlQueryScheduler

createStages()

createStreamingLinkedStages()

//提交调度任务至缓存

queryScheduler.set(scheduler);

// if query is not finished, start the scheduler, otherwise cancel it 开始执行
SqlQueryScheduler scheduler = queryScheduler.get();
if (!stateMachine.isDone()) {
    scheduler.start();
}

// 调度发起,生成并调度物理执行计划树

SqlQueryScheduler.schedule(Collection<SqlStageExecution> stages)

构造stage:

Fragment内部有Partition概念,根据 PartitionHandle类型,选择策略,确定split和task的调度方式
    PartitionHandle 分成两类
        一种是引擎Connector的分区策略
            例如:Hive查询遇到bucket表Scan操作,Presto会使用HivePartitioningHandle获取到具体bucket数量,依次来确认调度分区NodePartitionMap
        一种是Presto内置的分区策略
            在Connector不提供Handle情况下,默认初始化SystemPartitioningHandle,组装成PartitioningHandle
            例如:对于非Partition表,系统封装成SOURCE_DISTRIBUTION 读取。
    Partition 策略:
        SOURCE_DISTRIBUTION、SCALED_WRITER_DISTRIBUTION、SINGLE_DISTRIBUTION等

读取数据:
    有splitSource,非partition表:
        非桶表:分发执行
        桶表:根据桶数创建单独task
    有splitSource,bucket 表,RemoteSourceNode指向子Stage:
        if 子Stage的ExchangeType是replicate:
            上游数据复制到下游
        else:
            //即repartition 或 gather
            上游数据根据分区策略,交付给对应分区即可。
    没有splitSource的stage:
        不存在Split的调度,只存在Task的调度。

对于非bucket表,在planFragment 阶段Stage的partitioning就被定义为 SOURCE_DISTRIBUTION,意味着split均匀分配给所有节点,
        SOURCE_DISTRIBUTION 需逐个节点调度分配,检查当前机器是否存在task,创建并执行该split(优化:逐个节点调优于逐个split调度)


Split放置、分配策略:
    1.将所有可远程访问且没有地址信息的split进行worker分配。(所有Worker中,选择已调度split最小且总和小于机器单节点split的节点进行分发)
    2.未分配的split(split地址不可访问或所有节点均达到最大限制):
        2.1 地址不可访问:将split分配到自身的Ip地址上去
        2.2 可访问,尝试为该节点重新随机选择节点(不再考虑节点的worker上运行的split是否已经超过限制)/* 可能会抛出单节点split异常,负载过大*/

摘抄出处:Presto(Trino)分布式(物理)执行计划的生成和调度_presto fixedsourcepartitionedscheduler-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1719617.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于MD5

首先还是介绍一下关于md5的基本信息&#xff1a; MD5&#xff08;Message Digest Algorithm 5&#xff09;是一种常用的哈希函数&#xff0c;用于产生128位&#xff08;16字节&#xff09;的哈希值&#xff0c;通常以32个十六进制数字表示。MD5广泛用于计算文件或文本数据的校…

LeetCode-131 分割回文串

LeetCode-131 分割回文串 题目描述解题思路C 代码 题目描述 给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是 回文串。返回 s 所有可能的分割方案。 示例 1&#xff1a; 输入&#xff1a;s “aab” 输出&#xff1a;[[“a”,“a”,“b”],…

Zynq学习笔记--AXI4-Stream 图像数据从仿真输出到图像文件

目录 1. 简介 2. 构建工程 2.1 Vivado 工程 2.2 TestBench 代码 2.3 关键代码分析 3. VPG Background Pattern ID (0x0020) Register 4. 总结 1. 简介 使用 SystemVerilog 将 AXI4-Stream 图像数据从仿真输出到图像文件 (PPM)。 用到的函数包括 $fopen、$fwrite 和 $f…

vmware esxi虚拟化数据迁移

1、启用esxi的ssh 登录esxi的web界面&#xff0c;选择主机-》操作——》服务——》启动ssh 2.xshell登录esxi 3、找到虚拟机所在目录 blog.csdnimg.cn/direct/d57372536a4145f2bcc1189d02cc7da8.png)#### 3在传输数据前需关闭防火墙服务 查看防火墙状态&#xff1a;esxcli …

Android MediaCodec 简明教程(九):使用 MediaCodec 解码到纹理,使用 OpenGL ES 进行处理,并编码为 MP4 文件

系列文章目录 Android MediaCodec 简明教程&#xff08;一&#xff09;&#xff1a;使用 MediaCodecList 查询 Codec 信息&#xff0c;并创建 MediaCodec 编解码器Android MediaCodec 简明教程&#xff08;二&#xff09;&#xff1a;使用 MediaCodecInfo.CodecCapabilities 查…

【传知代码】双深度学习模型实现结直肠癌检测(论文复现)

前言&#xff1a;在医学领域&#xff0c;科技的进步一直是改变人类生活的关键驱动力之一。随着深度学习技术的不断发展&#xff0c;其在医学影像诊断领域的应用正日益受到关注。结直肠癌是一种常见但危害极大的恶性肿瘤&#xff0c;在早期发现和及时治疗方面具有重要意义。然而…

【VSCode】快捷方式log去掉分号

文章目录 一、引入二、解决办法 一、引入 我们使用 log 快速生成的 console.log() 都是带分号的 但是我们的编程习惯都是不带分号&#xff0c;每次自动生成后还需要手动删掉分号&#xff0c;太麻烦了&#xff01; 那有没有办法能够生成的时候就不带分号呢&#xff1f;自然是有…

C++ 特殊运算符

一 赋值运算符 二 等号作用 三 优先级和结合顺序 四 左值和右值 五 字节数运算符 条件运算符 使用条件运算符注意 逗号运算符 优先级和结合顺序 总结

如何修改开源项目中发现的bug?

如何修改开源项目中发现的bug&#xff1f; 目录 如何修改开源项目中发现的bug&#xff1f;第一步&#xff1a;找到开源项目并建立分支第二步&#xff1a;克隆分支到本地仓库第三步&#xff1a;在本地对项目进行修改第四步&#xff1a;依次使用命令行进行操作注意&#xff1a;Gi…

平衡二叉树的应用举例

AVL 是一种自平衡二叉搜索树&#xff0c;其中任何节点的左右子树的高度之差不能超过 1。 AVL树的特点&#xff1a; 1、它遵循二叉搜索树的一般属性。 2、树的每个子树都是平衡的&#xff0c;即左右子树的高度之差最多为1。 3、当插入新节点时&#xff0c;树会自我平衡。因此…

生信服务器配置选择说明

阿小云整理关于生信云服务器的配置选择攻略&#xff0c;生物信息服务器需要强大的计算能力和大容量存储&#xff0c;超高计算能力可以应对生物数据分析计算&#xff0c;如大规模基因序列比对等&#xff0c;大容量存储可以用来存储各种基因组、蛋白质组等数据。 生信服务器配置选…

Superset二次开发之更新 SECRET_KEY

SECRET_KEY 的作用 加密和签名:SECRET_KEY用于对敏感数据(如会话、cookie、CSRF令牌)进行加密和签名,防止数据被篡改。安全性:确保应用的安全性,防止跨站请求伪造(CSRF)攻击和会话劫持等安全问题。如何生成 SECRET_KEY openssl rand -base64 42 配置 SECRET_KEY 在sup…

VisualSVN Server/TortoiseSVN更改端口号

文章目录 概述VisualSVN Server端更改端口号TortoiseSVN客户端更改远程仓库地址 概述 Subversion&#xff08;SVN&#xff09;是常用的版本管理系统之一。部署在服务器上的SVN Server端通常会在端口号80&#xff0c;或者端口号443上提供服务。其中80是HTTP访问方式的默认端口。…

虚拟现实环境下的远程教育和智能评估系统(三)

本周继续进行开发工具的选择与学习&#xff0c;基本了解了以下技术栈的部署应用&#xff1b; 一、Seata&#xff1a; Seata&#xff08;Simple Extensible Autonomous Transaction Architecture&#xff09;是一款开源的分布式事务解决方案&#xff0c;旨在提供高性能和简单易…

创新实训2024.05.29日志:评测数据集与baseline测试

1. 评测工作 在大模型微调和RAG工作都在进行的同时&#xff0c;我们搭建了一套评测数据集。这套数据集有山东大学周易研究中心背书。主要考察大模型对于易学基本概念与常识的理解与掌握能力。 1.1. 构建评测集 在周易研究中心的指导下&#xff0c;我们构建出了一套用以考察大…

【并查集】专题练习

题目列表 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 模板 836. 合并集合 - AcWing题库 #include<bits/stdc.h> using lllong long; //#define int ll const int N1e510,mod1e97; int n,m; int p[N],sz[N]; int find(int a) {if(p[a]!a) p[a]find(p[a]);return p[a…

数据结构:希尔排序

文章目录 前言一、排序的概念及其运用二、常见排序算法的实现 1.插入排序2.希尔排序总结 前言 排序在生活中有许多实际的运用。以下是一些例子&#xff1a; 购物清单&#xff1a;当我们去超市购物时&#xff0c;通常会列出一份购物清单。将购物清单按照需要购买的顺序排序&…

【前端】Mac安装node14教程

在macOS上安装Node.js版本14.x的步骤如下&#xff1a; 打开终端。 使用Node Version Manager (nvm)安装Node.js。如果你还没有安装nvm&#xff0c;可以使用以下命令安装&#xff1a; curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash 然后关…

安通控股CRM数字化一阶段成功上线,重塑企业客户关系管理新格局

在数字化浪潮的席卷下&#xff0c;企业数字化转型已成为不可逆转的趋势&#xff0c;由于内循环增加、数字化转型、流量成本获客趋高等趋势作用力下&#xff0c;企业的精益化管理以围绕客户为中心构建市场竞争力的重要性日益凸显。 随着“客户为中心”理念的愈加深入&#xff0…

NFT Insider #132:Solana链上NFT销售总额达到55.49亿美元, The Sandbox成立DAO

引言&#xff1a;NFT Insider由NFT收藏组织WHALE Members&#xff08;https://twitter.com/WHALEMembers&#xff09;、BeepCrypto &#xff08;https://twitter.com/beep_crypto&#xff09;联合出品&#xff0c;浓缩每周NFT新闻&#xff0c;为大家带来关于NFT最全面、最新鲜、…