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等指令
相关文章
|
20天前
|
存储 SQL 关系型数据库
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
|
24天前
|
弹性计算 运维 监控
阿里云云服务诊断工具:合作伙伴架构师的深度洞察与优化建议
作为阿里云的合作伙伴架构师,我深入体验了其云服务诊断工具,该工具通过实时监控与历史趋势分析,自动化检查并提供详细的诊断报告,极大提升了运维效率和系统稳定性,特别在处理ECS实例资源不可用等问题时表现突出。此外,它支持预防性维护,帮助识别潜在问题,减少业务中断。尽管如此,仍建议增强诊断效能、扩大云产品覆盖范围、提供自定义诊断选项、加强教育与培训资源、集成第三方工具,以进一步提升用户体验。
665 243
|
2天前
|
机器学习/深度学习 算法 PyTorch
深度强化学习中SAC算法:数学原理、网络架构及其PyTorch实现
软演员-评论家算法(Soft Actor-Critic, SAC)是深度强化学习领域的重要进展,基于最大熵框架优化策略,在探索与利用之间实现动态平衡。SAC通过双Q网络设计和自适应温度参数,提升了训练稳定性和样本效率。本文详细解析了SAC的数学原理、网络架构及PyTorch实现,涵盖演员网络的动作采样与对数概率计算、评论家网络的Q值估计及其损失函数,并介绍了完整的SAC智能体实现流程。SAC在连续动作空间中表现出色,具有高样本效率和稳定的训练过程,适合实际应用场景。
20 7
深度强化学习中SAC算法:数学原理、网络架构及其PyTorch实现
|
17天前
|
机器学习/深度学习 算法 数据可视化
基于深度混合架构的智能量化交易系统研究: 融合SSDA与LSTM自编码器的特征提取与决策优化方法
本文探讨了在量化交易中结合时序特征和静态特征的混合建模方法。通过整合堆叠稀疏降噪自编码器(SSDA)和基于LSTM的自编码器(LSTM-AE),构建了一个能够全面捕捉市场动态特性的交易系统。SSDA通过降噪技术提取股票数据的鲁棒表示,LSTM-AE则专注于捕捉市场的时序依赖关系。系统采用A2C算法进行强化学习,通过多维度的奖励计算机制,实现了在可接受的风险水平下最大化收益的目标。实验结果显示,该系统在不同波动特征的股票上表现出差异化的适应能力,特别是在存在明确市场趋势的情况下,决策准确性较高。
55 5
基于深度混合架构的智能量化交易系统研究: 融合SSDA与LSTM自编码器的特征提取与决策优化方法
|
2天前
|
存储 弹性计算 架构师
老板点赞!技术人如何用架构优化打赢降本增效战?
大家好,我是小米,一个喜欢分享技术的小架构师。通过亲身经历,我将介绍如何通过架构优化帮助公司降本增效。两年前,我加入一家初创公司,面对成本高企的问题,通过弹性伸缩、微服务化和数据治理等手段,成功降低了40%的技术成本,提升了60%的系统响应速度。希望我的经验能给你启发!关注我的微信公众号“软件求生”,获取更多技术干货。
14 5
|
28天前
|
存储 机器学习/深度学习 人工智能
【AI系统】计算图优化架构
本文介绍了推理引擎转换中的图优化模块,涵盖算子融合、布局转换、算子替换及内存优化等技术,旨在提升模型推理效率。计算图优化技术通过减少计算冗余、提高计算效率和减少内存占用,显著改善模型在资源受限设备上的运行表现。文中详细探讨了离线优化模块面临的挑战及解决方案,包括结构冗余、精度冗余、算法冗余和读写冗余的处理方法。此外,文章还介绍了ONNX Runtime的图优化机制及其在实际应用中的实现,展示了如何通过图优化提高模型推理性能的具体示例。
55 4
【AI系统】计算图优化架构
|
18天前
|
机器学习/深度学习 前端开发 算法
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
57 3
|
1月前
|
SQL 存储 关系型数据库
MySQL进阶突击系列(01)一条简单SQL搞懂MySQL架构原理 | 含实用命令参数集
本文从MySQL的架构原理出发,详细介绍其SQL查询的全过程,涵盖客户端发起SQL查询、服务端SQL接口、解析器、优化器、存储引擎及日志数据等内容。同时提供了MySQL常用的管理命令参数集,帮助读者深入了解MySQL的技术细节和优化方法。
|
1月前
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。
|
2月前
|
Cloud Native Devops 云计算
云计算的未来:云原生架构与微服务的革命####
【10月更文挑战第21天】 随着企业数字化转型的加速,云原生技术正迅速成为IT行业的新宠。本文深入探讨了云原生架构的核心理念、关键技术如容器化和微服务的优势,以及如何通过这些技术实现高效、灵活且可扩展的现代应用开发。我们将揭示云原生如何重塑软件开发流程,提升业务敏捷性,并探索其对企业IT架构的深远影响。 ####
48 3

热门文章

最新文章