Apache Kylin : Analytical Data Warehouse for Big Data
Welcome to Kylin Wiki.
摘要
Kylin 社区于 2021 年 08 月 30 日发布 Apache Kylin 4.0.0,这是 Kylin 4.X(Kylin on Parquet) 的第一个正式版本。Apache Kylin 的目标是成为一个高性能,低云上 TCO 的开源 OLAP 平台。 Kylin 4 升级了架构,使 Kylin 的学习、部署、调优更加简单,也使得在云上的部署、扩容更加简单。如果你对技术架构的细节感兴趣的话,欢迎阅读我们的技术文章:https://kylin.apache.org/blog/2021/07/02/Apache-Kylin4-A-new-storage-and-compute-architecture/ 。
为了使得新老用户能够简单直接地了解 Kylin3 和 Kylin 4 的性能差别,Kylin 发布小组在一个标准的软硬件环境,提供一个易于复现、易于观测的性能测试方式,从而为用户提供不同版本之间 Kylin,乃至不同 OLAP 工具之间性能比较的手段。由于笔者比较熟悉 AWS 系列产品,所以这里选择 AWS 平台的 EMR 产品作为测试平台。
准备
硬件资源一览
资源类型 | 资源大小 |
---|---|
单节点内存 | 64GB |
单节点 vCPU | 16 |
节点类型 (EC2 Instance Type) | m5.4xlarge |
单节点硬盘(EBS) | 磁盘空间 : (400 or 700) GB * 2 磁盘类型 : SSD |
单节点网络带宽 | Up to 10 Gbps |
单节点磁盘带宽 | 4,750 Mbps |
集群节点数量 | 4 Core Node + 1 Master Node |
集群 Yarn 可供使用内存 | 204.80 GB (51.2 GB * 4) |
集群 Yarn 可供使用核心 | 52 (13 * 4) |
集群 HBase 可供使用的 Java 堆 | 192 GB (48 * 4) |
备注
- 什么是vCPU?Each vCPU is a thread of either an Intel Xeon core or an AMD EPYC core, except for M6g instances, A1 instances, T2 instances, and m3.medium.
- 关于选用的节点(EC2)的详细硬件信息, 请访问 AWS 官网:https://aws.amazon.com/ec2/instance-types
- Kylin 3 使用磁盘空间较多,所以 Core 节点使用数据盘尺寸为 700GB;与此相对的,Kylin 4 的集群 Core 节点数据盘尺寸为 400GB
- 创建 EMR 集群的描述文件见附件
Hadoop 组件版本一览
组件 | 版本 |
---|---|
Kylin | 3.1.2 & 4.0.0 |
EMR | emr-5.31.0 |
Java | open jdk 1.8.0_265 |
Hadoop | 2.10.0-amzn-0 |
Hive | 2.3.7-amzn-1 |
HBase | 1.4.13 |
Spark | 2.4.6 |
备注
- 关于AWS EMR Hadoop 的更多版本信息,请访问官网 https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-release-5x.html#emr-5310-components
性能度量标准一览
度量 | 说明 |
---|---|
Cubing Duration | 从原始数据加载数据,构建为 Cube 过程的耗时 |
Storage Size | Cube 占据的磁盘空间 |
Response Time | TPC-H/SSB 查询集对应的 Response Time |
QPS (Max) | 持续十五分钟的并发查询测试,取最大的 QPS 作为结果 |
测试步骤
- 准备测试需要的 JMeter 文件,创建 EMR 集群的脚本
- 按照 scale factor = 10 分别创建 TPC-H 和 SSB 的数据文件,保存到 S3
- 创建 EMR 集群,根据不同 Kylin 的版本,对应的 Hadoop 组件有所不同,具体参考附件提供的脚本
- 下载 TPC-H 和 SSB 的数据文件,Hive 建表
- 部署和启动 Kylin 实例
- 导入 TPC-H 或者 SSB 的 Kylin 元数据,触发构建任务
- 记录 “Cubing Duration” 和 “Storage Size”
- 下载 JMeter 文件,在三分钟的预热查询后,依次执行单线程串行查询测试,多线程并发查询测试,每轮测试 15 分钟,测试完成收集保存 JMeter 的报告文件
- 释放集群资源,测试结束
测试结果
TPC-H 基准结果
Metrics | Kylin 3.1.2 | Kylin 4.0.0 |
---|---|---|
Cubing Duration | 287.75 min | 107.61 min |
Storage Size | 960.033 GB | 263.428 GB |
QPS (Max) | 0.23 | 1.23 |
平均查询响应时间对比
并发测试对比
对于 Kylin 4,我们做了单线程和四线程查询性能对比测试,结果如下。
SSB 基准结果
Metrics | Kylin 3.1.2 | Kylin 4.0.0 |
---|---|---|
Cubing Duration | 16.2 min | 12.33 min |
Storage Size | 16.7 GB | 12.04 GB |
QPS (Max) | 34.61 | 31.24 |
平均查询响应时间对比
结论
数据加载时间和索引尺寸
相对 Kylin 3 的 MR 构建引擎,得益于较高的资源利用率,同时减少了转换为 HFile 的步骤,Kylin 4 大大减少构建 Cube 使用的时间,构建时间(Cubing Duration)减少了 62.6%;
由于 Kylin 3 存在两份不同格式的索引文件,并且列式存储的 Parquet 使用的空间也较少,Kylin 4 的索引文件磁盘空间(Storage Size)也大幅降低了 72.56%。
查询性能
在复杂查询场景下,Kylin 3 查询优化难度较大,需要对 HBase RS Server、Kylin Query Server 进行反复优化,并且压力测试场景下出现查询节点不稳定,查询响应时间随时间进行不断变差的情况;Kylin 4 由于去除了Query Server 的单点瓶颈,Response Time 和 QPS 都有明显提升,在 TPC-H 查询集上,Kylin 4 有 5-7 倍的提升,其并发也有 4 倍的提升。
在点查询场景下,Kylin 4 经过一些基本的调参,性能也能满足亚秒级查询的需求,与 Kylin3 表现相对比较接近。
学习成本和调参难度
相对 Kylin 3 有众多的构建步骤,同时也依赖多种组件,如 Hive、MapReduce、HBase,需要学习和了解多种技术架构,熟悉多种组件参数配置,学习成本和调参难度较大。
与此对应,Kylin 4 构建和查询都统一切换到流行的 Spark 计算引擎,新用户上手 Kylin 4,学习和调参基本只需要掌握 Spark 即可,这些学习材料可以说很容易找到,并且常用的参数项要远远少于 Kylin 3。
其它
由于时间原因,这里 Kylin3 的构建过程并没有使用 Spark 和 Flink 来进行测试,我们相信如果使用 Spark 和 Flink 作为构建引擎, Kylin 3 的构建速度会得到一定程度的提升,但是由于存在转换为 HFile 的步骤, Kylin 3 仍会慢于 Kylin 4。
囿于精力和个人水平,这次测试过程并没有做到百分百的发挥不同版本的最好水平,笔者在此特附上性能测试使用的配置文件、脚本、HTML测试报告,欢迎大家多多尝试和发现更多有趣的结论。谢谢大家。
文档和附件
- Kylin 4 with TPC-H https://github.com/Kyligence/kylin-tpch/issues/6