首页 > 科技 > Apache Kylin在小米集团的应用(技术架构、应用场景)

Apache Kylin在小米集团的应用(技术架构、应用场景)

作者:小米大数据团队

01 背景

如今的小米不仅是一家手机公司,更是一家大数据与人工智能公司。随着小米公司各项业务的快速发展,数据中的商业价值也越发凸显。而与此同时,各业务团队在数据查询、分析等方面的压力也与日剧增。因此,为帮助公司各业务线解决数据方面的挑战,小米大数据团队不断地尝试通过不同的技术手段打造新的大数据解决方案。

2012 年小米大数据团队成立之后,数据平台、用户画像等通用性技术体系相继在公司内部建立起来。然而随着业务需求的快速变化,新的挑战不断随之出现,比如在多维数据分析及 OLAP 需求中遇到的诸多困难就是其中的典型。

OLAP 的价值可体现在实现精细化运营、提升数据处理效率、改善数据可视化效果等多个方面。但小米公司内部的业务种类异常繁杂,各业务团队为了具备多维数据分析能力而各自建立了独立的 OLAP 分析系统。这些OLAP引擎大多采用指标数据先进入MySQL,再在前端展示的方法,而这样一来就会面临以下问题:

  1. 基于MySQL的架构,在大数据上的查询效率低下;
  2. 业务间OLAP引擎不统一,数据管道冗长,数据复用率极低,开发工作周期变长,维护成本增加;
  3. 缺乏统一的维表和事实表,同主题下的数据统计口径不一致;
  4. 新增业务需要投入较大的成本才能获得基础的OLAP能力。

经过充分的内部沟通,小米大数据团队发现各业务团队的基础需求主要包括以下四点:

  1. 报表能力;
  2. 提供OLAP查询接口,支持各种即席分析;
  3. 尽可能降低使用门槛(ETL及查询的门槛);
  4. 初级阶段只需支持离线分析需求即可。

举例来说,其中最常见的一类需求是开发资源相当有限的新业务,如何能在1天时间内开发出关键指标的多维分析看板?在这种情况下又该如何系统性地设计、搭建技术架构与解决方案?

02 利用Apache Kylin构建定制化OLAP解决方案

针对OLAP解决方案的技术选型问题,小米大数据基于之前在Elasticsearch上所积累的经验,对于数据量不太大的业务,首先尝试了基于Elasticsearch + Logstash+ Kibana的解决方案。尽管Elasticsearch在查询效率方面表现不错,也对地理位置信息类数据进行了特殊优化,但是其本身更适用于原始数据检索,而在数据摄入、查询语法等方面的表现并不是很理想。此后,Apache Kylin、Druid、Click House等方案也成为候选项,小米大数据团队在结合了实际业务需求与环境后,决定从以下方面进行考量:

  1. 可满足大多数需求,支持常见的算子,以及数据的摄入、查询速度足够快;
  2. 保证良好的 SLA;
  3. 使用门槛相对较低。

作为候选方案之一的 Apache Kylin,基本支持常见的SQL语法,并能满足一般需求。数据摄入主要依赖MapReduce、Spark任务将Hive中的数据转换为对应Cube的 Segment(HFile),效率方面尚可,而在查询速度方面也能提供秒级支持。对于一些复杂场景而言,如Distinct Count等,Apache Kylin也提供了高精度但低效、高效但存在可容忍误差这两种计算方式,以适用不同的业务场景需求。

在SLA方面,之前小米相关团队在Hadoop技术栈上积累的经验同样能针对Apache Kylin而提供良好的SLA保障。此外,Apache Kylin本身的设计与传统数据仓库相一致,学习构建Cube的门槛不高,而数据的查询基于SQL语法,同时提供了JDBC接口和Rest API,便于与现有系统对接。同时Apache Kylin也能较好地与Apache Superset等开源可视化方案进行整合,易于进行数据可视化处理。目前,小米公司的部分业务已实现在日志进入数据流之后基于现有解决方案生成数据看板等可视化的功能。

由此可见,Apache Kylin满足了上述要求,并最终作为OLAP引擎方案进入了小米大数据平台的技术架构,而这套完整的OLAP解决方案则被命名为“UnionSQL”。

UnionSQL的技术架构如图1所示:

▲图1 UnionSQL技术架构图

SQL计划器会对用户的查询进行解析与重排,而SQL转发器则会把改写后的结果分发给不同的引擎。例如,当最终用户想知道某个区域的实时运营活动点击率的时候,会基于Lambda 架构将历史数据查询分发给Apache Kylin,而实时数据查询则分发给Elasticsearch。

在引入Apache Kylin作为OLAP引擎之后,就可以将需要进行分析的数据抽象成星型模型,其优势如下:

  1. 只需维护最细粒度的事实分析数据,进行简单的ETL处理;
  2. 数据流变得更清晰;
  3. 维护成本进一步降低。

03 Kylin在小米的三类主要应用场景

一般情况下,业务团队的OLAP需求可大体分为三类——用户画像、数据运营、数据分析。

在用户画像方面,小米拥有公司级的通用画像表,可针对各业务提供人群画像支持。以小米之家为例, 该业务的数据进入数据金字塔的汇总层后,可以和通用画像表相结合对用户人群进行多维分析。

在数据运营方面,小米内部的每一项业务都可能会产生海量的数据,那么如何才能让运营人员便捷、 快速地查看整个业务的各项关键性指标及历史趋势,正是业务团队的刚性需求。以小米音乐为例,运营人员需要每天看到用户的活跃情况,以及热门歌曲、热门歌单、播放时长等相关指标。而通过Apache Kylin与Apache Superset的配合可以实现这些指标的快速可视化并将其展示给运营人员。

在数据分析方面,以小爱同学的相关业务为例,在一些运营活动中,小爱同学会主动向用户推送具有引导性的内容。在2018年俄罗斯世界杯进行期间,小爱同学就被加入了类似的运营干预。例如,用户向小爱同学询问与天气相关的问题,小爱同学在完成回答之后还加上一个“小提示”,如“世界杯来了,足球知识早知道,坚决不做伪球迷,快对我说:什么是越位”,等等。小米大数据团队内部称之为“素材”,而要想评估素材效果,就需要通过数据分析来了解用户是否进行了小爱同学所提示的操作。

截至2018年第三季度,小米公司内部已有超过50个业务接入了UnionSQL解决方案, 其中涉及手机、MIUI、小爱同学、新零售等相关核心业务,Cube存储空间已超过50TB,且 95%的查询都能在0.35秒内返回查询结果。

本文摘编自《Apache Kylin权威指南(第2版)》,经出版方授权发布。

延伸阅读《Apache Kylin权威指南(第2版)》

推荐语:技术畅销书全新升级,基于较新的Apache Kylin 2.5,从架构设计、各模块的使用、与第三方的整合、二次开发以及开源实践等各个方面讲解数仓霸主Apache Kylin,帮你释放大数据生产力。

本文来自投稿,不代表本人立场,如若转载,请注明出处:http://www.souzhinan.com/kj/216466.html