Apache Kylin 云原生架构 思考及规划

演讲人 史少锋

Kyligence 首席架构师 Apache Kylin PMC & Committer

Effective Cloud User Group www.ecug.org 关于 Apache Kylin

Extreme OLAP Engine for Big Data

Apache Kylin™ 是一个开源的分布式分析引擎,为 Hadoop 等大 型分布式数据平台之上的超大规模数据集通过标准 SQL 查询及多 维分析(OLAP)功能,提供亚秒级的交互式分析能力。

官方网站: https://kylin.apache.org

Effective Cloud User Group www.ecug.org 发展历史

2014年10月 2015年11月 2017年4月 开源并加入 毕业成为 Apache 发布 Kylin-2.0, 支持 Apache 孵化器项目 顶级项目 雪花模型和 Spark

2013年9月 2015年9月 2016年9月 2019年12月 项目启动 InfoWorld 二次获得 InfoWorld 发布 Kylin 3.0,支持 最佳开源大数据工具奖 最佳开源大数据工具奖 实时分析

Effective Cloud User Group www.ecug.org Apache Kylin 基础架构

- Build OLAP cube on Hadoop Data analytics Interactive Reporting Dashboard - Support TB to PB level data

- Sub-second query latency

- ANSI-SQL OLAP / Data mart Apache Kylin - JDBC / ODBC / REST API

- BI integration

Hive / Kafka / Hadoop MR/Spark HBase / Parquet - Web GUI RDBMS - LDAP/SSO

Effective Cloud User Group www.ecug.org OLAP 与 OLAP Cube

联机分析处理(英语:Online analytical processing),简称OLAP,是计算机技 术中快速解决多维分析问题(MDA)的一种方法。– 维基百科

Cube 是 OLAP 的核心数据结构,基本操作:

• 上卷 Roll-up

• 下钻 Drill-down

• 切片 Slice and dice

• 旋转 Pivot

Effective Cloud User Group www.ecug.org 理论基础:空间换时间

• Cuboid: 一种维度组合

• Cube: 所有的维度组合

• 每个 Cuboid 可以从上层 Cuboid 聚合计算而来

Kylin 会选择满足条件的最小的 Cuboid 回答查询

Effective Cloud User Group www.ecug.org 无 Cube 的 SQL 执行

select l_returnflag, o_orderstatus, Sort sum(l_quantity) as sum_qty, sum(l_extendedprice) as sum_base_price from Agg v_lineitem inner join v_orders on l_orderkey = o_orderkey Filter where l_shipdate <= '1998-09-16' 无预计算, 全部现场计算 group by Join l_returnflag, o_orderstatus order by l_returnflag, Table Table o_orderstatus;

时间复杂度 O(N)

Effective Cloud User Group www.ecug.org 使用 Cube 的 SQL 执行

Sort

Agg Sort

Filter Filter

有预计算,基于 出结果, Join Cube I/O 少,计算少,延迟低 Cube 预聚合数据 Table Table

时间复杂度 O(1)

Effective Cloud User Group www.ecug.org 性能对比

PB 级数据上的亚秒级查询能力

条SQL响 不同数据量性能化 12 90 80 10 70 8 60 (s) (s) 50 6 40

Latency 4 Latency 30 20 2 10 0 0 1.1 1.2 1.3 2.1 2.2 2.3 3.1 3.2 3.3 3.4 4.1 4.2 4.3 0 10 20 30 40 50 SSB Queries Data Scale Kylin SQL on Hadoop Kylin SQL on Hadoop

Effective Cloud User Group www.ecug.org 和 BI 工具的无缝集成

支持各种开源及商业 BI 工具

Effective Cloud User Group www.ecug.org 全球用户认可

全球 1000+ 用户

Effective Cloud User Group www.ecug.org Kylin 基于 Hadoop /HBase 架构的局限

Hadoop 运维困难

• 计算与存储紧耦合,扩容/缩容难 HBase 不适合 OLAP 场景 • 组件多,架构复杂,学习成本高 • 为写多读少场景而设计,适合小量的 • 问题排查难,故障恢复慢 写和读,不适合大范围读

• 整体拥有成本高 • 索引简单,不适合复杂检索

• 非真正列存,I/O 消耗大

• MPP 架构,难以下压复杂计算,存在 单点

• 故障恢复、升级等困难

Effective Cloud User Group www.ecug.org 云计算正在吞噬整个世界,包括 Hadoop

云上大数据处理的基础:存储与计算分离

• 更加灵活地 scale,无需担心数据的持久

用对象存储代替 HDFS 本地磁盘存储 用容器代替 YARN 管理资源

• 近乎无限的容量 • 更好的应用隔离

• 更高的可靠性和持久性 • 更高的资源利用率

• 按实际使用量付费 • 全方位的运营监控

Effective Cloud User Group www.ecug.org 云原生架构正在成为主流

持续集成/持续交付 敏捷开发

容器编排

Effective Cloud User Group www.ecug.org Apache Kylin 如何适应这一趋势?

Effective Cloud User Group www.ecug.org 第一步:重构 – 核心组件可插拔 [已完成]

3rd Party App SQL-Based Tool (Web App, Mobile…) (BI Tools: Tableau…)

REST API JDBC/ODBC

SQL SQL 将数据源、执行引擎和存储结构抽象为接 REST Server 口,允许支持更多的数据源接入,也支持采 Query Engine 用其它技术作为构建与存储引擎 Low Latency - Routing Seconds

Hadoop Engine Abstraction DataOLAP Hive CubeCubes Kafka Metadata Storage Abstraction (HBase) Abstraction Data SourceData Cube Builder Source Data (MapReduce…) Key Value Data

Effective Cloud User Group www.ecug.org 可插拔架构带来扩展的可能

Hive Adaptor

Hive Source …

Map-reduce Spark Hbase Adaptor Adaptor Adaptor JDBC Adaptor JDBC Parquet Adaptor Source

保存 Cube … … 加载数据源 Compute Engine Data Source Storage

Effective Cloud User Group www.ecug.org 第二步:Spark 代替 MapReduce 进行构建 [已完成]

RDD-5

Apache Spark 正在取代 Hadoop 成为大数据处理的核心技术

RDD-4 Kylin 利用 Spark 进行 Cube 计算:

• 将每一层的 cuboid 抽象为一个 Spark 弹性数据集(RDD) RDD-3

• 使用 Cache 中的父 RDD 来生成子 RDD

RDD-2 • 子 RDD 生成后,导出并清理父 RDD

RDD-1

Effective Cloud User Group www.ecug.org Full on Spark 引擎

所有的构建步骤都使用 Spark 任务执行,为构建脱离 Hadoop 提供可能

Join Aggregate Cleanup

• Flat Table • Base Cuboid • Data Source • Dim Dictionary • Encoded Flat Table • Storage

Distinct Encode Aggregate

Effective Cloud User Group www.ecug.org 使用 Spark 构建的优点

• 构建效率提升1倍以上

ü 节省1半以上的时间

• 简化 Kylin 的构建逻辑

ü 使用函数式编程来精简代码

• 向 Cloud Native 迈出重要一步

ü Spark 可以独立部署,可以容器运行 ü 抛去对 Hadoop 平台的依赖

Effective Cloud User Group www.ecug.org 第三步: Docker 运行 Kylin [已完成]

Kylin 查询服务本身无状态,天然适合 docker 化;

通过 Zookeeper 注册和协调多个节点角色分配

Effective Cloud User Group www.ecug.org 用 Docker 运行 Kylin

1. 执行镜像拉取命令

2. 运行容器

3. Enjoy Kylin

Effective Cloud User Group www.ecug.org 第四步: Kubernetes 部署 Kylin [开发中]

Job Query Query Query

Effective Cloud User Group www.ecug.org 使用 Kubernetes 部署 Kylin 集群

1. 创建 ConfigMap 以配置 Kubernetes 资源对象

2. 创建 Service 和 StatefulSet

3. Enjoy Kylin cluster

Effective Cloud User Group www.ecug.org 第五步:Parquet 代替 HBase(开发中)

Parquet 存储的优点

• 以原生 格式作为 Cube 存储,自带 schema 和 编码,更易于与大数据生态整合

• 真正列存,I/O 效率高,压缩率高

• 与 Spark 有很好的结合,利用 Spark 并行化、向量化技术提 速

• 可存储在对象存储上,实现服务无状态化

Effective Cloud User Group www.ecug.org 第六步:查询分布式化(开发中)

从基于 的单点执行到基于 Spark DataFrame 的分布式执行 Sort SortDF

• 基于 Calcite 的查询引擎,将各个节点 Cube 数据拉取 Aggr AggDF 到查询节点进行后续处理 • 当查询复杂、数据量大的时候,容易卡死和 OOM Project • 基于 Spark DF 的查询执行器,所有步骤均分布式并 ProjectDF 行执行 • 消除单点,提升稳定性 Filter FilterDF

Cube CuboidDF

基于 Calcite 基于 Spark DF 分布式计算 (分布式+单机) (完全分布式) Effective Cloud User Group (Coprocessor) www.ecug.org Apache Kylin NG目标:云原生的大数据 OLAP 引擎

Interactive Data analytics Reporting Dashboard Metadata Apache Kylin Security OLAP / Data mart

Resource Orchestration Container Service (K8S, Docker)

Data Lake Source file, Streams, Parquet on Object Storage (S3, ADSL)

Effective Cloud User Group www.ecug.org Thanks

Effective Cloud User Group www.ecug.org