【Trino权威指南(第二版)】Trino的架构、trino架构组件、 trino连接器架构的细节、trino的查询执行模型

news2024/10/5 19:18:58

文章目录

  • 一. Trino架构
    • 1. 架构概览
    • 2. 协调器
    • 3. 发现服务
    • 4. 工作节点
  • 二. 基于连接器的架构
  • 三. 查询执行模型
    • 1. 解析—>查询计划
    • 2. 查询计划 —> 分布式查询计划
    • 3. 运行阶段
      • 3.1. 基础概念
        • 切片:并行单元
        • page 与 exchange算子
        • pipeline
        • 切片的driver
        • Operator
      • 3.2. running 概述

本文主要讨论了

  • Trino的架构,它使用一个协调器来接收用户请求,之后调用工作节点来组装来自数据源的全部数据。
  • trino架构组件:协调者、worker、发现服务
  • trino连接器架构的细节:连接器功能内容、通过catalog来配置连接数据源的不同行为,协调者、worker使用不同的连接器接口
  • trino的查询执行模型
    每个查询都被翻译成分布式查询计划,该查询计划由多个stage中的任务构成。
  • 数据以切片形式由连接器返回,并在多个stage中处理,直到最终结果可用并由协调器提供给用户。

一. Trino架构

1. 架构概览

Trino是一个分布式SQL查询引擎,大规模并行处理(Massively Parallel Processing,MPP)的数据库和查询引擎。Trino通过在整个集群的服务器上分配处理任务来实现横向扩展,而非通过提高单台服务器的性能来进行垂直扩展

基于这种架构,Trino查询引擎在集群内的计算节点上可以并行处理海量数据上的SQL查询。在每个计算节点上,Trino都以单个服务器进程的形式运行。一个Trino集群由多个被配置为相互协作的Trino节点组成。
 

集群架构

A Trino cluster consists of a coordinator and many workers. Users connect to the coordinator with their SQL query tool. The coordinator collaborates with the workers. The coordinator and the workers access
the connected data sources. This access is configured in catalogs.
 
Processing each query is a stateful operation. The workload is orchestrated by the coordinator and spread parallel across all workers in the cluster. Each node runs Trino in one JVM instance, and
processing is parallelized further using threads.

trino架构由(至少)一个协调者和多个worker组成,用户通过SQL工具与coordinator连接。coordinator管理workers。通过配置catalogs,coordinator 和 the workers访问已连接的数据源。

每个查询的执行都是状态操作,coordinator编排工作负载,它会将任务调度到workers中并行执行。每个trino都运行在JVM实例中,并通过使用线程 进一步将任务并行化。

 

在这里插入图片描述

  • 用户使用客户端工具(如JDBC驱动或Trino CLI)连接到集群中的协调器。之后,协调器就可以协调工作节点访问数据源。

  • 协调器是一类处理用户查询请求并管理工作节点执行查询工作的服务器。工作节点是一类负责执行任务和处理数据的服务器。

  • 协调器通常会运行一个节点发现服务,工作节点通过注册到该服务来加入集群。客户端、协调器和工作节点之间所有的通信和数据传输,都通过基于HTTP/HTTPS的REST服务交互(为什么不是rpc服务)。

 

通讯逻辑
在这里插入图片描述
协调器与工作节点通信来分配任务、更新状态,并从工作节点获取顶层(?)的结果集来返回给用户。工作节点从运行在其他工作节点上的上游任务中获取数据,并从数据源获取结果集。

 

2. 协调器

Trino协调器负责接收用户SQL查询、解析查询语句、规划查询执行 并 管理工作节点

接收用户查询

协调器是Trino集群的大脑,客户端程序都会连接它。
用户可以通过Trino CLI来与协调器交互,而应用程序可以使用JDBC或ODBC驱动、Python客户端或其他语言下可用的客户端库来交互。

 

管理工作节点
协调器跟踪每个工作节点的活动并协调查询的执行。协调器创建一个包含一系列Stage的逻辑模型

 
sql执行的底层逻辑

  • 在协调器接收到一条SQL语句后,它负责对该SQL解析、分析、创建执行计划,并在工作节点上调度执行查询任务。
  • 查询语句被翻译成一系列互相连接的任务,这些任务被分发到集群的工作节点上运行
  • 在工作节点处理数据的同时,协调节点会获取执行结果并放入输出缓冲区,并对客户端暴露该缓冲区中的数据。在客户端读完输出缓冲区的数据后,协调节点会代表客户端从工作节点获取更多的数据(结果集是一部分一部分读)。而工作节点轮流与 数据源(?) 交互并从中读取数据。通过以上流程,在查询执行结束以前,客户端不断地请求数据,工作节点则不断地从数据源读取数据并提供给客户端。
    在这里插入图片描述
    协调器、工作节点和客户端基于HTTP协议进行通信。如图展示了客户端、协调器和工作节点之间的通信情况。

在开发和测试的场景下,单个Trino实例可以作为协调器和工作节点两种角色进行工作。

 

3. 发现服务

节点发现基本逻辑

Trino使用发现服务来发现集群中的所有节点。每个Trino实例在启动时都会注册到发现服务,并定期向该服务发送心跳信号。通过这种方式,协调器能够维护一个可用工作节点的最新列表,并用它来调度查询的执行
 
如果工作节点向发现服务发送心跳消息失败,发现服务就会启动错误探测器(failure
detector),此后该工作节点不会再参与执行新的任务。

 

通过HTTP进行发现

发现服务运行在Trino协调器中,它与Trino协调器共享一个HTTP服务端,使用同一个端口。因此,工作节点配置的发现服务指向协调器的主机名和端口。

 

4. 工作节点

工作节点负责执行协调器分配的任务,包括从数据源获取数据并处理数据

具体工作

工作节点使用连接器从数据源获取数据,工作节点之间也会交换中间数据,然后它发送最终结果数据给协调器。由协调器负责收集来自各个工作节点的结果并发送给客户端。

 

向协调器注册自己

在安装集群时,工作节点需要知道集群的发现服务所在的主机名或IP地址。工作节点启动时,会将自己注册到发现服务上,以便协调器可以向其分配任务来执行。

 
与其他节点通讯

工作节点使用HTTP协议与其他工作节点和协调器通信。

如图展示了多个工作节点如何从数据源检索并协作处理数据,直到其中 (只有一个?)一个工作节点 可以向协调器提供结果。
在这里插入图片描述

 

二. 基于连接器的架构

Trino存储与计算分离的核心是基于连接器的架构。连接器为Trino提供了连接任意数据源的接口

trino连接器基础
每个连接器在底层数据源上提供了一个基于表的抽象。只要数据能用Trino支持的数据类型表示成表、列和行,Trino就可以创建连接器并让查询引擎使用这些数据进行查询处理。

通过在连接器中实现SPI,Trino就可以在内部使用标准操作来连接到任意数据源,并在该数据源上执行操作。连接器负责处理与特定数据源相关的细节。

每个连接器实现API的三个部分:

  • 获取表、视图、schema的元数据的操作。
  • 产生 数据分区(mysql也能并行读写?) 的逻辑单元的操作,用于Trino的并行读写。
  • 数据源和接收器模块,需要与查询引擎使用的内存数据格式进行转换

 
连接器让trino引擎忽略与数据源交互细节

在Trino中,支持从底层数据源读数据的连接器都需要实现listTables的SPI。因此,Trino可以使用相同的方法来让任何连接器检查schema中可用表的列表。

Trino不需要知道连接器实现的细节,一些连接器从information schema中获取数据,其他连接器需要查询元存储(metastore),还有一些通过请求数据源的API来获取信息。Trino引擎的核心会忽略这些细节,而由连接器来处理实现

这种方式把查询引擎核心关心的内容与底层具体数据源提供的细节清晰地分开。这种方式看似简单,但很有意义,因为它在可读性、可扩展性和代码维护性上能提供很大的好处。

 

自定义连接器

Trino的SPI还让你能够创建自定义连接器,这在你需要连接到一个尚未支持连接器的数据源时非常有用。如果你最终要创建新连接器,强烈建议你了解下Trino的开源社区,寻求我们的帮助并将你的连接器贡献出来。如果组织内有独特的或专有的数据源,可能也需要自定义连接器。这就是Trino允许用户使用SQL查询任何数据源的原因——真正的SQL-on-Anything。

 
协调器与worker使用不同的spi接口

Trino SPI包含的不同接口,其中协调器使用的是元数据、数据统计和数据位置接口,工作节点使用的是数据流接口。
在这里插入图片描述
 

连接器配置与加载

连接器通过配置catalog文件来指定不同数据源特定的参数。Trino在启动时,扫描catalog目录以插件的形式加载连接器。

每个catalog都会配置一个连接器来访问特定的数据源。数据源在catalog中暴露出一个或多个schema(可以理解为数据库)。每个schema包含表,表提供数据行,每个数据行由一些具有不同数据类型的列组成。
 

插件思想

Trino的很多功能使用了基于插件的架构。除了连接器,插件也可以实现事件监听器、访问控制、函数和数据类型。

 

三. 查询执行模型

接下来将探讨Trino如何实际处理SQL查询语句。

理解执行模型是在Trino中进行查询性能调优必备的基础知识。

sql在trino架构的执行过程

终端用户通过CLI,使用ODBC或JDBC客户端,或使用其他客户端库来发送SQL语句到协调器。协调器之后调用工作节点从数据源获得数据、创建结果数据集并将结果返回给客户端。

 

1. 解析—>查询计划

首先,SQL语句以文本形式提交到协调器,协调器解析和分析SQL语句。之后,Trino创建一个由内部数据结构表示的执行计划,叫作查询计划,如下图。
在这里插入图片描述
查询计划全面地表示了对每条SQL语句处理数据和返回结果所需进行的步骤。

使用SPI连接到数据源

查询计划生成过程使用元数据SPI和数据统计SPI来创建查询计划。也就是说,协调器会 使用SPI直接连接到数据源来收集有关表和其他元数据的信息。 这些信息用于对查询进行语义校验、表达式类型检查和安全检查。
 
在这里插入图片描述

统计SPI\数据位置SPI

  • 统计SPI用于获取行数和表大小的信息,从而在计划期间进行基于代价的查询优化
  • 数据位置SPI在创建分布式查询计划时会被用来生成表内容的逻辑切片。切片(具体切片的逻辑)是任务分配和并行的最小单位。

 

2. 查询计划 —> 分布式查询计划

分布式查询计划是查询计划的一个扩展,它包含一个或多个阶段(stage)。查询计划被切分成多个计划片段(plan fragment)。stage是运行时的plan fragment,包含计划片段所描述的所有任务。?

在这里插入图片描述

协调器将查询计划切分成stage,分配给集群中的多个工作节点并行处理,从而加快整体查询的执行速度。(一个job中所有的)stage会被创建为成一棵stage依赖树。

stage的数量依赖于查询的复杂度。例如,查询的表、返回的列、JOIN语句、WHERE条件、GROUP BY操作和其他SQL语句都会影响stage的数量。

 
分布式执行
通过分布式执行计划,协调器在工作节点上进一步计划和调度任务。一个stage通常包含一个或多个任务,每个任务则负责处理一小部分数据。 如下图:协调器将一个stage的任务分配给集群中的工作节点。

在这里插入图片描述

 

3. 运行阶段

3.1. 基础概念

切片:并行单元

一个任务处理数据的单位是切片。切片代表一个工作节点可以提取并处理的一段底层数据,它是并行和任务分配的基本单元。

并发信息:形成切片列表的元数据
连接器执行的特定数据操作依赖于底层的数据源。例如,Hive连接器用带有文件路径、读取偏移量和读取长度的文件信息来描述切片信息,这些信息标明了该文件需要处理的区域。

 

page 与 exchange算子

page
源stage的任务以页(page)的形式生产数据。其中,page是以列格式存储的一系列行,它们被传输到其他中间下游stage。exchange算子从上游stage的任务中读取数据,从而在不同(节点)stage之间传输page。

page的传递

在连接器的帮助下,源任务使用数据源SPI从底层数据源获取数据。Trino以page的形式表示这些数据,并在查询引擎中传送数据。算子根据自身的语义处理(接收到的page)和 产生新的page。
例如,filter算子会丢弃过滤掉的行,projection算子生成(起源于原始列的)新列的page等。

 

pipeline

包含在一个任务里的一连串算子(operator)叫作流水线(pipeline)。一条流水线中的最后一个算子通常会将它输出的page 放置在任务的输出缓冲区中。下游任务的exchange算子会从上游任务的输出缓冲区中消费page

如下图,所有这些操作都在不同的工作节点上并行执行。
在这里插入图片描述
 

切片的driver

在任务被创建之后,它会为每个切片初始化一个driver。每个driver都是包含多个算子的流水线的一个实例,并且负责处理切片中的数据。
在这里插入图片描述

如上图,根据Trino的配置和环境,一个任务可以使用一个或多个driver。一旦所有driver都执行完并且数据被传送到下一个切片,driver和任务的工作就结束了,之后(任务还没结束?)会被销毁。

 

Operator

常见的算子包括table scan(表扫描)、filter(过滤)、join(连接)和aggregate(聚合)。一系列算子组成一条pipline。例如,你可以拥有这样一条pipline,它先扫描并读入数据,再过滤数据,最后在数据上执行局部聚合。

 

3.2. running 概述

要处理一条查询,协调器首先根据来自连接器的元数据创建切片列表(ing源码逻辑)。使用该切片列表,协调器开始在工作节点上调度任务,以获取切片中的数据。在查询执行期间,协调器跟踪所有可被处理的切片,以及在工作节点上运行并处理切片的任务的位置。

随着任务结束处理,它会产生更多供下游处理的切片。协调器会不断地调度任务来处理这些新的切片,直到没有需要处理的切片为止。一旦工作节点处理完所有切片,全部数据就都可用,协调器用这些数据产生结果,客户端可以获取该结果。

 

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

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

相关文章

C#上位机与欧姆龙PLC的通信01----项目背景

最近,【西门庆】作为项目经理负责一个70万的北京项目,需要在工控系统集成软件开发中和欧 姆龙PLC对接,考虑项目现场情况优先想到了采用FinsTCP通讯协议,接下来就是记录如何一步步实现这些通讯过程的,希望给电气工程师&…

Netty常见的设计模式

简介 设计模式在软件开发中起着至关重要的作用,它们是解决常见问题的经过验证的解决方案。而Netty作为一个优秀的网络应用程序框架,同样也采用了许多设计模式来提供高性能和可扩展性。在本文中,我们将探讨Netty中使用的一些关键设计模式&…

探索Linux服务器配置信息的命令

目录 前言1 uname2 lscpu3 free4 df5 lspci6 lsusb7 lshw结语 前言 Linux系统提供了许多命令,用于获取和查看服务器的软硬件配置信息。这些命令可以帮助管理员和用户了解系统的状态、资源使用情况以及硬件设备的相关信息。以下是一些常用的命令以及它们的作用、使用…

【单调栈]LeetCode84: 柱状图中最大的矩形

作者推荐 【动态规划】【广度优先搜索】LeetCode:2617 网格图中最少访问的格子数 本文涉及的知识点 单调栈 题目 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形…

解决kernel32.dll丢失的修复方式,kernel32.dll预防错误的方法

kernel32.dll文件是电脑中的一个重要文件,如果电脑出现kernel32.dll丢失的错误提示,那么电脑中的一些程序将不能正常使用,那么出现这样的问题有什么解决办法呢?那么今天就和大家说说解决kernel32.dll丢失的修复方式。 一.kernel32…

elasticsearch|大数据|kibana的安装(https+密码)

前言: kibana是比较好安装的,但https密码就比较麻烦一些了,下面将就如何安装一个可在生产使用的kibana做一个简单的讲述 一, kibana版本和下载地址 这里我想还是强调一下,kibana的版本需要和elasticsearch的版本一…

数据库基础(实体,管理系统,日志,数据类型,键与约束)

基本概念 数据(Data): 数据是描述事物的信息,可以是数字、文字、图像、音频等形式。数据库中存储的就是这些数据,这些数据可以是具体的实体(如一个人的信息),也可以是抽象的概念&…

数据持久化与临时存储的对决:localStorage 与 sessionStorage(下)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

Elasticsearch的 8.x常用api汇总

ES的查询语法比较复杂,对于初学者需要在不断练习中才会逐渐掌握,本文汇总了ES各种查询语法以及常用api,可以作为新手的实用笔记 首先,安装 Kibana! 下载Elasticsearch,官方下载页面;Elasticsearch 参考,官方文档;<

智能优化算法应用:基于静电放电算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于静电放电算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于静电放电算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.静电放电算法4.实验参数设定5.算法结果6.…

目标检测图片截取目标分类图片

如果要训练一个分类模型却没有特定的分类数据集怎么办呢&#xff1f;可以换一种思路&#xff0c;将带有该目标的图片对所有想要的目标进行画标注框然后进行截图&#xff0c;就能得到特定的分类数据了。这么做的目的是&#xff1a;带有该目标的图片可能不会少&#xff0c;但是带…

【系统设计】如何确保消息不会丢失?

一、前言 对于大部分业务系统来说&#xff0c;丢消息意味着数据丢失&#xff0c;是完全无法接受的。其实&#xff0c;现在主流的消息队列产品都提供了非常完善的消息可靠性保证机制&#xff0c;完全可以做到在消息传递过程中&#xff0c;即使发生网络中断或者硬件故障&#xf…

Initial用法-FPGA入门3

Initial是什么 FPGA Initial是一种在FPGA中进行初始化的方法。在FPGA设备上&#xff0c;初始值决定了逻辑门的状态和寄存器的初始值。FPGA Initial可以通过设置初始值来控制电路在上电后的初始状态。 Initial的作用 2.1&#xff0c;控制电路启动时的初始状态 通过设置FPGA Ini…

迅为RK3568开发板使用OpenCV处理图像-ROI区域-位置提取ROI

在图像处理过程中&#xff0c;我们可能会对图像的某一个特定区域感兴趣&#xff0c;该区域被称为感兴趣区域&#xff08;Region of Interest, ROI&#xff09;。在设定感兴趣区域 ROI 后&#xff0c;就可以对该区域进行整体操作。 位置提取 ROI 本小节代码在配套资料“iTOP-3…

KVM虚拟机console使用

注意这些设置都在你要进入虚拟机里设置&#xff0c;不是在你的物理机设置 首先debian12 需要设置 grep ttyS0 /etc/securetty #没有则加上 echo ttyS0 >> /etc/securetty #启动 systemctl start serial-gettyttyS0 systemctl enable serial-gettyttyS0#CentOS Stream …

MIT18.06线性代数 笔记3

文章目录 对称矩阵及正定性复数矩阵和快速傅里叶变换正定矩阵和最小值相似矩阵和若尔当形奇异值分解线性变换及对应矩阵基变换和图像压缩单元检测3复习左右逆和伪逆期末复习 对称矩阵及正定性 特征值是实数特征向量垂直>标准正交 谱定理&#xff0c;主轴定理 为什么对称矩…

智能优化算法应用:基于供需算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于供需算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于供需算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.供需算法4.实验参数设定5.算法结果6.参考文献7.MA…

企业微信旧版-新版网络连接错误,无法登录的解决方案

一.企业微微信无法登录故障 二.解决方案 1.网上的解决方案 **检查网络连接&#xff1a;**确保你的计算机正常连接到互联网。尝试打开其他网页&#xff0c;以确保网络连接正常。 **防火墙和安全软件&#xff1a;**某些防火墙或安全软件可能会阻止企业微信的正常连接。请确保你…

CGAL的3D网格参数化

1、介绍 参数化曲面相当于找到一个从合适的域到曲面的单射映射。一个好的映射是在某种意义上最小化角度失真&#xff08;保角参数化&#xff09;或面积失真&#xff08;等面积参数化&#xff09;的映射。在这个包中&#xff0c;我们专注于参数化与圆盘或球体同胚的三角化曲面&a…

用CC三维建模建出的OSGB格式,用模方打不开,显示该路径包含OSGB瓦块数量0,是什么原因?

答&#xff1a;模方只识别tile命名的模型文件&#xff0c;此模型是不分块输出&#xff0c;要平面切块重新跑。 模方是一款针对实景三维模型的冗余碎片、水面残缺、道路不平、标牌破损、纹理拉伸模糊等共性问题研发的实景三维模型修复编辑软件。模方4.1新增自动单体化建模功能&…