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 和 Apache Druid (incubating) 是两个普遍使用的 OLAP 引擎,都具有支持在超大数据上进行快速查询的能力。在一些对大数据分析非常依赖的企业,往往同时运行着 Kylin 和 Druid 两套系统,服务于不同的业务场景。
在2018年8月的Apache Kylin Meetup 活动上,美团点评技术团队分享了他们的 Kylin On Druid 方案(简称 KOD)。那么,美团点评为什么要开发这样一套混合系统?这背后是有什么挑战和考虑呢?本文将围绕这些问题跟大家做探讨,帮助读者理解两个OLAP 引擎之间的差异和各自优势。
Apache Kylin 是一个开源的分布式大数据分析引擎,在超大规模数据集上建立数据模型,构建支持多维分析的预计算Cube,提供Hadoop 上的SQL 查询接口及多维分析能力。并开放通用的ODBC、JDBC 或Restful API 接口。这种独特的预计算能力使Apache Kylin 可以应对超大数据集上的查询,并实现亚秒级查询响应。
图1 Kylin架构图
Druid 诞生于 2012 年,是一个开源分布式数据存储,其核心设计结合了分析型数据库、时序数据库、搜索系统的特点,可以处理较大数据集上的数据收集和分析任务。Druid 使用 Apache v2许可,目前是 Apache 基金会孵化项目。
Druid 架构
从 Druid 的部署架构上看,Druid 的进程根据角色主要分为以下三类:
Historical 负责加载 segment(已提交的不可变数据),接受历史数据查询。
Middle Manager 负责数据摄入和提交 segment,单个 task 由单独 JVM负责。
Peon 负责完成单个 task,由Middle Manager 管理和监控。
Broker 接受查询请求,确定数据来自于哪些 segment,分发 sub query 和merge 结果。
Coordinator 监控 Historical,负责给Historical 分配 Segment 和监控负载。
Overlord 监控 Middle Manager,负责给 Middle Manager 分配任务和协助发布 Segment。
外部依赖
同时 Druid 有三个可替换的外部依赖:
Druid 使用 Deep storage 在 Druid 各节点间传输数据文件。
元数据存储了 Segment 的位置和Task 的输出等元数据。.
Druid 使用 Zookeeper (ZK) 来负责集群保证集群状态的一致性。
图2 Druid 架构图
Druid 中的数据存放在Data Source 中,Data Source 概念上等同于RDBMS中的表;Data Source 概念上会根据时间戳分为若干个Chunk,同一时间区间产生的数据会归属到同一 Chunk;Chunk 内部由若干个 Segment 组成,每个 Segment 是一个物理上的数据文件,同时 Segment 是一个不可再分的存储单元。出于性能考虑,一个Segment 文件的大小是建议在 500mb 左右。
图3 Data Source 和Segment
从 schema 看,因为 Druid具有 OLAP 和 Time Series Database 的特性,列包含三种,分别为时间戳列,维度列和度量列。时间戳列具有Segment 剪枝的作用,维度列和度量列在 Kylin 中有相似的概念。
图4 Druid 中的Schema
Druid 的优势
美团点评自 2015年上线使用 Apache Kylin 做为其离线 OLAP 平台核心组件,服务了几乎所有业务线,数据量和查询次数迅速增长,集群压力越来越大。在这个过程中,美团技术团队不断摸索,针对Kylin 所暴露出的一些问题寻找更优方案,其中一个主要问题就是 Kylin所依赖的存储:Apache HBase。
我们知道,目前的 Kylin 数据存储使用 HBase,存储 Cube 时将维度值和度量值转换成 HBase 的 KeyValue。因为 HBase 不支持二级索引,只有一个行键 (RowKey) 索引,Kylin 的维度值会按照固定的顺序拼接作为 RowKey 存储,那么排在 RowKey 前面的维度,就会获得比后面的维度更好的过滤性能。下面我们来看一个例子。
在测试环境使用两个几乎完全相同的的 Cube(Cube1 和 Cube2),它们的数据源相同,维度和度量也完全相同,两者的唯一差别在于RowKey 中各个维度的顺序:Cube1 将过滤用到的字段(P_LINEORDER.LO_CUSTKEY )放到第一个位置,而 Cube2则将该字段放到最后一个位置。
图5 Cube1 的RowKey 顺序
图6 Cube2 的RowKey 顺序
现在我们以相同的 SQL 在这两个 Cube 上进行查询,比较查询用时。
select S_SUPPKEY, C_CUSTKEY, sum(LO_EXTENDEDPRICE) as m1 from P_LINEORDER left join SUPPLIER on P_LINEORDER.LO_SUPPKEY = SUPPLIER.S_SUPPKEY left join CUSTOMER on P_LINEORDER.LO_CUSTKEY = CUSTOMER.C_CUSTKEY WHERE (LO_ORDERKEY > 1799905 and LO_ORDERKEY < 1799915) or (LO_ORDERKEY > 1999905 and LO_ORDERKEY < 1999935) GROUP BY S_SUPPKEY, C_CUSTKEY;
下图是它们查询时的耗时和扫描的数据量。
图7 Cube1 查询日志
图8 Cube2查询日志
从上面的测试结果看,对于相同的 SQL 语句,两者查询用时相差两百多倍。两者差别的原因主要在于对 Cube2 所在HTable 进行了更大范围的扫描。
此外,Kylin的多个度量值被存储到一个 Key 对应的 Value,当只查询单个度量时,不需要的度量也会被读取,消耗不必要的IO。总之,HBase 的局限,加大了 Kylin 对用户,尤其是业务用户的使用难度。
如果使用纯列式的存储和多维度索引,将大大提升 Kylin 查询性能,同时减小Kylin 的使用难度。从上面的 Druid 的优点介绍我们得知 Druid 正好符合列式+多维度索引这样的特征。因此美团 Kylin 开发团队决定尝试使用 Druid 替换 HBase。
到这里,读者可能会问,为什么不直接使用 Druid 呢?美团的工程师也分享了他们的经验,主要有以下考虑:
此外从对 Druid 和 Kylin 的使用经验看,直接使用Druid 作为 OLAP 引擎在管理和运维方面有一些挑战:
因此,把 Druid优秀的列式存储特性,和 Kylin 在易用性、兼容性和完备性相结合,看上去将是一个不错 OLAP 解决方案。Druid 使用了列式存储和倒排索引,过滤性能优于 HBase,并且 Druid 天生具有 OLAP的特性,也具有良好的二次聚合能力。于是,美团点评技术团队决定进行尝试,用 Druid 替换 HBase作为 Kylin 的存储。
Apache Kylin 1.5 引入了可插拔架构,将计算和存储等模块做了解耦,使得开发替代 HBase 的存储引擎变成可能。在这里我结合美团工程师康凯森的设计文档,简要介绍Kylin on Druid 的主体设计思想(图9和图10来自于参考[1]的附件,文字说明部分来自于参考链接中的[1]和[3])。
构建Cube的流程
图9 构建Cube 流程
查询 Cube 的流程
图10 查询Cube 流程
Schema 映射
在这篇文章里,我们首先分析了Kylin 和 Druid 各自的特点和优势,以及Kylin on HBase 在一些情况下性能不佳的原因;然后基于症状寻找解决办法,得出使用 Druid 作为 Kylin 存储引擎的可行方案;接下来分析了美团开发的 Kylin on Druid 的架构和流程。关于 Kylin on Druid 的使用方式和性能分析,以及Kylin on Druid 目前有哪些尚待完善的部分,请期待下篇文章。
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 加速
同等规模资源、同等量级数据、同一套数据处理逻辑,处理耗时下降一半
专家支持
试用部署、生成数据、性能对比各操作环节在线支持