广州网站建设公司网站,企业形象广告设计,创意设计英文翻译,雁塔区建设局网站如今的小米不仅是一家手机公司#xff0c;更是一家大数据与人工智能公司。随着小米公司各项业务的快速发展#xff0c;数据中的商业价值也愈发突显。而与此同时#xff0c;各业务团队在数据查询、分析等方面的压力同样正在剧增。因此#xff0c;为帮助公司各业务线解决这些…如今的小米不仅是一家手机公司更是一家大数据与人工智能公司。随着小米公司各项业务的快速发展数据中的商业价值也愈发突显。而与此同时各业务团队在数据查询、分析等方面的压力同样正在剧增。因此为帮助公司各业务线解决这些数据方面的挑战小米大数据团队不断地尝试通过不同的技术手段打造新的解决方案。
小米大数据目前主要负责设计、完善公司级数据仓库解决方案提供完备及全链条的数据治理一站式平台连通各业务线数据开发通用的画像平台与分析引擎。小米大数据团队的目标在于不断提升数据产品与服务品质并依托数据科学、机器学习等技术赋能核心业务。
业务团队亟需统一、低门槛的 OLAP 解决方案
2012 年小米大数据团队成立之后数据平台、用户画像等通用性的技术体系相继在公司内部建立了起来。然而由于业务需求的快速变化新的挑战也不断随之出现比如在多维数据分析及 OLAP 需求中所遇到的诸多困难就是其中的典型。
OLAP 的价值可体现在实现精细化运营、提升数据处理效率、改善数据可视化效果等多个方面。但小米公司内部的业务种类异常繁杂各业务团队为了具备多维数据分析能力而各自建立了独立的 OLAP 分析系统。这些 OLAP 引擎大多是采用指标数据先进入 MySQL再在前端进行展示的方法而这样就将面临以下问题
基于 MySQL 的架构在大数据上的查询效率低下业务间 OLAP 引擎不统一数据管道冗长数据复用率极低开发工作周期变长维护成本增加缺乏统一的维表和事实表同主题下数据统计口径不一致新增业务需要投入较大的成本才能获得基础的 OLAP 能力。
经过充分的内部沟通之后发现各业务团队的基础需求主要包括以下四点
报表能力提供 OLAP 查询接口支持各种即席分析尽可能降低使用门槛ETL 以及查询的门槛初级阶段只需支持离线分析需求。
举例来说其中最常见的一类需求是——开发资源相当有限的新业务如何能在 1 天时间内开发出关键指标的多维分析看板在这种情况下又该如何系统性地设计、搭建技术架构与解决方案
以小米大数据平台核心——数据金字塔体系为基础
为了进一步满足各业务线的实际需求小米大数据认为有必要基于自行设计的数据治理体系——“数据金字塔”来开发一套端到端的 OLAP 解决方案。数据金字塔体系的结构
数据金字塔是小米大数据平台技术架构中的核心部分其目标是承载、管理、促进小米公司内的数据生态环境。该体系可将数据由下至上分布在源数据层、中间层、汇总层、应用层共四个层面中
源数据层对来源于业务线的数据进行采集、存放等最粗粒度的处理工作。这些业务数据进入源数据层之前需要遵循科学的打点规范并准备好数据同步策略及工具。中间层对源数据层的数据进行 ETL合乎规范的数据表将被存放在该层中。数据表包含事实表和维表事实表用于记录业务过程的事实数据而维表则记录维度关系。事实表和维表都需要遵循严格的命名与操作规范。汇总层公司级或业务级的主题数据都归属于该层。典型的主题表往往会对跨业务线的多张中间表进行汇总。例如小米用户画像就是来源于公司内部多项业务数据的挖掘汇总而成。主题表是业务数据的高度概括基本上能满足业务团队 80% 以上的数据需求。应用层结合中间层与汇总层中的数据对其进行优化并开发定制化的数据能力与工具或提供业务级甚至公司级的数据服务。
公司各业务线的在线服务日志以及其他数据源的数据MySQL 等等可通过数据流服务下沉到 HDFS、Kudu、HBase 等引擎中经过数据金字塔建模后再提供给业务团队使用。
源数据层中的数据可以类比为数据湖Data Lake包含多种原始数据。经过源数据层的加工数据会向上进入中间层。在中间层中将清洗脏数据统一数据统计口径再经历一系列的 Join 操作和其他 ETL 过程后会生成汇总层数据。汇总层的数据通常会更面向主题且具有一定的通用性例如订单、画像等等。最后在应用层中针对业务团队的分析需求可直接基于汇总层与中间层数据的集合构建个性化的数据集市。梳理数据流程简化数据模型
因此为了节约重复开发成本基于上述数据治理体系小米大数据开发了一系列经过优化的解决方案其中就包括本文所涉及的核心内容——UnionSQL。
利用 Apache Kylin 的特性构建定制化 OLAP 解决方案
OLAP 常见的应用场景可分为数据看板、即席查询这两种每种场景对于查询效率与数据新鲜度都有着不同的要求。而在最初阶段下小米大数据的主要目标是集中精力解决对于离线数据 OLAP 能力的问题。
针对 OLAP 解决方案的技术选型问题小米大数据鉴于之前在 Elasticsearch 上所积累的经验对于数据量不太大的业务首先尝试了基于 ElasticsearchLogstashKibana 的解决方案。尽管 Elasticsearch 在查询效率方面表现不错也对地理位置信息类数据进行了特殊优化但是其本身更适用于原始数据的检索而在数据摄入、查询语法等方面的表现也并不是很理想。在此之后Apache Kylin、Druid、ClickHouse 等方案也成为了候选项小米大数据在结合了实际业务需求与环境后决定从以下方面进行考量
可满足大多数需求支持常见的算子以及数据的摄入、查询速度足够快保证良好的 SLA使用门槛相对较低。Apache Kylin 架构
作为候选方案之一的 Apache Kylin基本支持常见的 SQL 语法并能满足通常情况下的需求。数据摄入主要依赖 MapReduce、Spark 任务将 Hive 中的数据转换为对应 Cube 的 SegmentHFile效率方面尚可而在查询速度方面也能提供秒级支持。对于一些如 distinct 等复杂场景而言Apache Kylin 也提供了高精度但低效以及高效但存在可容忍误差这两种计算方式以适用不同的业务场景需求。
在 SLA 方面鉴于之前小米相关团队在 Hadoop 技术栈上积累的经验因此同样也能针对 Apache Kylin 而提供良好的 SLA 保障。此外Apache Kylin 本身的设计与传统数据仓库相一致学习构建 Cube 的门槛不高而数据的查询基于 SQL 语法同时还提供了 JDBC 接口和 Rest API便于现有系统对接。同时 Apache Kylin 也能较好地与 Apache Superset 等开源可视化方案进行整合易于进行数据可视化处理。目前小米公司的部分业务已实现在日志进入数据流之后基于现有解决方案生成数据看板等可视化的功能。
由此可见Apache Kylin 满足了上述考量要求并最终作为 OLAP 引擎方案而进入了小米大数据平台的技术架构而这套完整的 OLAP 解决方案则被命名为 UnionSQL。
越来越多的内部业务开始受益于 UnionSQL
在引入 Apache Kylin 作为 OLAP 引擎之后就可将需要进行分析的数据抽象成星型模型其中的受益之处包括
只需维护最细粒度的事实分析数据进行简单的 ETL 处理数据流变得更清晰维护成本进一步降低。
截止到 2018 年第三季度小米公司内部已有超过 50 个业务接入 UnionSQL 解决方案, 其中涉及手机、MIUI、小爱同学、新零售等相关核心业务Cube 存储空间已超过 50TB且 95% 的查询都能在 0.35 秒内返回。UnionSQL 的架构如下图所示SQL 计划器会将用户的查询进行解析与重排而 SQL 转发器则会把改写后的结果分发给不同的引擎。例如当最终用户想知道某个区域的实时运营活动点击率的时候会基于 Lambda 架构将历史数据的查询分发给 Apache Kylin而实时数据的查询则分发给 Elasticsearch。
众所周知点击率 点击 / 曝光但如果直接在不同引擎中计算点击率并将得到的结果相加就会得到一个错误的点击率。因此UnionSQL 引擎则会将原始 SQL 进行重写再分别计算点击量和曝光量最后在 UnionSQL 引擎中重新计算点击率并将正确的结果返回给最终用户。
UnionSQL 的核心理念是“快”——上手快、数据更新快、查询响应快同时还能越用越快。UnionSQL 解决方案的诸多优势
在上手方面UnionSQL 基于 SQL 语法向最终用户提供服务极大地降低了使用门槛同时还内置支持 Lambda 架构以及多机房访问。最终用户无需了解多种查询引擎只需通过 SQL 语句描述需求UnionSQL 就能基于元数据将 SQL 改写后分发给正确的引擎并以统一的数据格式返回给最终用户。
在数据更新方面UnionSQL 基于公司内部的数据流服务与 Lambda 架构成功将数据延迟控制在了 2 分钟时间以内。
在查询响应方面UnionSQL 基于 Apache Kylin 等优秀的 OLAP 引擎以及内置的 Cache/ 自动扩容能力使 P95 查询低于 320 毫秒。
此外UnionSQL 还能基于慢查询智能优化引擎可发现问题并提供慢查询优化建议进行不同引擎的切换或 Apache Kylin 中 Cube 的构建优化等实现查询得越多速度就越快。Lambda on OLAP 架构
三类主要的 OLAP 落地场景
一般情况下业务团队的 OLAP 需求可大体分为三类——用户画像、数据运营、数据分析。
在用户画像方面小米拥有公司级的通用画像表可为各业务提供人群画像支持。以小米之家为例, 该业务的数据进入数据金字塔的汇总层后可以和通用画像表相结合, 对用户人群进行多维分析。用户画像分析的效果
在数据运营方面小米内部的每一项业务都可能会产生海量的数据那么如何才能让运营人员便捷、 快速地查看整个业务的各项关键性指标以及历史趋势正是业务团队的刚性需求。以小米音乐为例运营人员需要每天看到用户活跃情况以及热门歌曲、热门歌单、播放时长等相关指标。而通过 Apache Kylin 与 Apache Superset 的配合就可以实现这些指标的快速可视化并展示给运营人员。
在数据分析方面以小爱同学的相关业务为例在一些运营活动中会主动向用户推送具有引导性的内容。在 2018 年俄罗斯世界杯进行期间小爱同学就加入了类似的运营干预。例如用户向小爱同学询问与天气相关的问题小爱同学在完成回答之后还将加上一个“小提示”如“世界杯来了足球知识早知道坚决不做伪球迷快对我说什么是越位”等等。小米大数据团队内部将其称之为“素材”而要想评估素材的效果就需要通过数据分析来了解用户后续是否进行了小爱同学所提示的操作。
小米针对 Apache Kylin 进行了诸多定制化扩展
在小米公司内部针对 Apache Kylin 的开发主要基于社区所发布的版本根据公司内部业务的具体需求再进行定制化的改进或扩展以便更好地服务各业务团队。
在当前阶段下对 Apache Kylin 的优化工作主要集中在监控与部署、同外部系统的集成与整合、以及服务限制这三个方面上。
一、监控与部署
在监控方面
支持 Apache Kylin 将内部 Metrics 推送到 Faclon 监控系统上实现作业构建成功时 HTTP 回调以及构建失败时发送短信通知支持周期性的 Query 探测可将 Kylin 集群的实时可用性推送到 Falcon 监控系统上便于及时报警。
在部署方面
修改了 Apache Kylin 的打包方式去掉了默认的 Spark、Hadoop 依赖添加了小米公司内部维护的 Hadoop、Spark、HBase、Hive 版本并打包成了一个完整的发布包与公司内部的自动化部署平台进行整合将发布包和配置进行分离支持自动化包与配置升级加快开发与迭代的速度。
二、同外部系统的集成与整合
在 HBase 方面
支持 HBase 0.98可设置 HBase 命名空间通过 HBase Namespace Quota避免 Apache Kylin 在共用 HBase 集群时创建太多的表支持 HBase 使用独立的 HDFS 集群。
在用户管理方面
由于安全性问题公司内部无法使用 LDAP 服务因此修改了 Apache Kylin 的用户管理功能将其用户密码加密存储在了 Kylin 的元数据中并增加了新的用户管理功能以便管理员直接添加用户或修改相关权限。
三、服务限制
为避免最终用户误用保证服务质量而在 Apache Kylin 社区版本的基础上添加了一些必要限制
限制 Query 中 IN 语句里值的个数避免过大 in values 从而导致请求变慢限制 Query 的最大长度以及一个 Query 执行涉及的 Segment 个数限制 Segment 构建数据的膨胀率使膨胀率超过限制的构建直接失败通过线下的方式再单独协助最终用户优化及调整 Cube在线上环境中增加了对 Cube 的最大数据量限制 避免 HDFS 过量使用添加了构建过程中如 distinct 等聚合函数使用 buffer 大小的限制避免在 HBase 上写入一个 Key-Value 存储过大的数据。
此外对于一些具有通用性质的修改小米内部相关团队也将会逐步反馈给社区。
未来将尝试进一步解决多租户支持问题
尽管 Apache Kylin 项目已发展地较为成熟、稳定但其在小米公司内部环境下的推广与使用过程中仍然还有一些问题需要进一步解决比如针对多租户的支持问题。
目前 Apache Kylin 对多租户并不友好仅支持不同构建作业运行在不同的 Hadoop 队列上。 在开启安全的 Hadoop、Hive、HBase 集群上如果最终用户使用相同的 Kerberos 帐号 以及相同的 HDFS 路径与和 HBase 命名空间将很难避免不同项目之间互相产生影响。
未来计划以项目为基本单位支持设置独立的 Kerberos 帐号可设置 HDFS、HBase 空间和名称隔离不同项目的 Kerberos 权限及存储空间的使用避免出现不同用户之间的互相干扰。
更多探索未完待续
借助 Apache Kylin 的诸多特性UnionSQL 解决方案为小米公司内部各业务团队提供了简洁、快速、统一的数据查询服务实现了对公司核心业务的赋能。
随着在内部业务上的落地与应用小米大数据团队在 UnionSQL 上还针对支持跨境 OLAP 能力以及 Lambda 架构等方向进行了更多的深入实践。在后续的文章中小米大数据将进一步介绍小米公司在这些不同技术方向上的探索过程敬请关注小米大数据负责人 司马云瑞
“UnionSQL 是小米大数据的核心项目其目的就是为了“快”—— 上手快、数据更新快、查询速度快、越用越快。Apache Kylin 在该项目中不仅扮演着举足轻重的角色同时也成为了 UnionSQL 架构的核心组成部分。在经过长达一年的实战演练之后Apache Kylin 的查询效率、稳定性及可扩展性都完美地达到了最初的既定目标并已开始在公司内部进行大规模推广。Kylin 作为全球华人的首个 Apache 顶级项目经过多年时间的沉淀与积累在大数据领域中正发挥着越来越重要的作用。小米公司期待和社区共同推进 Apache Kylin 的发展与演进。”Apache Kylin PMC 史少锋
“小米作为一家领先的智能设备与互联网服务供应商近些年发展十分迅速业务遍及海内外已成为国人为之骄傲的品牌。随着大数据与人工智能技术的成熟与普及以数据为驱动的发展模式越来越得到认可。我们很高兴看到 Apache Kylin 成为小米大数据平台的核心 OLAP 引擎为众多数据分析师与业务团队创造价值。小米一直以来都是开源软件的积极参与者和贡献者为开源社区贡献了很多非常好的组件和功能。在过去的时间里我们与小米大数据团队进行了深入的探讨和交流未来我们会继续合作将小米积累和沉淀的诸多经验和实践回馈给 Apache Kylin 社区。”
【特别感谢小米云技术、小米运维等相关团队的工程师们共同参与了本文内容的撰写】