Kyligence AI 服务 - 让大模型完成准确、可靠的数值计算和回答! 立即了解更多
AI 数智助理
Kyligence Zen Kyligence Zen
Kyligence Enterprise Kyligence Enterprise
Kyligence Turbo Kyligence Turbo
指标平台解决方案
OLAP 解决方案
行业解决方案
客户总览
金融
零售
制造
医药
其他
云平台
BI
寻求合作
资源
Kyligence Enterprise
Kyligence Zen
培训
Apache Kylin
Byzer
Gluten
博客
关于
市场活动
作为开源社区,Apache Kylin 社区的成长离不开用户在代码、案例、文档等方面不断的贡献。在 2019年,Apache Kylin 变得更为稳定,功能也更为丰富,以历史数据分析见长的 Kylin 开始涉足实时数据分析领域,社区力量也在不断壮大。
在 7 月 12 日的 Kylin Data Summit 上,来自滴滴出行的技术专家靳国卫获得“2019 最佳 Apache Kylin 社区贡献个人奖”。靳国卫从 2015 年就开始接触 Kylin,向社区贡献了 Livy 集成、利用 Hive 构建全局字典等功能。
当天下午,靳国卫也在大会的互联网专场上进行了 Kylin 在滴滴的实践分享,下文为现场的精彩分享内容。此次分享将分为上、下两期。本期首先为大家介绍滴滴当前的 Kylin 架构以及滴滴如何进行集群的治理。
大家下午好,我叫靳国卫,来自滴滴出行。上午大佬们预测了技术的前沿领域和发展方向,下午我就从细节讲一下我们在实际应用过程中遇到的问题,如何解决这些问题。
PPT 主要分为四个部分,第一部分讲一下 Kylin 架构在滴滴的实际情况,展示集群数据规模,进而引出一些问题;第二部分讲在滴滴如何进行集群的治理;第三部分结合具体实际场景讲为什么做字典改造,及其改造的过程和收益;最后留一些时间回答下大家的提问。
此图是 Kylin 数据服务架构。滴滴的数据场景大部分都是自助服务式的。主要过程如下:
目前我们一共部署了 7 个 Kylin 集群,分国际和国内集群,服务基本上涵盖了公司的绝大多数服务。每天构建任务 7000 左右,Cube 数量 5 千以上。
为什么需要做集群治理呢?是因为绝大多数服务都是自助拖拽式完成的,所以主要压力是 Kylin 集群原数据膨胀。下面讲下滴滴是如何治理 Cube 元数据的。
1. 基本架构
上文中的架构图中的 Kylin1、Kylin2 都是一个 Kylin 集群。具体到单个集群,分三类角色节点:query、build 和 status。然而 Kylin 本身只有 job 和 query 两种节点类型,后面会详细讲为什么要增加 status 类型的节点。
Kylin 集群的核心是查询能力,查询服务是它的 SLA,要求查询服务稳定可靠,所以 query 节点通过 VIP(Virtual IP)来实现查询的负载均衡。
我们每天有 7 千个任务需要构建,构建节点相应会多一点,build 节点可以设置构建任务并发量。但是因为字典的构建是在 build 节点单机完成的,如果并发量设置太高,会对 build 造成一定压力,所以要根据负载合理设置并发数。
status 节点提供 API 服务与开放平台进行交互,实现集群元数据变更。为什么要有 status 节点,为什么要实现 active/standby 在下文会有详细解释。
2. 集群治理
集群治理从几个方面来说明:
① 为什么会有多集群?
基于这两个方面考虑,就实现了集群、节点动态伸缩功能。
② 既然有多个集群就会有几个问题:
所以要实现资源的动态转移。
③ 为什么要实现 Status 节点的 HA?
节点的部署对象是 Docker 镜像,里边包含了 Kylin、Spark、HBase、Hadoop、Hive 的 rpm 包,在Docker 启动的时候会随系统启动一个 kylin-agent,agent 主要负责 Kylin 启动、资源管理、存活监控的工作。
节点启动时,会去配置中心读取当前这个节点的配置信息,包括节点类型、属性配置等,然后 agent 更新 随 Docker 启动的默认配置,启动 Kylin 服务、监控等。在这个过程,可以通过配置化方式实现 Kylin 节点、集群的动态伸缩。基于服务发现的集群管理在测试中,不久将提交社区。
此图是简化后样例,包含:
3. 负载均衡
集群的负载主要是:查询的压力,构建压力。然而查询和构建是和 Cube 绑定的,所以只要能实现 Cube 在集群间的流转就可以控制查询与构建的压力。只要实现了 Cube 的集群间流转就实现了查询与构建压力的流转,然后结合集群的负载监控以及 Cube 的流转调度,就可以实现集群间负载的相对平衡。
实现思路:我们实现 Cube 集群间流转,核心点就是当创建 Cube 的时候如何决定 Cube 创建到哪一个集群上,之后查询和构建的压力就落在该集群上。
具体实现:
举例:基于用户与集群的配置关系可以实现用户的资源隔离。基于集群接收 Cube 的占比,比如 A 集群 :B 集群 = 1 :3,那么如果有 4 个请求的话,开放平台就会向 A 创建 1 个 cube,向 B 创建 3 个 cube。当过一段时间之后,可以根据 A、B 集群的负载在配置中心修改 A 集群与B集群的比例,实现流量的转移。
为什么要设计 Active/Standby status 节点?
基于以上两个原因就抽取单独的节点 status 作为 API 和集群交互的媒介。为了防止单点故障实现了 Active/Standby。除了 table&model&cube 的 CRUD 外,集群内还有其他的元数据广播。实验发现 1500+ Cube 的集群使用元数据操作串行的方式比随机广播的方式操作失败的比例大概减少 30%,所以我们在后来的实践中就改成一个按请求队列模式,实现集群状态节点管理。
下面讲一个实际案例,滴滴对于字典的改造——全域字典。
1. 如何改造
首先,简单介绍下 Kylin 默认支持精确去重的字典是全局字典,限制是只能实现 Cube 内的复用。适用方式是设定计算指标为 “count_distinct”,选择 Return Type为”precisely (More Memory and Storage Need)”, 并在”Advanced Dictionaries”处选择“Builder Class :org.apache.kylin.dict.GlobalDictionaryBuilder”。
通过名字可以了解到,滴滴这边实现的字典是可以支持跨 Cube 使用,所以叫”全域字典”。演变过程分两步:
第一步,MR-Hive 字典实现字典编码外置 Hive 表;
第二步,MR-Hive 全域字典改造实现 Cube 间依赖。
2. 案例
结合一个案例来说明下,如上图所示,是一个效果评测平台:
在此过程中进行效果评估的数据是固定的,但是需要计算留存、用户数等指标,所以用到 Kylin 的精确去重指标。可是字典只需要构建一份就可以了,其他的数据可以公用这一份数据,这样就可以缩减 Kylin 的构建时间并减小 Kylin 的 Job 节点构建的压力。
为什么可以实现 Kylin 字典的外置?一起梳理下基本流程和关键核心点:
我们从上边的流程可以分析出我们需要做的事情有两个:
3. 效果
上图简单总结了做全域字典的初衷、改造的可行性思考、取得的效果。
用上图展示下实际的使用效果,右边是默认的全局字典的配置后的元数据展示,左边是全域字典的配置形式。可以看到字典在 reuse 的时候其实引用的是其他 cube 的列,同时也设定了引用的 model 和 cube,从截图可以看出它们来自不同的 cube。
Kylin 本身是不提供调度依赖的,但是实际企业生产是要有依赖关系的。滴滴的做法是在 cube 的字典构建完成时,在 hdfs 记录一个 success 信息,依赖此字典的 cube 把此依赖配置到当前 cube 的依赖,这样就从企业生产环境的角度实现了 cube 间调度的相互依赖。
此处列举几个做这件事情的外因:
MR-HIVE 字典的实现思路:
此图是 global_dict 表和 group_by 表做一个增量计算的 SQL。当字典值比较大的时候,row_number() 排序的效率很低,构建会长时间卡住。经过分析发现是全局排序的问题,那有没有解决办法呢?
经过调研发现,Hive 在实现全局 order by 的时候并没有这样的性能瓶颈。调研发现其使用的是 Hadoop 提供的 TotalOrderPartitioner,因此借鉴此实现优化了 row_number() 的性能瓶颈
基于全域字典的外置 Hive 特点,在滴滴延伸出以下几个场景:
01 现象 社区小伙伴最近在为 Kylin 4 开发 Soft Affinity + Local Cache
01 背景 随着顺丰末端物流(末端物流主要分为对小哥、柜机、区域等的资源的管理和分批;对路径、排班、改派等信息
Apache Kylin 的今天 目前,Apache Kylin 的最新发布版本是 4.0.1。Apache
Kylin 入选《上海市重点领域(金融类)“十四五”紧缺人才开发目录》 数字经济已成为全球增长新动
在 Kyligence 主办的 Data & Cloud Summit 2021 行业峰会的「数字化转
近日由 Kyligence 主办的 Data & Cloud Summit 2021 行业峰会在上海成
近五年来,Kyligence 服务了金融、制造、零售、互联网等各个行业的龙头企业,我们在服务这些企业的过程中,
2021年1月14日,Kyligence 产品经理陈思捷开启了我们在 2021 年的首场线上分享,为大家介绍了
400 8658 757
工作日:10:00 - 18:00
已有账号? 点此登陆
预约演示,您将获得
完整的产品体验
从数据导入、建模到分析的全流程操作演示。
行业专家解惑
与资深行业专家的交流机会,解答您的个性化问题。
请填写真实信息,我们会在 1-2 个工作日内电话与您联系。
全行业落地场景演示
涵盖金融、零售、餐饮、医药、制造等多个行业,最贴合您的业务需求与场景。
Data + AI 应用落地咨询
与资深技术专家深入交流,助您的企业快速落地 AI 场景应用。
立即预约,您将获得
精准数据计算能力:
接入高精度数值计算大模型服务,为您的企业级AI应用提供强大支持。
个性化业务场景解决方案:
量身定制的计算模型和数据分析服务,切实贴合您的业务需求和应用场景。
Data + AI 落地应用咨询:
与资深专家深入探讨数据和 AI 如何帮助您的企业加速实现应用落地,构建更智能的数据驱动未来。
申请体验,您将获得
体验数据处理性能 2x 加速
同等规模资源、同等量级数据、同一套数据处理逻辑,处理耗时下降一半
专家支持
试用部署、生成数据、性能对比各操作环节在线支持