前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Kylin 最佳实践|爱奇艺如何处理千亿级数据

Kylin 最佳实践|爱奇艺如何处理千亿级数据

作者头像
Spark学习技巧
发布于 2021-03-05 07:42:26
发布于 2021-03-05 07:42:26
56500
代码可运行
举报
文章被收录于专栏:Spark学习技巧Spark学习技巧
运行总次数:0
代码可运行

1. 使用 Kylin 的缘由

爱奇艺 OLAP 服务演变

爱奇艺大数据 OLAP 服务演变的过程可以用如下架构图说明:

数据处理流程分为如下几个层级:

  • 最下方是采集平台,收集业务的埋点和日志;
  • 数据按时效性分为两种类型:离线类型的灌入到 HDFS,实时数据灌入到 Kafka
  • 往上是各种分析引擎,Hive 用于 PB 级别的离线分析,Kylin 用于每日报表,针对相对固定的维度进行分析,Impala 用户 Ad-hoc 场景,Kudu 支持实时更新和分析,Druid 针对的是实时事件流;
  • 在这些引擎之上是统一的 SQL 引擎 -- Pilot,负责引擎和数据源的智能路由,基于此构建了 BI 分析平台,工作流平台,自定义 SQL 查询平台,实时分析平台等。

爱奇艺发展的大体时间线,2015 年前以离线分析为主,技术上是经典的 Hive + MySQL 方案,但缺点是报表查询比较慢,而且数据时效性差;2016 - 2018 年致力于将查询耗时提升至交互式级别,分为两大类:Kylin 针对固定报表,在维度比较有限的情况下,通过一个预处理,TB 级别数据延时能在秒级,而 Impala 则针对 Ad-hoc 类场景,可以查询任意明细数据;2018 年以后从离线往实时去发力,其中 Kudu 支持实时插入和更新,Druid 支持事件流场景。

Kylin 典型需求

数据分析中一个典型场景是用户行为分析,譬如用户在 APP 上进行一次点击,采集之后进行分析。下面为一个示例 SQL,分析首页过去一天的展示次数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT COUNT(1) as cnt
FROM hive_table_user_act
WHERE act_type = 'display’
AND page = 'home'
AND dt = '2020-07-18';

此类查询传统是用 Hive 表去做分析,具有如下几个特点:

  • 维度固定:分析的模式每日变化不大;
  • 时效不高:分析昨日(T+1)的使用情况;
  • 交互延时:查询延时要求比较高,通常在秒级;
  • 数据量大:每日规模百亿行的量级。

经典的技术架构如下图所示:

即撰写预计算的 SQL,通过 Spark 或 Hive 查询,将结果集存入到 MySQL,用户报表查询直接 MySQL 里面去读取。这个方案有以下几个缺点:

  • 预处理慢 Hive/Spark 任务随着预计算 SQL 数量的增加(因维度增加),耗时会随之增加,甚至超过一天;
  • 扩展性差 当预计算结果集大到 MySQL 单机无法存下时,Cube 自身也面临扩展性问题;
  • 变更困难 每当分析师有新的需求,均需工程师修改预处理 SQL,排期进行开发,迭代慢且开发量大;
  • 资源浪费 手动书写的预计算 SQL 会有较多的重复计算,通常优化的不是特别好,在资源上也是有很大的浪费。

2. Kylin 在爱奇艺的现状

Kylin 简介

为了克服 Hive + MySQL 方案的上述缺点,爱奇艺引入了 Kylin 来进行固定报表分析。Kylin 是一款基于 Hadoop 产品针对固定报表的 SQL 分析引擎,核心思想是预计算,即提前将报表分析结果(Cube)算好存入到 HBase,报表查询直接从 Cube 里读取,查询速度非常快。

以前文用户行为分析为例,爱奇艺改用 Kylin 后取得了如下效果:

  • 预处理快 处理时间缩短至 1/10,从一天跑不完到 2.5 小时跑完;
  • 扩展性好 一个输入量级在百亿每天的表,构建 9 维 Cube 都比较轻松;
  • 易于调整 Kylin 在页面拖拽即可调整分析的维度和度量,无需开发;
  • 节约成本 实测下来节省了 50% 的计算资源。

下图为当时选型的测试结果:

除了 Kylin,当时也调研了 Impala。Impala 相比 Hive 优势明显,查询延时从十几分钟缩短到 1 分钟以内,但毕竟要从原始数据开始查询,带宽等物理限制决定了查询速度的上限,相比于 Kylin 预构建的模式来说速度还是有明显差距。针对报表类交互式查询,Kylin 是更为合适的。

Kylin 在爱奇艺落地

现在,Kylin 在爱奇艺被广泛使用,已经在 20 多个业务落地,包括 BI、搜索、推荐。总计有 268 个 Cube,每天输入数据在 4 千亿行,每天构造出来的 Cube 有 3TB,Cube 总量在 800TB;查询估计一天有上万个,分析下来查询耗时 P95 < 10 秒,能够较好地满足需求。

3. Kylin 在爱奇艺的优化

业务架构影响

采用 Kylin 对业务架构也起到了积极的作用,最直接的就是业务的使用成本降低了。以推荐为例,分析各个模型的推荐效果,会采用如下图所示架构:

用户点击行为被存放于 Hive Pingback 表,而视频特征被存放于 Hive 维度表,如果要分析 3 个维度,每个维度 3 个度量,则需要对每种维度和度量的组合,撰写一个 SQL 去处理,总计 9 个预处理 SQL,Pingback 表和度量表被 JOIN 了 9 次,并且数量随着分析的增加还会继续膨胀。

而 Kylin 会将事实表和维度表处理成大宽表,后续的计算复用大宽表,从而 JOIN 的数量从 9 降低至 1,计算耗时、成本均大幅降低。此外 Kylin 还大幅降低需求变更的难度,原先增加一个维度/度量,需要改多个脚本,几天的开发量;现在只需在页面上调整,做一下测试,然后重新构建一下即可,小时内即可完成。除此之外,Kylin 还提供精确去重的功能,原先业务是自己在脚本里实现,依赖于脚本书写的好坏,Kylin 提供了一个标准、精确的实现,对业务去重的精度也有提升。

独立 HBase 集群

爱奇艺 Kylin Cube 的量级比较大,早期,我们按照社区的标准部署模式,也就是复用现有公共集群的 HBase,面临了种种挑战。

混布模式下,每一个 Hadoop 集群都有 HBase 服务,Kylin 把预处理的结果加载到本集群 HBase。这个模式有两个痛点:

  • 稳定性差 HBase 集群上还有其他业务,若其他业务读写压力较大,Kylin 查询会受影响;反过来 Kylin 大量查询时,也会对其他业务产生影响。当有很多个 HBase 集群时,任意 HBase 不稳定都有部分 Kylin 业务受影响;
  • 资源浪费 并非所有部署了 Hive 服务的集群都有 HBase,想在该集群使用 Kylin 还需在集群上部署 HBase 服务。

我们参考社区的建议,采用了独立 HBase 集群的部署模式。即 Kylin 还是从 Hive 集群读取数据,构建 Cube,最终结果跨集群加载到 Kylin 专用 HBase 集群。这个方案需要配置一下跨集群作业,参照社区的案例也不复杂;除了解决以上两个痛点,还有一个额外的好处,就是该方案能对独立 HBase 做针对性优化。因为 Kylin 专用 HBase 集群没有写入,而是通过 Bulkload 加载,故可针对读进行优化。如把内存绝大部分用于读缓存、读写线程池也偏向于读、采用固定分裂策略,Cube 表不存在分裂或合并。

采用独立 HBase 部署模式后效果明显。稳定性上,查询不可用时间相比于混布 HBase 降低至 25%。查询速度上,平均下来有 30% 的提升。

Kylin 服务平台

Kylin 服务平台定位是统一收集、存储各集群的信息,包括元信息、任务、查询,用于诊断和优化。

Kylin 自身也具备一定排障能力,比如通过 Web UI 查看 Cube 大小、失败任务等,但其信息是割裂的,部署几十个实例后,不可能每天打开几十个 Web 逐一分析。故此我们决定开发 Kylin 服务平台,其架构如下图所示:

基本思想是把需要的信息采集起来,统一存储,提供 API 和统一的 Web 界面,并开发智能诊断的逻辑,包括 Cube 膨胀率过大、Job 失败过多、查询变慢等等。

Cube 生命周期管理

用户平台的一个落地场景是 Cube 生命周期管理。如果不做管理,Kylin 对 HBase 的压力是很大的,包括表数量、Region 数量、超大 Cube,轻易即可压垮 HBase 集群。原先都是集群异常后,我们再手动分析 Region 来源,推动业务优化。现在通过用户平台的诊断,很容易分析出常见的不合理场景:Cube 未配置 TTL、未配置 Merge 策略、膨胀率过高、Cube 过大等等。平台也可基于历史的查询分析,判断出多久的数据不被访问,自动给出 TTL 的建议值。下图为诊断的效果图:

任务智能诊断

用户平台另一个落地是任务智能诊断。之前,业务构建任务失败后通过 Kylin Web 能看到如下图所示的失败信息,但分析师很难理解错误的含义,只能提交一个运维工单,由 Kylin 运维人员进行修复。这个过程对双方都很痛苦:分析师的错误响应很慢,而运维人员则需要处理大量的工单。

为此,我们开发了任务智能诊断模块。我们总结了 18 种常见的错误,每一种错误都给出易于理解的原因,修复意见,并附有手册详细描述。平台会采集任务的失败信息,和常见的错误进行匹配,下图是一个错误在平台上看到的效果。用户能基于诊断结果进行自助排障。

参数优化

1. Hive 构建全局字典

在 Kylin 3.0 中引入,之前版本中构建全局字典是通过一个单线程完成,往往会成为 Cube 构建的瓶颈。下图是优化后的效果,可以看到构建时间缩短至之前 1/3。

2. 高基数维度构建字典并发配置

即 Kylin 可以指定一个列是高基数维度,并指定其构建字典的并发度(kylin.engine.mr.uhc-reducer-count=5)。例如 Hive 表有 9 个维度列,其中 8 个基数小,1个基数大,则构建字典任务的 9 个 Reducer 会有一个特别慢。使用上述配置高基数维度会以 5 并发构建,有效地缩短了时间。

4. 未来展望

后续,我们计划朝以下几个方面发展:

1. 自动构建 Cube

当前落地的业务场景都是强需求,Cube 构建是业务主动来做。后续希望能够分析现有的 Hive 查询,自动发现内聚度高的表,构建 Cube 并代替掉原有的查询;

2. 集群化

当前每个业务一个实例,稍微有一些大查询就会引起性能波动。若给每个业务部署多个实例,则平时利用率又非常低。通过集群化部署的模式,每个用户都能用到全部的实例,稳定性会大幅提升;

3. 平台化

平台化也会继续深入,降低业务构建 Cube 的代价。通过平台来托管,业务无需自行管理 Cube 的构建。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 浪尖聊大数据 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Flutter 创建一个很酷的 Booking App UI
这是一个非常酷的项目,您将在其中学习如何实现标签栏、具有水平滚动的列表视图以及如何创建底部Flutter 中的导航栏,所以不用多说,让我们开始吧。
徐建国
2021/08/02
6050
【10】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时
【10】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍
卓伊凡
2025/02/05
2390
Flutter 实现登录 UI
本文,我将解析怎么前构建一个用户交互的登录页面。这里,我使用 TextField 挂件,这方便用户输入用户名和密码。还使用 FlatButton 挂件,来处理一些动作。当然,我还使用了 Image 挂件来设定登录页面的 logo。
Jimmy_is_jimmy
2022/10/05
8520
Flutter 实现登录 UI
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍
卓伊凡
2025/02/07
780
2025实战-Flutter3.27仿携程app实例|flutter3.x酒店预订
2025開年原创新作Flutter3.27+Dart3.6跨平台仿携程/飞猪旅行酒店app预订系统。
andy2018
2025/02/22
1530
2025实战-Flutter3.27仿携程app实例|flutter3.x酒店预订
Flutter 黏贴卡动画效果
设计非常出色的动画会使UI感觉更直觉,应用程序具有光滑的外观和感觉,改善用户体验。Flutter的动画支持使实现各种动画类型变得容易。许多小部件,特别是“Material”小部件,都伴随着其设计规范中所描述的标准运动效果,但是与此同时,也可以自定义这些效果。
老孟Flutter
2021/04/22
2.3K0
Flutter 黏贴卡动画效果
flutter制作具有自定义导航栏的渐进式 Web 应用程序
我们将整个页面分成几个部分,以便于制定,我建议您这样做以获得更好的编程,让我们更详细地查看这些部分, NavigationBar()、 DashBoard()、 CalendarSpace(), 首先我们可以做导航栏部分
徐建国
2021/10/04
3.1K0
【Flutter 专题】117 图解 Dismissible 滑动清除 Widget
和尚在尝试在项目中实现类似于 iOS 邮箱邮件左右滑动删除对应邮件时,参考到 Flutter 提供的 Dismissible,虽与理想的有差别,但还是值得研究一下。
阿策小和尚
2021/03/16
1.3K0
flutter3_window_chat仿微信桌面端聊天实战
年前有给大家分享一款flutter3.x+dart3手机端聊天App实例。春节期间就又捣鼓了flutter3桌面端开发实践项目。
andy2018
2024/03/03
7910
自研flutter3.x实战仿抖音app短视频直播FlutterLive
flutter3.x_douyin基于flutter3+dart3+getx+meidaKit等技术开发抖音版app视频直播项目。
andy2018
2024/03/25
1.1K0
【Flutter】Flutter 布局组件 ( PhysicalModel 组件 )
代码示例 : PhysicalModel 组件裁剪 PageView 组件 , 将 PageView 组件裁剪成圆角矩形样式 ;
韩曙亮
2023/03/28
1.4K0
【Flutter】Flutter 布局组件 ( PhysicalModel 组件 )
本文主要介绍flutter聊天应用程序
在本教程中,我将向您展示如何使用 Flutter 构建一个完整的聊天应用程序。对于这一部分,我们将创建应用程序的 UI 原型,然后我将向您展示如何使用 firebase 创建后端服务并创建聊天系统。
徐建国
2021/07/31
7550
【Flutter 专题】124 日常问题小结 (三) 自定义 Dialog 二三事
针对日常不同的需求,我们时常需要自定义 Dialog,而和尚在尝试过程中遇到一些小问题,简单记录总结一下;
阿策小和尚
2021/06/08
1.2K0
【Flutter 专题】124 日常问题小结 (三) 自定义 Dialog 二三事
原创flutter3.x+window_manager桌面端os管理系统
flutter3_macOS基于flutter3+window_manager+getx构建客户端os系统程序。
andy2018
2024/04/14
6711
flutter基础布局代码
骨灰级别的基础代码,只是做个简单的记录,方便以后看 都是用dart写的,都在flutter项目下的lib文件夹下 import 'package:flutter/material.dart'; import './tomFont.dart'; void main() { runApp( MaterialApp( theme: ThemeData( primarySwatch: Colors.yellow, ), home: Scaffold(
Tom2Code
2023/02/14
7320
flutter基础布局代码
【Flutter实战】定位装饰权重组件及柱状图案例
第一次鸦片战争,是1840年至1842年英国对中国发动的一场战争,也是中国近代史的开端。闭关锁国后的清朝逐步落后于世界大潮,但在外贸中,一直处于贸易顺差地位。 为了扭转对华贸易逆差,英国开始向中国走私毒品鸦片。1838年冬,道光帝派湖广总督林则徐为钦差大臣,赴广东查禁鸦片。英国政府以此为借口,决定派出远征军侵华,英国国会也通过对华战争的拨款案。
老孟Flutter
2020/09/11
1.4K0
【Flutter实战】定位装饰权重组件及柱状图案例
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Al
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心
卓伊凡
2025/02/04
800
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面
卓伊凡
2025/01/24
1250
Flutter 入门指北之输入处理(登录界面实战)
这边需要提下的是 setState 方法,该方法只有 StatefulWidget 才有,当需要修改某个值的内容的时候,通过该方法进行修改,最后的效果图如下,当输入框文字发生变化的时候,监听的 Text 内容会随之改变,获取内容的 Text 当点击按钮了才发生变化
陈宇明
2020/12/16
2K1
《Flutter个人资料界面应用》
本文我将向您展示如何在 flutter 中制作个人资料页面的 UI,您将学习如何制作圆形按钮以及如何在 flutter 中制作渐变色。
徐建国
2021/08/03
1K0
推荐阅读
Flutter 创建一个很酷的 Booking App UI
6050
【10】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时
2390
Flutter 实现登录 UI
8520
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时
780
2025实战-Flutter3.27仿携程app实例|flutter3.x酒店预订
1530
Flutter 黏贴卡动画效果
2.3K0
flutter制作具有自定义导航栏的渐进式 Web 应用程序
3.1K0
【Flutter 专题】117 图解 Dismissible 滑动清除 Widget
1.3K0
flutter3_window_chat仿微信桌面端聊天实战
7910
自研flutter3.x实战仿抖音app短视频直播FlutterLive
1.1K0
【Flutter】Flutter 布局组件 ( PhysicalModel 组件 )
1.4K0
本文主要介绍flutter聊天应用程序
7550
【Flutter 专题】124 日常问题小结 (三) 自定义 Dialog 二三事
1.2K0
原创flutter3.x+window_manager桌面端os管理系统
6711
flutter基础布局代码
7320
【Flutter实战】定位装饰权重组件及柱状图案例
1.4K0
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Al
800
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为
1250
Flutter 入门指北之输入处理(登录界面实战)
2K1
《Flutter个人资料界面应用》
1K0
相关推荐
Flutter 创建一个很酷的 Booking App UI
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验