Presto 架构原理与优化介绍 | 青训营笔记

简介: MapReduce代表了抽象的物理执行模型,使用]槛较高。与Mapreduce Job相比,OLAP引擎常通过SQL的形式,为数据分析、数据开发人员提供统的逻辑描述语言,实际的物理执行由具体的引|擎进行转换和优化。

Presto 架构原理与优化介绍 | 青训营笔记


这是我参与「第四届青训营 」笔记创作活动的的第5天


参考链接:

1.【大数据专场 学习资料三】第四届字节跳动青训营


前言


BigData简介

OLAP介绍-维基百科

MapReduce vs OLAP

MapReduce代表了抽象的物理执行模型,使用]槛较高。

与Mapreduce Job相比,OLAP引擎常通过SQL的形式,为数据分析、数据开发人员提供统的逻辑描述语言,实际的物理执行由具体的引|擎进行转换和优化。

维度:

1.png

\

常见的OLAP引擎:

  • 预计算引擎: Kylin, Druid
  • 批式处理引擎: Hive, Spark
  • 流式处理引擎: Flink
  • 交互式处理引擎: Presto, Clickhouse, Doris


Presto 基础概念


服务

  • Coordinator(负责调度):
  • 解析SQL语句
  • ⽣成执⾏计划
  • 分发执⾏任务给Worker节点执⾏
  • Worker

在一个presto集群中,存在一个coordinator节点和多个worker节点,coordinator节点是管理节点,而worker节点就是工作节点,在每个worker节点上都会存在一个worker服务进程,该服务进程主要进行数据的处理以及task的执行,worker服务进程每隔一定的时间都会向coordinator上的服务发送心跳,接受调度。当客户端提交一个查询的时候,coordinator则会从当前存活的worker列表中选择出适合的worker节点去运行task,而worker在执行每个task的时候又会进一步对当前task读入的每个split进行一系列的操作和处理


  • Discovery Service(将coordinator和woker结合到一起的服务):
  • Worker节点启动后向Discovery Server服务注册
  • Coordinator从Discovery Server获得Worker节点

所有的worker都把自己注册到Discovery Server上,Discovery Server是一个发现服务的service,Discovery Server发现服务之后,coordinator便知道在集群中有多少个worker能够工作,分配工作到worker时便有了根据

1.png

数据源


  • Connector

Presto通过Connector来支持多数据源,一个Connector代表一种数据源,如Hive Connector代表了对Hive数据源的支持。可以认为Connector是由Presto提供的适配多数据源的统一接口

  • Catalog

针对不同的数据源,Connector和Catalog是一一对应的关系,Catalog包含了schema和data source的映射关系。


Query部分


  • Query

基于SQL parser后获得的执行计划

  • Stage

根据是否需要shuffle将Query拆分成不同的subplan,每一个subplan便是一个stage

  • Fragment

基本等价于Stage,属于在不同阶段的称呼,在本门课程可以认为两者等价

  • Task

单个 Worker 节点上的最小资源管理单元: 在一个节点上, 一个 Stage 只有一个 Task, 一个 Query 可能有多个Task

  • Pipeline

Stage 按照 LocalExchange 切分为若干 Operator 集合, 每个 Operator 集合定义一个 Pipeline

  • Driver

Pipeline 的可执行实体 , Pipeline 和 Driver 的关系可类比 程序和进程 ,是最小的执行单元,通过 火山迭代模型执行每一个Operator

1.png

  • Split

输入数据描述(数据实体是 Page), 数量上和 Driver 一一对应,不仅代表实际数据源split,也代表了不同stage间传输的数据

  • Operator

最小的物理算子


数据传输部分


  • Exchange

表示不同 Stage 间的数据传输,大多数意义下等价于 Shuffle

  • LocalExchange (默认数值是16)

Stage内的 rehash 操作,常用于提高并行处理数据的能力(Task在presto中只是最小的容器,而不是最小的执行单元)

1.png

\

如何衡量某个任务某个Stage的真实并行度?

在不同Pipeline下Split (Driver)的数目之和。

Coordinator与Worker是如何协调和I作的?


1.服务发现

discovery service

  • Worker节点启动后向Discovery Server服务注册
  • Coordinator从Discovery Server获得Worker节点的地址


2.通信机制

  1. Presto Client I JDBC Client与Server间通信 (Http)
  2. Coordinator与Worker间的通信 (Thrift/ Http)
  3. Worker与Worker间的通信 ( Thrift / Http)

Thrift具有更好的数据编码能力,Http 1.1还不支持头部信息的压缩,Thrift 具有更好的数据压缩率


3.结点状态

Presto Worker的不同状态

  1. Active
  2. InActive
  3. Shutdown

shutdown状态的作用?

  • Graceful Shutdown (优雅的扩容)

https:/trino.io/docs/current/admin/graceful-shutdown.html


Presto设计理念

1.png

Presto最初是由facebook研发的构建于Hadoop/HDFS系统之上的PB级交互式分析引擎,其具有如下的特点:

  • 多租户任务的管理与调度
  • 多数据源联邦查询
  • 支持内存化计算
  • pipeline式数据处理

\

Presto架构图:

1.png

\


重要机制


多租户资源管理

情景假设:

用户zhangyanbingPresto-cli提交一个sql,sql语句如下:

select customer_type, avg(cost) as a 
from test_table 
group by customer_type 
order by a limit 10;

Resource Group

Resource Group类似于Yarn多级队列的资源管理方式;基于CPU、MEMORY、SQL执行数进行资源使用量限制

Presto用户多租户隔离的手段:

Presto 通过Resource Group对不同的用户创建不同Group从而实现不同租户,不同场景的资源管理

\

Presto Resource Group的优缺点

优点:支持通配符的形式,对不同租户,不同提交场景下的用户进行限制

缺点:资源的管理和判断是以当前用户正在运行的SQL资源使用量为基准,对于低频大SQL场景不太适用


多租户任务调度


物理计划生成:

  1. Antlr4 解析生成AST

2.转换成Logical Plan

3.按照是否存在Shuffle (Exchange) ,切分成不同的Stage (Fragment)

1.png

Presto是从哪几个方面实现了多租户的任务调度

  1. Stage调度策略
  2. Task的节点选择策略
  3. Split调度策略


Stage调度策略


Presto Stage调度的方式:

  • AllAtOnceExecutionPolicy (同时调度)

延迟低,会存在任务空跑

  • PhasedExecutionPolicy (分阶段调度)

有一定延迟,节省部分资源

典型应用(join查询)

  • Build端:右表构建用户join的hashtable
  • Probe端:对用户左表数据进行探查,需要等待build端完成
  • Build端构建hashtable端时,probe 端是一-直在空跑的

1.png

Task的节点选择策略

Presto Task 调度的方式


Task数量的确定:

  • Source :根据数据meta决定分配多少个节点
  • Fixed: hash partition count 确定,如集群节点数量
  • Sink:汇聚结果,一台机器
  • Scaled:无分区限制,可拓展,如write数据
  • Coordinator Only: 只需要coordinator参与

选择什么样的的结点:

  • HARD_AFFINITY: 计算、存储 Local 模式,保障计算与存储在同一个节点,减少数据传输
  • SOFT_AFFINITY: 基于某些特定算法,如一致性HASH函数,常用于缓存场景,保证相似的 Task 调度到同一个 Worker
  • NO_PREFERENCE: 随机选取,常用于普通的纯计算 Task

Split调度策略

FIFO:顺序执行

优先级调度:快速响应

1.按照固定的时间片,轮训Split 处理数据,处理1s,再重新选择一-个Sp it执行

  1. Split 间存在优先级

MultilevelSplitQueue

5个优先级level理论上分配的时间占比为16:8:4:2:1 (2-based)


优势:

1.优先保证小Query快速执行

2.保障大Query存在固定比例的时间片,不会被完全饿死

内存计算

Pipeline ( 按Localexchange拆分 )

pipeline的引入更好实现了算子间的并行;

语义上保证了每个task内的数据流式处理。


Presto是如何实现Back pressure mechanism的

  1. 控制split生成流程
  2. 控制Operator执行速度


1.targetConcurrency auto-scale out

针对每个Task定时检查, 如果 OutputBuffers 使用率低于 0.5 (下游消费较快, 需要提高生产速度), Split 并发度+1

2."sink.max-buffer-size" 写入buffer的大小控制


"exchange.max-buffer-size" 读取buffer的大小控制,Buffer 达到最大值时Operator会进入阻塞状态


多数据联邦查询


1.png

Presto多数据源支持的优点与缺点


优点:支持多数据源的联邦查询


缺点:针对不同数据源,还存在许多问题需要解决

  • 谓词下推
  • 每个数据源都需要单独的一套catalog管理
  • 数据源分片


性能优化


常用的性能分析工具:

  • Grafana
  • Arthas
  • Watch
  • Trace
  • Flame Figure(火焰图)
  • java指令:jstack等指令
相关文章
|
9天前
|
机器学习/深度学习 人工智能 文件存储
Llama Nemotron:英伟达开源基于Llama架构优化的推理模型,253B参数持平DeepSeek R1!
NVIDIA推出的Llama Nemotron系列推理模型,基于Llama架构优化,包含Nano/Super/Ultra三款,在数学推理、编程和工具调用等任务中展现卓越性能。
52 5
Llama Nemotron:英伟达开源基于Llama架构优化的推理模型,253B参数持平DeepSeek R1!
|
3天前
|
数据采集 运维 Serverless
云函数采集架构:Serverless模式下的动态IP与冷启动优化
本文探讨了在Serverless架构中使用云函数进行网页数据采集的挑战与解决方案。针对动态IP、冷启动及目标网站反爬策略等问题,提出了动态代理IP、请求头优化、云函数预热及容错设计等方法。通过网易云音乐歌曲信息采集案例,展示了如何结合Python代码实现高效的数据抓取,包括搜索、歌词与评论的获取。此方案不仅解决了传统采集方式在Serverless环境下的局限,还提升了系统的稳定性和性能。
|
10天前
|
弹性计算 负载均衡 网络协议
阿里云SLB深度解析:从流量分发到架构优化的技术实践
本文深入探讨了阿里云负载均衡服务(SLB)的核心技术与应用场景,从流量分配到架构创新全面解析其价值。SLB不仅是简单的流量分发工具,更是支撑高并发、保障系统稳定性的智能中枢。文章涵盖四层与七层负载均衡原理、弹性伸缩引擎、智能DNS解析等核心技术,并结合电商大促、微服务灰度发布等实战场景提供实施指南。同时,针对性能调优与安全防护,分享连接复用优化、DDoS防御及零信任架构集成的实践经验,助力企业构建面向未来的弹性架构。
146 76
|
12天前
|
消息中间件 存储 设计模式
RocketMQ原理—5.高可用+高并发+高性能架构
本文主要从高可用架构、高并发架构、高性能架构三个方面来介绍RocketMQ的原理。
175 21
RocketMQ原理—5.高可用+高并发+高性能架构
|
11天前
|
人工智能 自然语言处理 安全
基于LlamaIndex实现CodeAct Agent:代码执行工作流的技术架构与原理
CodeAct是一种先进的AI辅助系统范式,深度融合自然语言处理与代码执行能力。通过自定义代码执行代理,开发者可精准控制代码生成、执行及管理流程。本文基于LlamaIndex框架构建CodeAct Agent,解析其技术架构,包括代码执行环境、工作流定义系统、提示工程机制和状态管理系统。同时探讨安全性考量及应用场景,如软件开发、数据科学和教育领域。未来发展方向涵盖更精细的代码生成、多语言支持及更强的安全隔离机制,推动AI辅助编程边界拓展。
52 3
基于LlamaIndex实现CodeAct Agent:代码执行工作流的技术架构与原理
|
15天前
|
人工智能 自然语言处理 算法
文生图架构设计原来如此简单之交互流程优化
文生图创作很少是一次完成的过程,通常需要多轮迭代才能达到理想效果。多轮交互架构设计的目标是使这一迭代过程尽可能流畅和高效。
53 6
|
1月前
|
机器学习/深度学习 缓存 自然语言处理
深入解析Tiktokenizer:大语言模型中核心分词技术的原理与架构
Tiktokenizer 是一款现代分词工具,旨在高效、智能地将文本转换为机器可处理的离散单元(token)。它不仅超越了传统的空格分割和正则表达式匹配方法,还结合了上下文感知能力,适应复杂语言结构。Tiktokenizer 的核心特性包括自适应 token 分割、高效编码能力和出色的可扩展性,使其适用于从聊天机器人到大规模文本分析等多种应用场景。通过模块化设计,Tiktokenizer 确保了代码的可重用性和维护性,并在分词精度、处理效率和灵活性方面表现出色。此外,它支持多语言处理、表情符号识别和领域特定文本处理,能够应对各种复杂的文本输入需求。
144 6
深入解析Tiktokenizer:大语言模型中核心分词技术的原理与架构
|
4月前
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。
|
10天前
|
Cloud Native Serverless 流计算
云原生时代的应用架构演进:从微服务到 Serverless 的阿里云实践
云原生技术正重塑企业数字化转型路径。阿里云作为亚太领先云服务商,提供完整云原生产品矩阵:容器服务ACK优化启动速度与镜像分发效率;MSE微服务引擎保障高可用性;ASM服务网格降低资源消耗;函数计算FC突破冷启动瓶颈;SAE重新定义PaaS边界;PolarDB数据库实现存储计算分离;DataWorks简化数据湖构建;Flink实时计算助力风控系统。这些技术已在多行业落地,推动效率提升与商业模式创新,助力企业在数字化浪潮中占据先机。
78 12
|
5月前
|
Cloud Native Devops 云计算
云计算的未来:云原生架构与微服务的革命####
【10月更文挑战第21天】 随着企业数字化转型的加速,云原生技术正迅速成为IT行业的新宠。本文深入探讨了云原生架构的核心理念、关键技术如容器化和微服务的优势,以及如何通过这些技术实现高效、灵活且可扩展的现代应用开发。我们将揭示云原生如何重塑软件开发流程,提升业务敏捷性,并探索其对企业IT架构的深远影响。 ####
119 3

热门文章

最新文章