Apache Kylin4 在有赞的应用

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. 数智 · 同行 第三届大数据技术沙龙
2. Apache Kylin4 在有赞的应用 郑生俊 有赞 | 数据开发工程师
3.
4. Contents 01 有赞 OLAP 介绍 02 Kylin4 的大幅度性能提升 03 有赞 Kylin4 性能优化 04 参与开源社区
5. 01 有赞 OLAP 介绍 有赞 OLAP 的发展历程、遇到的挑战
6. • 技术栈简单 • 学习成本低 • 实时 • 查询灵活 预计算 +MySQL 缺点 • 灵活性差 • 开发效率低下 • 性能不足 早期 • 聚合度高 • RT 最低 • 支持精确去重 Druid 缺点 • 不支持精确去重 • 聚合度不够高 • 不支持明细 OLAP • 故障 T+1 恢复 2018 Kylin ClickHouse • 实时 / 离线 • 查询非常灵活 now
7. 600w 存量商家 100 亿 + 构建数据 年 GMV 1073 亿 300+Cube
8. B 端场景 ( 稳定 性、 RT 要求严 格): 故障快速恢复 单店千万会会、数 十万商品 复杂查询性能
9. 部门 A 组织架构灵活变动 部门 B 客户、部门、员工 变动明细 好友、粉丝关系变动 部门 D 部门 C 部门 - 员工 - 客 户 拉链表 拉链表明细 员工 2 员工 1 微信、粉丝建联、失联 客户 客户 部门 A 员工 1 部门 C 员工 1 千万级别粉丝、会员支 持上卷、下钻 部门 B 员工 1 数仓宽表 KYLIN 树状结构打平 趋势、比例分析
10. 能不能支持精确去重? 能不能放宽查询时间范围到三年? RT 控制在两秒以内, QPS 不低与 XXX ! 1. 通过全局字典编码减小 BitMap 2. 改写查询,利用多个时间聚合维度进行预计算 天聚合数据 季度聚合表 月聚合表 天聚合表
11. 02 Kylin4 大幅度性能提升 Kylin4 在有赞 OLAP 场景下的性能提升
12. 1. 平均构建时间从 48min 降低到 10.5min 2. 构建时间降低 78% 优化点: 1. 去掉了维度字典的编码 2. 去掉了 HBase File 生成步骤 3. 全部转换为 Spark 进行构建 4. 基于 Cuboid 的构建划分提升构建并行 度
13. 单店数十万商品, 10X 精确去重指标的排序分析 27s -> 2s Kylin2 Kylin4 并发取决于 Region 和 Shard 并发可以与数据无 关 无法针对单个查询 设置(不同数据量 的商家、并发相 同) 灵活设置单个查询 并发 充分利用 Spark 分 布式优势
14.  从 Calcite 的单点执行到基于 Spark 的完全分布式执 行  充分利用并行化、向量化、 code gen 等技术  自动调整 Spark 参数优化查询效率  基于 Parquet 的列存替换 HBase 的行存 Sort SortDF Agg AggDF Project ProjectDF Filter Cube 分布式 HBase & Coprocessor FilterDF CuboidDF 基于 Spark DF 完全分布式
15. 03 我们做的优化 Kylin4 在有赞 OLAP 场景下的性能提升
16. 动态消除 Cuboid 分区维度 Cube 有三个 Segment ,分区字段为 p: [20200101-2020201), [20200201-2020301), [20200301-2020307) SQL: Select count(a) from test where p >= 20200101 and p <= 20200306 group by a Aggregate Aggregate Scan 65rows 优化后 Scan 8rows Filter TableScan Cuboid: (a, p) Segments: 20200101~20200201 20200201~20200301 20200301~20200307 Union Filter1 Filter2 TableScan TableScan Cuboid: (a) Segments: 20200101~20200201 20200201~20200301 Cuboid: (a, p) Segments: 20200301~20200307 • 自动消除分区维度选择不同 cuboid , 减少了数十倍的数据读取和计算量。 • 更加高效地支持跨月、跨年的查询
17. 在 Kylin4 中, SQL 首先经过了 Calcite 的解析、优 化、代码生成,然后再根据 Calcite 转换为 Spark DataFrame 。在部分场景中, Calcite 的 SQL 解析 会消耗 150ms 左右。 解决方案:在 Kylin4 中支持 PreparedStatementCache 缓存 Calcite 执行计 划,降低该步骤的时间消耗。 SQL Calcite Spark DF Spark Logical Plan Spark Physical Plan
18. P0 Input RDD 背景:在一些流量分析的场景 或者 大宽表 的场景中,部分精确去 重的度量列存在大量空值,导致构建任务运行数小时无法完成 repartition by dictionary column Hive P1 B2 P2 B3 RDD 通过优化后:构建时间从 5h 无法完成,缩短到 38min P0 Input RDD Hive repartition by dictionary column B1 P1 编码 全局字典 编码 + 倾斜字典 + 倾斜字典 + 倾斜字典 P2 RDD 分桶后 的字典 B1 B2 B3 编码 全局字典 分桶后 的字典
19. 04 参与开源社区 Kylin4 在有赞 OLAP 场景下的性能提升
20. 查询: • 基于动态规划的实现的复杂条件下的分区裁剪和分区。避免查询进行全表扫 描; • 基于动态规划的实现分区条件消除。在月跨度的查询下减少数十倍数据量 • 支持缓存 calcite 执行计划 构建: • 在字典编码阶段检测并避免数据倾斜导致的构建问题使用 Spark 构建时缓存上 一层的数据,同时支持控制缓存的 Parent Dataset 数量 语法扩展 : • 支持分页查询 ……
21. 团 队 角 度 提高项目的开 发效率,降低 研发成本 提升线上服务 的稳定性 提升团队技术 影响力 避免重复的研发资 源投入 高效沟通、远程协 作、文档记录 更多的用通过线上 真实场景打磨产品 个 人 角 度 从业界大咖学习 方案讨论、 Code Review 规范编码、提高工程质量 文档规范 提升技术影响力 程序员缺少行业认证 更多的最佳实践和 技术方案 Apache Committer/PMC 业 界认可 开源项目更加强大 的生命力,更多的 从业经历者 JetBrains 全家桶 其他 apache 邮箱、个人网站
22. 1. 对项目有基本的了解 2. 对于复杂的项目,从某个模块出发 3. 订阅项目的开发者邮件组 4. 充分了解 Git 的各种功能 5. 从 Typo 做起,作为熟悉社区工作方式、 PR 流程、建联的途径
23. 解决问 题 了解当前 业务痛点 扩大应用 场景 业务的正 向反馈 深入原理 与代码 解决问题 获得更 多帮助 获得重 视 贡献社 区 加强融 入
24. 后续计划 1. 关注,适当参与 Native Engine :社区在计划 Rust/C++ 的引擎改写, 提升查询性能 2. OLAP 是一个千亿的市场,营销分析是一个万亿的市场:继续提升有赞 OLAP 性能
25. Any advice ? 1. 在真实的业务场景中才能解决问题 2. 技术只有解决实际问题才有价值 3. 在某个技术方向上持续投入
26.

Home - Wiki
Copyright © 2011-2024 iteam. Current version is 2.137.1. UTC+08:00, 2024-11-16 04:20
浙ICP备14020137号-1 $Map of visitor$