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

320 阅读3分钟

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

这是我参与「第四届青训营 -大数据场」笔记创作活动的第10天

三、重要机制

1. Presto用户多租户隔离

Presto通过resource group对不同的用户创建不同group从而实现不同租户、不同场景的资源管理

2. Presto Resource Group优缺点

  • 优点

    • 支持通配符形式:简单配置文件实现
    • 对不同租户不同提交场景下用户进行限制
  • 缺点

    • 存在滞后性
    • 只会对group中正在运行的SQL资源进行判断

3. Presto物理计划生成

  • Antlr4解析生成AST
  • 转换为Logical Plan
  • 按照是否存在shuffle(exchange)切分为不同stage(fragment)

4. Presto多租户任务调度

4.1 stage调度
  • AllAtOnceExecutionpolicy 同时调度

    • 延迟低 存在任务空跑

    • 典型应用为join查询

      • build端右表构建join的hashtable
      • probe端:左表数据进行探查,等待build完成
      • build端构建hashtable时probe在空跑
  • phased Execution policy

    • 不代表每个stage都分开调度
    • 可以分开处理,无需等待stage完成
    • 内存友好无需落盘
    • 有一定延迟、节省部分资源
4.2 task调度
  • 数量确定

    • source:根据数据meta决定分配多少节点
    • fixed:hash partition count确定如集群节点数量
    • sink:汇聚结果一台机器
    • scaled:无分区限制,可扩展,如write数据
    • coordinator_only:只需要coordinator参与
  • 选择什么节点

    • HARD_AFFINITY:计算、存储local模式,保障计算与存储在同一节点减少数据传输
    • SOFT_AFFINITY:基于某些特定算法,如一致性HASH函数;常用于缓存场景,保证相似的task调度到同一个worker
    • NO_PREFERENCE:随机选取,常用于普通的纯计算Task
4.3 split调度
  • FIFO:顺序执行,绝对公平

  • 优先级调度:快速响应

    • 按照固定时间片轮巡Split处理数据,处理1s再重新选择一个split执行
    • split之间存在优先级
    • multiLevelSplitQueue:五个优先级level理论上时间占比为16:8:4:2:1
  • 优势

    • 优先保证小query快速执行
    • 保障大query存在固定比例时间片,不会被完全饿死 (优先级很低也能有时间)

5. 内存计算

5.1 pipeline化的数据处理
  • pipeline按照localExchange拆分

    • 更好的实现算子间并行
    • 语义上保证算子执行并行
5.2 back pressure mechanism
  • 控制split生成流程

  • 控制operator执行

  • targetConcurrency auto-scale-out

    • 定时检查如果outputbuffers使用率低于0.5(下游消费速度更快,需要提高生产数据),并发度+1
  • sink.max-buffer-size写入buffer大小控制

  • exchange.max-buffer-size读取buffer大小控制

  • 达到最大值时operator进入阻塞状态

6. 多数据源联邦查询

将各个数据源进行统一抽象,最后由presto server进行统一的物理执行

  • 优点:支持多数据源的联邦查询
  • 缺点:针对不同数据源,还存在许多问题需要解决

    • 谓词下推(不同SQL处理不同)
    • 每个数据源都需要单独的一套catalog管理
    • 如何针对数据源进行分片操作

四、性能优化

1. 常用的性能分析工具

1.1 Grafana
  • 埋点、系统指标如CPU、内存网络等可视化界面,时序化的数据展示
1.2 Arthas
  • 不重启服务可以监控
  • watch:监控每个函数入参、返回参数、异常等信息
  • trace:统计函数内每一步的执行时间
  • 需要自己猜出问题大体在哪一段
1.3 Java指令
  • jstack查看java线程栈信息,排查死锁、异常线程
  • JMX(Java Management Extensions)为应用程序植入管理功能框架,做监控指标的统计收集
  • JMAP & GC日志等内存分析工具
1.4 Flame Figure火焰图
  • 分析热点代码占用大量CPU从而导致服务性能下降情况

img

1.5 Presto UI
  • Query级别统计信息
  • Logical plan
  • Stage、Task信息
  • Worker状态信息