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

71 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的的第7天,学习了【Presto 架构原理与优化介绍】的内容,重点是介绍了OLAP场景、Presto 的基础概念与原理。

概述

大数据:2000年后,由于信息交换、信息存储、信息处理能力大幅提升而产生的数据。

OLAP:OLAP引擎通过SQL形式提供统一描述语言,实际的物理执行由具体引擎进行转换和优化。

引擎

预计算引擎 kylin,druid

批式处理 hive,spark

流式处理 flink

交互式处理引擎 presto、clickhouse、doris

设计思想

  1. 多租户任务管理与调度
  2. 多数据源联邦查询
  3. 内存计算
  4. pipeline数据处理

基础原理和概念

组件

1.coordinator
解析SQL、生成执行计划发送Worker处理

2.worker
执行Task,与其他worker交互

基础概念

1.Query:pipeline vs driver
通过pipeline提高并行度,pipeline和driver关系类比程序和进程
2.数据传输:exchange vs localexchange
exchange类似于shuffle,localexchange是stage的rehash操作

服务发现

  1. 向worker配置Discovery service地址
  2. worker向Discovery service注册
  3. coordiantor从Discovery service获取worker地址

通信机制

thrift:数据编码能力强 http:不支持头部信息压缩

重要机制

多租户资源管理

resource group 轻量级query级别多级队列资源管理

存在滞后,支队对group正在运行的sql判断

多租户任务调度

1.stage调度
同时调度:存在任务空跑

分阶段调度:有延迟,但节省资源

2.task调度
HARD_AFFINITY:计算与存储在同一个节点,减少shuffle

SOFT_AFFINITY:缓存场景、相似Task调度到同一个Worker

NO_PREFERENCE:普通

3.split调度 FIFO

性能优化实战

工具

  1. grafana
  2. arthas
  3. 火焰图
  4. jstack

arthas的presto命令

1.watch
监控函数异常、返回、输入信息 2.trace
统计每一步执行

火焰图

纵向表示调用栈的深度
横向表示cpu耗时,越宽越需要重点关注