BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Kylin在滴滴OLAP引擎中的应用

| 作者 滴滴数据平台团队 关注 1 他的粉丝 发布于 2018年7月2日. 估计阅读时间: 12 分钟 | 如何结合区块链技术,帮助企业降本增效?让我们深度了解几个成功的案例。

作者介绍:

郑秋野,滴滴数据平台高级专家工程师,滴滴数据系统团队负责人。

靳国卫,滴滴数据平台专家工程师,主要负责OLAP引擎建设。

张晓东,滴滴数据平台高级工程师,主要负责OLAP引擎元数据设计开发以及Apache Kylin集群运维。

一、前言

企业的生产活动会产生各种各样的数据,数据作为企业最重要的资产之一,价值巨大,数据价值的获取需要对其进行不断访问(或读或写),不同的数据访问需求就构成了相互区别的数据访问场景,只有按照场景定制数据的存储、检索、传输以及计算加工方案,才有可能提供整体最优的数据访问性能。

滴滴OLAP引擎细分多种场景,如灵活分析、固化分析、热点数据等,针对不同场景的特性,使用不同的场景引擎。Apache Kylin作为滴滴OLAP引擎内部的固化分析场景引擎,间接服务了滴滴下游多个重要的数据产品,覆盖了十多条业务线,为用户提供了稳定、可靠、高效的数据分析性能。

二、数据访问场景

2.1 重视区分数据访问场景

为什么需要重视区分数据访问场景?怎么区分数据访问场景?

本质上,数据访问场景是一类数据访问需求,数据访问需求可以通过考察以下几个方面进行归类识别:

  1. 期望进行的查询以及各个查询的查询频度和占查询总量的比例;
  2. 每类查询(行、列、字节等)结果的数据量级分布;
  3. 读取和更新数据的关系,如读写比例、数据更新粒度等;
  4. 数据的工作规模以及在本机使用数据的方式;
  5. 事务以及事务隔离级别的需求;
  6. 数据副本和逻辑完整性的需求;
  7. 对每类查询的延迟和吞吐量的需求;

等等,针对不同的数据访问场景,需要定制不同的数据存储、检索、传输以及计算加工方案,只有这样,才能借助场景特性,设计更有针对性的实现方案,以更加契合该场景下的数据使用,最大化整体数据访问性能。

2.2 典型的数据访问场景

典型的数据访问场景有:OLTP(On-Line Transaction Processing)场景和OLAP(On-Line Analysis Processing)场景,OLAP场景下至少又可细分为以探索分析为目的的灵活分析和有严格数据访问模式的固化分析两类场景,这里提到的严格数据访问模式是指在数据产出前就已确定可对该数据执行哪些具体分析,其有明确的边界,更具体地是指该数据存在固定的分析维度,固定的分析指标以及在指标之上有固定的聚合方式。

表2.2-1对灵活分析和固化分析进行了对比总结:

场景

特点

提供的分析能力

灵活分析

探索性分析,分析需要灵活多变

覆盖所有分析需求

固化分析

分析的维度、指标及其聚合方式固定

覆盖维度、指标及其聚合方式在边界范围内的分析需求

表2.2-1 OLAP细分场景对比

在互联网企业,尤其是以数据驱动为核心的互联网企业,灵活分析和固化分析二者不可或缺,其中固化分析的一种主要应用就是报表类数据产品(当然,并非唯一,其他应用方式也不可忽略)。灵活分析和固化分析二者的整合催生了滴滴支持多场景的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提供了以下三个特性:

  1. 针对明细数据进行聚合计算;
  2. 将聚合结果存储到HBase;
  3. 针对明细和聚合结果支持标准的SQL访问;

上述三个特性不仅提供了完备的聚合缓存能力,同时也支持SQL访问,因此接入成本相对较低,另外,Kylin也提供了成熟的优化查询的方法,如HBase RowKey序、字典编码等等,在一定程度上方便了使用优化。

4.2 Apache Kylin在场景引擎中承担的工作职责

Kylin作为固化分析场景引擎,主要负责对有聚合缓存需求的表进行查询加速。什么样的表会有这样的需求呢?

  1. 报表类产品使用的表;
  2. 经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引擎、Adhoc工具、数据地图、数据分析平台、建模平台等系列产品稳定、高效地服务用户的数据需求。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT