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

143 阅读3分钟

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

  • Hadoop:基于廉价机器存算分离的大规模分布式处理系统

     - 谷歌在2003、2004年发布Google File  System论文、MapReduce论文
    
     - 2008年,Hadoop成为apache顶级项目
    
  • OLAP(OnLine Analytical Processing)对业务数据执行多维分析,提供复杂计算趋势分析复杂数据建模的能力。是许多商务智能(BI)应用程序背后的技术。

  • OLAP VS MapReduce

      1. MapReduce代表了抽象的物理执行模型
      1. 与Mapreduce Job相比,OLAP引擎常通过SQL的形式,为数据分析,数据开发人员提供统一的逻辑描述语言,实际的物理执行由具体的引擎进行转换和优化

OLAP核心概念:维度度量

  • 常见的OLAP引擎
预计算引擎批式处理引擎流式处理引擎交互式处理引擎
KylinHiveFlinkPresto
DruidSparkClickhouse
Doris

Presto设计思想

最初是由Facebook研发的构建于Hadoop/HDFS系统上的

Presto基础原理与概念

image.png

基础概念

  • 整体架构

    • Coordinator

      • 解析SQL语句
      • 生产执行计划
    • Worker

    • Connector

      • 一个Connector代表一种数据源。可以认为Connector是由Presto执行的适配多数据源的统一接口
    • Catalog

      • 管理元数据与真实数据的映射关系
  • Query相关

    • Query:基于SQL parser 后获得的执行计划
    • Stage:根据是否需要shuffle将Query
    • Fragment:基本等价于Stage,属y于在不同阶段的称呼,本门课程可以认为两者等价
    • Task:单个Worker节点上的最小资源管理单元:在一个节点上,一个Stage只有一个Task,一个Query可能有多个Task
    • Pipelineor:最小的物理算子
    • Exchange & LocalExchange

核心组件架构

Presto重要机制

1·多租户资源管理

Resource Group资源组 类似Yarn多级队列管理方式

优点:1、轻量的Query级别的多级队列资源管理模式 2、存在一定滞后性,只会对Group中正在运行SQL进行判断

  • 物理计划生产

2.多租户下的任务调度

Stage调度

  1. AllAtOnceExecutionPolicy
  2. PhasedExecutionPolicy

Task调度(How many? How?)

确定节点数量

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

Fragment0 Fragment1 Fragment2分别对应 Sink Fixed Source

image.png

选择什么样的节点

  • HARD_AFFINITY: 计算、存储 Local 模式,保障计算与存储在同一个节点,减少数据传输

  • SOFT_AFFINITY: 基于某些特定算法,如一致性HASH函数,常用于缓存场景,保证相似的 Task 调度到同一个 Worker

  • NO_PREFERENCE: 随机选取,常用于普通的纯计算 Task (90%以上选择)

  • Split调度

3. 内存计算

Pipeline化的数据处理

流式 -- 生产段 交互式 --- 消费端

Pipeline的引入更好的实现算子间的并行 语义上保证每个Task内的数据流失处理

Back Pressure Mechanism反压机制

  • 控制split生成流程
    • targetConcurrency auto-scala-out
    • 针对每个Task定时检查, 如果 OutputBuffers 使用率低于 0.5 (下游消费较快, 需要提高生产速度), Split 并发度+1
  • 控制operator执行
    • sink.max-buffer-size" 写入buffer的大小控制
    • "exchange.max-buffer-size" 读取buffer的大小控制 - Buffer 达到最大值时Operator会进入阻塞状态

4.多联邦源联邦查询

性能优化实战

常用的性能分析工具

  • Grafana、 Arthas、
  • 线上问题排查工具:Flame Figure火焰图
  • java指令:jstack等指令

火焰图用于分析热点代码占用大量cpu,从而导致服务性能下降的情况。如下图,自底向上为调用关系。上层宽度越宽表示当前函数cpu耗时越久,我们关注最宽的函数调用。