Apache Kylin v3.1.0 重点功能推介
Presto 查询下压引擎
之前版本的 Kylin 提供了查询下压功能,该功能对于 Hive 数据源的下压有比较好的支持,但是对 Hive 以外的具有不兼容语法的数据源,用户就容易遇到因为种种方言不兼容而导致查询下压失败的问题。
为了解决这个问题,Kyligence 贡献了基于 Data Source SDK 开发的 Presto 查询下压引擎,该功能通过 Calicte 完成了Kylin 和 Presto 方言翻译,大大提升了查询下压的成功率。
Presto 下压引擎的使用文档请参考 :
http://kylin.apache.org/docs/tutorial/query_pushdown.html
02
崭新的 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
03
初步的 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 部署能够带来以下收益:
提高系统可用性,并实现部署的运维过程的自动化;
扩容(scale up/scale out)更加方便;
可维护性得到显著提高;
借助 Kubernetes 带来的高度可移植性,使得在不同环境之间的迁移,变得逻辑简单而且结果可靠;
系统资源的管理和监控有了简便而且统一的方式,可以进一步提升资源使用率。
Kylin on Kubernetes 部署文档可以参考:
http://kylin.apache.org/cn/docs/install/kylin_on_kubernetes.html
04
性能提升显著的新版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 的实现,已经能够满足以下要求:
分布式构建全局字典
突破基数限制
提升构建速度
降低单节点所需内存
在滴滴的内部测试中,使用 Hive Global Dictionary V2,字典编码(MR Job部分)基本可以恒定在 15 分钟内完成,并且可以在不同的 Cube 之间实现字典复用。
Hive Global Dictionary V2的使用文档可以参考:
http://kylin.apache.org/docs/howto/howto_use_hive_mr_dict.html
05
增强的 Cube 迁移服务 [3]
Kylin v3.1.0 中发布的增强的 Cube 迁移服务由 eBay 贡献给 Kylin 社区。在过去版本中,Cube 迁移前的质量及兼容性验证完全是靠人工校验,出现的质量问题及兼容问题都需要人工沟通和修改。针对上述不足,Kylin v3.1.0 增强了如下功能:
引入了一系列规则对 Cube 质量及 Hive 元数据兼容性进行后端校验,比如生产环境下的目标项目是否存在,生产环境下的 Hive 表是否与测试环境下的一致,Cube 膨胀率和查询效率是否符合预期值(可通过配置项设置合理的值)等;
通过邮件形式来发送 Cube 迁移申请给管理员,由管理员审核后进行迁移,同时将迁移结果以邮件形式发送给请求者;
支持通过工具类 CubeMigrationCrossClusterCLI 进行跨 Hadoop 集群的 Cube 迁移。之前的版本中,Cube 迁移的一个前置条件是两个 Kylin 实例必须使用同一个 Hadoop 集群,而本次发布的 Cube 迁移功能则支持跨 Hadoop 集群进行迁移,同时支持迁移 Cube 数据。
Cube 迁移服务的使用文档可以参考:
http://kylin.apache.org/docs/tutorial/cube_migration.html
06
特别感谢
在文末特别对贡献这些功能代码到 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
活动报名
7 月 18 日(下周六)20 点
直播 | Apache Kylin Meetup
eBay 和爱奇艺的嘉宾们等着你~
现在就去报名吧
↓↓↓扫描二维码免费报名↓↓↓
往期推荐
点“阅读原文”下载 Kylin v 3.1.0