实践 | Kylin在滴滴OLAP引擎中的应用
2019独角兽企业重金招聘Python工程师标准>>>
本文转载自 AI前线
作者 | 滴滴数据平台团队
编辑 | Vincent
AI 前线导读:企业的生产活动会产生各种各样的数据,数据作为企业最重要的资产之一,价值巨大,数据价值的获取需要对其进行不断访问(或读或写),不同的数据访问需求就构成了相互区别的数据访问场景,只有按照场景定制数据的存储、检索、传输以及计算加工方案,才有可能提供整体最优的数据访问性能。
滴滴 OLAP 引擎细分多种场景,如灵活分析、固化分析、热点数据等,针对不同场景的特性,使用不同的场景引擎。Apache Kylin 作为滴滴 OLAP 引擎内部的固化分析场景引擎,间接服务了滴滴下游多个重要的数据产品,覆盖了十多条业务线,为用户提供了稳定、可靠、高效的数据分析性能。
数据访问场景
2.1 重视区分数据访问场景
为什么需要重视区分数据访问场景?怎么区分数据访问场景?
本质上,数据访问场景是一类数据访问需求,数据访问需求可以通过考察以下几个方面进行归类识别:
期望进行的查询以及各个查询的查询频度和占查询总量的比例;
每类查询(行、列、字节等)结果的数据量级分布;
读取和更新数据的关系,如读写比例、数据更新粒度等;
数据的工作规模以及在本机使用数据的方式;
事务以及事务隔离级别的需求;
数据副本和逻辑完整性的需求;
对每类查询的延迟和吞吐量的需求;
等等,针对不同的数据访问场景,需要定制不同的数据存储、检索、传输以及计算加工方案,只有这样,才能借助场景特性,设计更有针对性的实现方案,以更加契合该场景下的数据使用,最大化整体数据访问性能。
2.2 典型的数据访问场景
典型的数据访问场景有:OLTP(On-Line Transaction Processing)场景和 OLAP(On-Line Analysis Processing)场景,OLAP 场景下至少又可细分为以探索分析为目的的灵活分析和有严格数据访问模式的固化分析两类场景,这里提到的严格数据访问模式是指在数据产出前就已确定可对该数据执行哪些具体分析,其有明确的边界,更具体地是指该数据存在固定的分析维度,固定的分析指标以及在指标之上有固定的聚合方式。
表 2.2-1 对灵活分析和固化分析进行了对比总结:
在互联网企业,尤其是以数据驱动为核心的互联网企业,灵活分析和固化分析二者不可或缺,其中固化分析的一种主要应用就是报表类数据产品(当然,并非唯一,其他应用方式也不可忽略)。灵活分析和固化分析二者的整合催生了滴滴支持多场景的 OLAP 引擎的诞生。
支持多场景的 OLAP 引擎
3.1 OLAP 引擎现状
当前,OLAP 引擎众多。在大数据领域,如 Hive,依赖 Hadoop 提供的可靠存储和计算能力,为用户提供稳定的分析服务,再比如 Presto、Spark SQL,突出内存计算,可以满足用户快速的分析需求。这些产品虽然侧重不同,但都能覆盖灵活分析和固化分析场景需求。
但从严格意义上讲,这些产品在设计上都没有细分两种场景,而是将二者抽象为一类分析需求,即认为只有一种场景,这样设计的好处是可以统一领域问题处理,但因为模糊了两种场景各自的特点,在两种使用场景共存的应用中,总体数据访问性能上存在较大的提升空间。
3.2 滴滴 OLAP 引擎
滴滴 OLAP 引擎,区分灵活分析和固化分析,同时对于热点数据,也作为一种特有场景进行处理。
图 3.2-1 OLAP 引擎方案(忽略部分组件关联连线)
如图 3.2-1,整体方案上,查询请求首先进入 OLAP 引擎,查询路由会基于元数据选择合适的场景引擎,然后根据所选择的场景引擎重写查询,完成重写的查询会被发往场景引擎完成执行并返回查询结果。
此外,OLAP 引擎还包含了一个数据转移决策模块,可以根据用户提供的先验知识及自身决策将数据转移到更契合的场景引擎。调度模块根据这一决策触发数据在场景引擎间的“复制”,以及无效“副本”的清除。新生成的“复制副本”通常会提供比老旧“副本”更好的访问性能,即需要花费更小的访问 Cost(代价)。
3.3 固化分析场景实现方案
章节 2.2 中已经分析了固化分析场景的特点,不难发现,该场景下非常适合对数据进行聚合预计算并缓存聚合结果,即聚合缓存。
固化分析有固定的分析维度、指标及其聚合方式,查询边界明确,对原始明细数据执行聚合预计算,并将结果缓存到 Key-Value 存储,不仅可以缓解每次分析查询给集群带来的计算压力,Key-Value 存储也可以提升查询性能。通常地,聚合预计算结果相对于原始的明细数据在规模上会有明显的量级下降,这也是 OLAP 场景的一个特性。
Apache Kylin 作为固化分析场景引擎
4.1 固化分析场景引擎选型
章节 3.3 分析了固化分析场景的实现方案,在技术选型时选择使用 Apache Kylin,主要因为 Kylin 提供了以下三个特性:
针对明细数据进行聚合计算;
将聚合结果存储到 HBase;
针对明细和聚合结果支持标准的 SQL 访问;
上述三个特性不仅提供了完备的聚合缓存能力,同时也支持 SQL 访问,因此接入成本相对较低,另外,Kylin 也提供了成熟的优化查询的方法,如 HBase RowKey 序、字典编码等等,在一定程度上方便了使用优化。
4.2 Apache Kylin 在场景引擎中承担的工作职责
Kylin 作为固化分析场景引擎,主要负责对有聚合缓存需求的表进行查询加速。什么样的表会有这样的需求呢?
报表类产品使用的表;
经 OLAP 引擎数据转移决策识别认为需要进行聚合缓存的表;
前者不难理解,后者则如引擎中的表,表数据规模较大,且被频繁执行某种聚合分析,在一段时间内达到一定的频次,引擎会识别并认为该表需要执行聚合缓存,进而触发调度将数据“复制”到 Kylin。这样,下次针对该表的聚合分析如果可被 Kylin 的聚合缓存覆盖,就会直接查询 Kylin 中的聚合数据“副本”而非原始的明细数据“副本”。
4.3 使用 Apache Kylin 遇到的挑战
滴滴使用 Kylin 的方式与传统方式有异,Kylin 在架构设计上与业务紧耦合,传统方式中业务分析人员基于 Kylin 建模、构建立方体(Cube),然后执行分析查询。但滴滴将 Kylin 作为固化分析场景下的引擎使用,提供针对表的聚合缓存服务,这样作为一个通用数据组件的 Kylin 就剥离了业务属性,且与用户相割裂,对外透明。
在最初的使用中,由于没有控制 OLAP 引擎的内部并发,来自调度的聚合缓存任务会在某些情况下高并发地执行 Kylin 的表加载、模型和立方体的创建,因为 Kylin Project 元数据的更新机制导致操作存在失败的可能。当前,我们通过在 OLAP 引擎内部使用队列在一定程度上缓解了问题的发生,此外,结合重试机制,基本可以保证操作的成功完成。最后我们也注意到,该问题在最新的 Kylin 版本中已经进行了修复。
另外,Kylin 默认地,在删除立方体时不会卸载 HBase 中的 Segment 表,而需定期执行脚本进行清理。这样,就导致引擎运行时及时卸载无效的立方体无法级联到 HBase,给 HBase 造成了较大的运维压力。因此我们也对源码进行了调整,在立方体删除时增加了 HBase Segment 表清理的功能,等等。
4.4 Apache Kylin 在场景引擎中的使用效果
图 4.4-1 为 Kylin 在滴滴 OLAP 引擎中的部署情况,Kylin 集群包含 2 台分布式构建节点、8 台查询节点,其中 2 台查询节点作为集群接口承接 REST 请求,REST 请求主要包含两类:构建作业状态查询和创建类操作,创建类操作如装载表、建模、创建立方体以及对等的删除操作等等。对于构建作业状态查询轮询请求两台节点,而对创建类操作则请求其中固定的一台节点,另一台作为 Standby 存在,这样设计的主要目的是避免集群接口的单点问题,同时解决因 Kylin 集群元数据同步机制导致的可能出现的创建类操作失败问题。
图 4.4-1 Kylin 集群部署
目前,Kylin 集群维护了 700+ 的立方体,每日运行 2000+ 的构建作业,平均构建时长 37 分钟,立方体存储总量 30+TB(已去除 HDFS 副本影响);对未使用缓存的查询进行统计,80% 的查询耗时小于 500ms,90% 的查询耗时小于 2.8 秒。需要说明的是,由于 OLAP 引擎中“数据转移决策”模块会根据查询场景触发数据“复制”到 Kylin 中来,在近期的统计中,立方体数量一度会达到 1100+。
在业务方面,Kylin 间接服务了下游数易(面向全公司的报表类数据产品)、开放平台(面向全公司的查询入口)等多个重要数据产品,覆盖了快车、专车等十多个业务线的分析使用,间接用户 3000+,Kylin 的引入为用户提供了稳定、可靠、高效的固化分析性能。
总结
滴滴 OLAP 引擎细分了灵活分析、固化分析、热点数据等几类场景, Kylin 作为固化分析场景引擎在滴滴 OLAP 引擎中承担了重要角色。引擎使用 Kylin 提供的:针对明细数据进行聚合计算,将聚合结果存储到 HBase,针对明细和聚合结果支持标准的 SQL 访问三个特性透明地服务用户。当前,引擎服务了下游多个重要数据产品,覆盖了十多个业务线,为用户提供了稳定、可靠、高效的数据分析性能。
Kylin 作为中国人主导的第一个 Apache 顶级开源项目,覆盖场景重要,社区活跃,资料丰富,未来我们将更加专注于 Kylin 在滴滴 OLAP 引擎应用场景下的稳定性以及查询、构建优化。
作者介绍
郑秋野,滴滴数据平台高级专家工程师,滴滴数据系统团队负责人。
靳国卫,滴滴数据平台专家工程师,主要负责 OLAP 引擎建设。
张晓东,滴滴数据平台高级工程师,主要负责 OLAP 引擎元数据设计开发以及 Apache Kylin 集群运维。
关于滴滴数据平台团队
滴滴基础平台部数据平台团队负责公司数据仓库建设、数据治理以及基础数据工具研发等,团队提供 OLAP 引擎、Adhoc 工具、数据地图、数据分析平台、建模平台等系列产品稳定、高效地服务用户的数据需求。
转载于:https://my.oschina.net/cicixing/blog/2208233
实践 | Kylin在滴滴OLAP引擎中的应用相关推荐
- SAP BPC最佳实践-SAP BPC的OLAP引擎比较(MS OLAPBW OLAP)
相对于SAP Netweaver的BW OLAP引擎,大家可能更加熟悉MS的OLAP引擎,所以我这里作一些概念上的类比.这样对于BW的一些概念就容易理解了. 1,OLAP引擎类型 因为这篇文章不是普及 ...
- 分布式大数据多维数据分析(olap)引擎kylin[转]
Apache Kylin是一个开源的分布式分析引擎,提供Hadoop之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由eBay 开发并贡献至开源社区.它能在亚秒内查询巨大的Hiv ...
- 《走近OLAP引擎--Apache Kylin》
1.OLAP简介 联机分析处理 Molap百度百科 tableau Mondrian 2.Kylin非常好的学习博客 OLAP引擎--Kylin介绍 3.Kylin基本常识 Kylin百度百科 Kyl ...
- 叮咚买菜基于 Apache Doris 统一 OLAP 引擎的应用实践
导读: 随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时 OLAP 数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高 ...
- 机器学习在滴滴网络定位中的探索和实践
桔妹导读:定位是所有LBS服务的基础服务.在滴滴的业务场景下,定位主要是指各类终端设备的位置,包括手机.单车.行车记录仪.车机端等.作为底层服务,在滴滴日均提供700亿次定位服务,支撑着平台的各类业务 ...
- Games104 Lecture 4 游戏引擎中的渲染实践
游戏引擎中的渲染实践 概览 渲染系统的对象 GPU 架构 数据流 Cache GPU Bound 渲染 Renderable Resource Pool 可见性裁剪 纹理压缩 建模工具 新的渲染管线 ...
- 选择适合自己的 OLAP 引擎,干货
摘要:本文主要介绍了主流开源的OLAP引擎:Hive.Sparksql.Presto.Kylin.Impala.Druid.Clickhouse 等,逐一介绍了每一款开源 OLAP 引擎,包含架构.优 ...
- kylin调优,项目中错误总结,知识点总结,kylin jdbc driver + 数据库连接池druid + Mybatis项目中的整合,shell脚本执行kylin restapi 案例
关于本篇文章的说明: 本篇文章为笔者辛苦劳作用了一整天总结出来的文档,大家阅读转发的时候请不要吝啬写上笔者:涂作权 和 原文地址. 由于笔者所在环境没有人用过kylin,笔者也是自学官网,阅读书籍 将 ...
- kylin调优,项目中错误总结,知识点总结,kylin jdbc driver + 数据库连接池druid + Myba
首先给大家分享一个巨牛巨牛的人工智能教程,是我无意中发现的.教程不仅零基础,通俗易懂,而且非常风趣幽默,还时不时有内涵段子,像看小说一样,哈哈-我正在学习中,觉得太牛了,所以分享给大家!点这里可以跳转 ...
最新文章
- Windows 平台下的C++代理类(供C # 使用)
- JavaScript学习笔记(十)构造函数封装、对象检测、对象继承
- linux sh-3.2 怎么开机,linux 开机执行脚本文件
- 打怪升级的monteCarlo仿真方法
- 《代码整洁之道》笔记整理
- 头像框DIY制作小程序源码王者吃鸡等气泡头像框在线生成源码
- goroutine并发扫描MySQL表_【扫描全能王】【干货】Goroutine Channel
- android 拨号盘按键移位,手机拨号盘的隐藏功能!这两个键的作用,99%的人不知道!...
- 理财U24 认股权证、可赎债、可转债、永续债、优先股 教材解读
- ssm+jsp计算机毕业设计郑财学生经验分享平台的设计与实现hsk3u(程序+lw+源码+远程部署)
- py处理网段转化模块
- 程序实现金融租赁融资试算器 Financial Calculator
- Unity3d 传送门效果制作
- No mapping for POST
- 基于SSM框架的企业信息管理平台
- Neat算法讲解(遗传拓扑神经网络)
- x264参数介绍(帧类型和码率控制,分析和视频可用性信息)
- nubia android root权限,中兴NX402 (Nubia Z5 Mini Android 4.2)ROOT教程,一键获取ROOT权限
- virtualbox只能选用网络地址转换(NAT)模式下搭建个人局域网
- PDF格式分析(五十一)XFA Forms
热门文章
- php把数字转化字符串,php中把数字转化为字符串的方法有哪些?-PHP问题
- 杨凌农业自贸区谋定功能-万祥军:对话农民丰收节交易会
- MySQL 高可用架构 之 MHA (Centos 7.5 MySQL 5.7.18 MHA 0.58)
- Django基础——ORM字段和字段参数
- Android LayoutInflater源码解析:你真的能正确使用吗?
- 测试用例设计方法(五)路径覆盖
- 居然是Firefox没有抛弃我们
- mysql里制造一个错误
- Source Insight中的多行注释
- Entity Framework 学习中级篇3—存储过程(中)