这是我参与「第四届青训营 」笔记创作活动的的第7天,学习了【Presto 架构原理与优化介绍】的内容,重点是介绍了OLAP场景、Presto 的基础概念与原理。
概述
大数据:2000年后,由于信息交换、信息存储、信息处理能力大幅提升而产生的数据。
OLAP:OLAP引擎通过SQL形式提供统一描述语言,实际的物理执行由具体引擎进行转换和优化。
引擎
预计算引擎 kylin,druid
批式处理 hive,spark
流式处理 flink
交互式处理引擎 presto、clickhouse、doris
设计思想
- 多租户任务管理与调度
- 多数据源联邦查询
- 内存计算
- 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操作
服务发现
- 向worker配置Discovery service地址
- worker向Discovery service注册
- 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
性能优化实战
工具
- grafana
- arthas
- 火焰图
- jstack
arthas的presto命令
1.watch
监控函数异常、返回、输入信息
2.trace
统计每一步执行
火焰图
纵向表示调用栈的深度
横向表示cpu耗时,越宽越需要重点关注