这是我参与「第四届青训营」笔记创作活动的第8天
OLAP的演进
Hadoop
基于廉价机器的存算分离的大规模分布式处理系统
OLAP VS MapReduce
OLAP核心概念
- 维度
- 度量
常见的OLAP引擎
Presto
设计思想
最初是由Facebook研发的构建于Hadoop/HDFS之上的PB即交互式分析引擎。
- 特点:
- 借鉴其思想的其他版本:
基础原理及概念
- coordinator(协调者)解析SQL语句,生成并分发任务给worker。
- worker执行任务。
- connector:由Presto提供的适配多数据源的统一接口。
- catalog:管理元信息和实际数据间的映射关系。
Query相关
数据传输相关
- 如何衡量某个任务某个stage的真实并行度?(task并不是最小的执行单元) 在不同Pipeline下split(Driver)的数目之和。
架构
分布式系统的重要问题是:系统如何调度资源?
Discovery Service
通信机制
节点状态
- shutdown状态的作用是什么?
其实并不是一标记为shutdown就立马关闭,会给一个缓冲的时间。
HTTP 1.1 VS Thrift
后者有更好的数据编码能力和更好的数据压缩率
重要机制
多租户资源管理--Resource Group
特点:
- 类似Yarn多级队列的资源管理方式
- 基于CPU MEMORY SQL 执行数进行资源使用量限制
优点: 轻量的Query级别的多级队列资源管理模式 缺点: 存在一定滞后性,只会对Group中正在运行的SQL进行判断
多租户下的任务调度--生成physical plan
stage
- 同时调度(业务场景推荐) 延迟点,会存在任务空跑
- 分阶段调度 有一定延迟、节省部分资源
task
考虑因素:
task数量如何确定
考虑以下因素:
选择什么样的节点(调度方式?)
注:affinity:紧密联系
- hard_affinity:数据很强的紧密联系->保证计算和存储都在同一节点
- soft_affinity:常用于缓存场景。基于某些特定算法(如一致性HASH函数),保证相似的task调度到同一个worker
- no_affinity:随机选取(业务场景常用)
split
问题:
- 如何判断B是可以插队的?如果可以,该如何插队?
内存计算
- pipeline化的数据处理
- back pressure mechanism
- 控制split生成流程
- 控制operator的执行
多数据源联邦查询
- 概念:将各个数据源进行统一抽象,由presto server进行统一的物理执行
- 局限:
- 每个connector管理一套元数据服务不方便
- 谓词下推
- 数据源分片
性能优化实战
性能分析工具
- Grafana:系统指标的可视化界面
- Jstack指令查看Java线程栈信息
- JMX:为应用程序植入管理功能的框架,常用来做一些监控指标的统计收集
- JMAP&GC日志等内存分析工具
线上问题排查工具
- Arthas 其中的watch、trace很好用
- 火焰图 应用消耗CPU信息
- presto UI
具体案例分析
- copy哈希函数的问题
- 正则表达式的使用问题