Apache Kylin v3.1.0 重点功能推介

Author
Apache Kylin
2020年 7月 14日

Apache Kylin v3.1.0 已于上周正式发布,其中包含了许多值得一试的新功能,本文选择了 Presto 查询下压引擎、Flink 构建引擎、Kylin on Kubernetes 解决方案、新版 Hive 全局字典、增强的 Cube 迁移服务这五项重点功能进行介绍。


Presto 查询下压引擎

之前版本的 Kylin 提供了查询下压功能,该功能对于 Hive 数据源的下压有比较好的支持,但是对 Hive 以外的具有不兼容语法的数据源,用户就容易遇到因为种种方言不兼容而导致查询下压失败的问题。

为了解决这个问题,Kyligence 贡献了基于 Data Source SDK 开发的 Presto 查询下压引擎,该功能通过 Calicte 完成了Kylin 和 Presto 方言翻译,大大提升了查询下压的成功率。

Presto 下压引擎的使用文档请参考 : 
http://kylin.apache.org/docs/tutorial/query_pushdown.html


崭新的 Flink 构建引擎

Flink Engine 由腾讯贡献到 Kylin 社区(KYLIN – 3758)。在过去版本中,Kylin 只支持 MapReduce 和  Spark 两种构建引擎,为了扩大 Kylin 生态,进一步提升构建速度,Kylin v3.1.0引入了 Flink 作为构建引擎,用户可以很容易的使用 Flink 构建,只需要配置 FLINK_HOME,然后在创建 Cube 时选择 Build Engine 为 Flink,就可以体验这一功能。Flink 基于 Google 的  DataFlow 模型以及 Streaming First 的设计理念要比  Spark 在流处理领域拥有先天的优势。

Flink Cube 引擎基于 Kylin 原先的插件化的架构,是一个相对独立的模块,继承 IBatchCubingEngine 接口实现了 FlinkBatchCubingEngine2,跟 Kylin 其他部件没有产生太多的耦合。它整体上延续了 Spark Engine 的设计与实现,但由于 Spark 跟 Flink 的 DataSet API 存在着一定程度的差异,所以开发过程中需要进行一些适配工作。

Flink Engine 开发完成后,我们对它进行了测试。测试环境为 CDH5 集群,包括 4 个物理节点,每个物理节点 32 Core,125G 内存,数据源是基于 SSB 数据集,事实表包含 6 千万记录,通过分析 “Build Cube With Spark”/”Build Cube With Flink” 步骤的日志发现,使用  Spark 构建使用了 15.36 分钟,使用 Flink 构建使用了 12.64 分钟,Flink Engine 构建用时减少了 17.7%。

Flink Engine 的使用文档可以参考:
http://kylin.apache.org/docs/tutorial/cube_flink.html


初步的 Kylin on Kubernetes 解决方案 [1]

Kylin on Kubernetes 方案由 eBay 实现并贡献到 Kylin 社区(KYLIN-4445)。Kylin 在 eBay 已经运行了 超过 5 年,起初直接运行在物理服务器上。由于 Data Center 的迁移和 Tech Refresh 的需求,eBay 于 2019 年初开始了把 Kylin 迁移到云上的计划,并于上半年把  Kylin  整体迁移到了 eBay 的 Kubernetes 平台 Tess 上,开启了 Kylin on Kubernetes 的时代。

Kylin on Kubernetes 使用 Kubernetes 推荐的 Docker 作为镜像,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 或 Windows 机器上,也可以实现虚拟化。Kylin 的 Docker 镜像分为两个 Dockerfile: Hadoop-client 和 Kylin,Kylin 的 Dockerfile 是基于 Hadoop-client 的。

相对于原来的部署方案,使用 Kylin on Kubernetes 部署能够带来以下收益:

  1. 提高系统可用性,并实现部署的运维过程的自动化;
  2. 扩容(scale up/scale out)更加方便;
  3. 可维护性得到显著提高;
  4. 借助 Kubernetes 带来的高度可移植性,使得在不同环境之间的迁移,变得逻辑简单而且结果可靠;
  5. 系统资源的管理和监控有了简便而且统一的方式,可以进一步提升资源使用率。

Kylin on Kubernetes 部署文档可以参考:
http://kylin.apache.org/cn/docs/install/kylin_on_kubernetes.html


性能提升显著的新版Hive全局字典 [2]

Hive Global Dictionary 的第二版(KYLIN-4342)由滴滴贡献到 Kylin 社区,并在 Kylin v3.1.0 正式发布。在此之前,滴滴已经向 Kylin 社区贡献过 Hive Global Dictionary 第一版。

实际上,Kylin 从 1.5.3 版本开始就支持全局字典功能,对于基数不大(一亿以内)的情况能够起到很好的支持,当时的版本有两个比较明显的缺陷,一是全局字典是在 Job Server 上通过单线程的方式构建,随着数据的增多构建时长变得不可控;另外,随着数据的累积,字典构建对 Job Server 的内存需求也不断增多,其性能基本不能满足我们当时更高基数全局字典构建的需求。

基于这样的背景,滴滴内部对 Hive Global Dictionary 进行了 3 版迭代,最终的这一版就是 Kylin 社区称之为 Hive Global Dictionary V2 的实现,已经能够满足以下要求:

  1. 分布式构建全局字典
  2. 突破基数限制
  3. 提升构建速度
  4. 降低单节点所需内存

在滴滴的内部测试中,使用 Hive Global Dictionary V2,字典编码(MR Job部分)基本可以恒定在 15 分钟内完成,并且可以在不同的 Cube 之间实现字典复用。

Hive Global Dictionary V2的使用文档可以参考:
http://kylin.apache.org/docs/howto/howto_use_hive_mr_dict.html


增强的 Cube 迁移服务 [3]

Kylin v3.1.0 中发布的增强的 Cube 迁移服务由 eBay 贡献给 Kylin 社区。在过去版本中,Cube 迁移前的质量及兼容性验证完全是靠人工校验,出现的质量问题及兼容问题都需要人工沟通和修改。针对上述不足,Kylin v3.1.0 增强了如下功能:

  1. 引入了一系列规则对 Cube 质量及 Hive 元数据兼容性进行后端校验,比如生产环境下的目标项目是否存在,生产环境下的 Hive 表是否与测试环境下的一致,Cube 膨胀率和查询效率是否符合预期值(可通过配置项设置合理的值)等;
  2. 通过邮件形式来发送 Cube 迁移申请给管理员,由管理员审核后进行迁移,同时将迁移结果以邮件形式发送给请求者;
  3. 支持通过工具类 CubeMigrationCrossClusterCLI 进行跨  Hadoop 集群的 Cube 迁移。之前的版本中,Cube 迁移的一个前置条件是两个 Kylin 实例必须使用同一个 Hadoop 集群,而本次发布的 Cube 迁移功能则支持跨 Hadoop 集群进行迁移,同时支持迁移 Cube 数据。

Cube 迁移服务的使用文档可以参考:
http://kylin.apache.org/docs/tutorial/cube_migration.html


特别感谢

在文末特别对贡献这些功能代码到 Kylin 以及参与本文编写的杨华,王小静,李凡凡,allenma,kyotoYaho,mingmwang,sanjulian,俞霄翔,张亚倩,张智超等同学表达一下感谢~


参考链接

[1] https://mp.weixin.qq.com/s/LdyGjXRj8KkrnGgpIdEVjA
[2] https://mp.weixin.qq.com/s/jK-nAOAxaI0k3_Yrt_KlLA
[3] http://kylin.apache.org/cn/docs/tutorial/cube_migration.html


如果想第一时间获得 Kylin 的资讯,请扫二维码,关注公众号。