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

89 阅读3分钟

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

OLAP的演进

Hadoop

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

image.png

OLAP VS MapReduce

image.png

OLAP核心概念

  • 维度
  • 度量

常见的OLAP引擎

image.png

Presto

设计思想

最初是由Facebook研发的构建于Hadoop/HDFS之上的PB即交互式分析引擎。

  • 特点:

image.png

  • 借鉴其思想的其他版本:

image.png

基础原理及概念

image.png

  • coordinator(协调者)解析SQL语句,生成并分发任务给worker。
  • worker执行任务。
  • connector:由Presto提供的适配多数据源的统一接口。
  • catalog:管理元信息和实际数据间的映射关系。

image.png


Query相关

image.png

数据传输相关

image.png

  • 如何衡量某个任务某个stage的真实并行度?(task并不是最小的执行单元) 在不同Pipeline下split(Driver)的数目之和。

架构

image.png

分布式系统的重要问题是:系统如何调度资源?

Discovery Service

image.png

通信机制

image.png

节点状态

  • shutdown状态的作用是什么?

其实并不是一标记为shutdown就立马关闭,会给一个缓冲的时间。

image.png

HTTP 1.1 VS Thrift

后者有更好的数据编码能力和更好的数据压缩率

重要机制

多租户资源管理--Resource Group

特点:

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

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

多租户下的任务调度--生成physical plan

stage

  • 同时调度(业务场景推荐) 延迟点,会存在任务空跑
  • 分阶段调度 有一定延迟、节省部分资源

task

考虑因素:

task数量如何确定

考虑以下因素:

image.png

选择什么样的节点(调度方式?)

注:affinity:紧密联系

  • hard_affinity:数据很强的紧密联系->保证计算和存储都在同一节点
  • soft_affinity:常用于缓存场景。基于某些特定算法(如一致性HASH函数),保证相似的task调度到同一个worker
  • no_affinity:随机选取(业务场景常用)

split

问题:

image.png

  • 如何判断B是可以插队的?如果可以,该如何插队?

image.png

内存计算

  • pipeline化的数据处理
  • back pressure mechanism
    • 控制split生成流程
    • 控制operator的执行

多数据源联邦查询

  • 概念:将各个数据源进行统一抽象,由presto server进行统一的物理执行
  • 局限:
    • 每个connector管理一套元数据服务不方便
    • 谓词下推
    • 数据源分片

性能优化实战

性能分析工具

  • Grafana:系统指标的可视化界面
  • Jstack指令查看Java线程栈信息
  • JMX:为应用程序植入管理功能的框架,常用来做一些监控指标的统计收集
  • JMAP&GC日志等内存分析工具

线上问题排查工具

  • Arthas 其中的watch、trace很好用
  • 火焰图 应用消耗CPU信息
  • presto UI

具体案例分析

  • copy哈希函数的问题
  • 正则表达式的使用问题