美团AdHoc统⼀查询引擎实践
如果无法正常显示,请先停止浏览器的去广告插件。
1. 美团AdHoc统一查询
引擎实践
美团 吴彪
2.
3. 目录
• 美团AdHoc查询引擎演进
• 多引擎架构的痛点
• 统一引擎实践
• 展望未来
4. 美团AdHoc引擎演进
对Presto做兼容
性改进支持更多
Hive语法函数
Hive引擎(MR)
2018
2017
统一引擎智能规则迭
代、自动改写完善,
大规模使用
2020
2019
引入Presto引
擎来满足高性
能查询场景
2021
引入统一引擎架
构,支持自动路
由(Presto/Spark)
5. 应用场景
计算引擎 特点 应用场景 查询使用占比
Hive 稳定性高
性能差 ETL生产
查询 54%
Presto 稳定性差
高性能 查询 46%
6. 分析师群体
分析师
上万人使用
大部分为运营、业
务分析师
少部分数据RD
对引擎了解较少
7. 多引擎存在的问题
分析师难以判
断用什么引擎
排查问题思路
不同
多引擎架构
引擎间语法、
函数不兼容
引擎迭代升级
成本高
8. 统一引擎架构设计
优点
解
析
层
执
行
层
•用户接口统一
•各个引擎实现思
路类似
•降低引擎数,减
少维护成本
•排查问题、日志
统一
缺点
•与引擎解析存在
重叠
•还需要维护多个
引擎
•存量查询还需要
解决解析兼容性
•架构设计差异大
权衡
• 对用户收益
统一解析层可达
到统一引擎目标
• 模块依赖
执行层前必定有
解析层,面临同
样问题
• 实现⻛险
MPP/DAG架构
整合⻛险高
9. 统一引擎整体架构
兼容存量SQL语法/函数
智能计算适合引擎
解决引擎间语法兼容性
解决问题分析不统一
10. 解析层实现
•
核心问题:兼容存量Presto/Spark语法的SQL
反射加载
反射加载
11. 引擎预测
•
选择引擎方法
• 引擎参数限制(分区数、数据量)
• 一些经验(单表过滤、小数据量计算)
• 集群负载
以上条件外的查询怎么办?
12. 引擎预测
•
不同复杂度SQL适合那个引擎:
分类问题
•
机器学习领域常⻅分类算法:
决策树、逻辑回归等
•
训练集如何构造?
历史数据无法知道那个引擎最优
Presto
Spark
13. 训练集构建
cost+presto
cost+spark
14. 引擎预测
•
结合规则策略和模型预测来覆
盖所有查询
•
集群负载策略避免资源太高影
响性能
•
Presto执行失败可自动failover
到spark引擎
15. 方言改写
•
问题
• 语法存在差异
• 引擎间函数不统一、接口不
兼容
•
Spark有大量存量用户开发的
UDF
16. 方言改写—语法改写
•
翻译
SQL-> AST -> 方言SQL
SparkSQL
方言改写
17. 方言改写—函数
•
对于不同名、不同参数位置的
函数,可通过映射表解决
函数映射
函数映射表
18. 方言改写—函数
•
Presto HiveUDF适配器
支持大量存量
SparkUDF
codegen生成 Presto
SqlFunction实例
19. 异常诊断
提前发现问题
执行慢原因
怎么优化
20. 异常诊断—事前分析
• 语法检查
• 优化建议
• 预估耗时
21. 异常诊断—事中分析
• 为什么查询卡住了?
• 为什么进度一直99%?
• 什么时候能执行完?
22. 异常诊断—错误归因
23. 效果
30
100%
29
0.91
22.5 75%
15 50%
14
7.5 25%
0 0%
灰度前
智能路由
TP95时延(分钟)
灰度前
0.96
智能路由
成功率
24. 现状问题
用户 技术
自定义函数 重复解析
failover时间⻓ cost粒度粗
语法完全对⻬
25. 未来展望
26. 未来展望
• 完善查询事中分析
• 探索两种计算架构的整合
• 基于列统计信息计算cost
• 逻辑执行计划转换路由
• 基于现有引擎实现另一种计算架构
27.
28.