Apache Kylin v2.6.0 正式发布

01 - 23 - 2019

近日,Apache Kylin 社区很高兴地宣布,Apache Kylin v2.6.0 正式发布。

 

Apache Kylin 是一个开源的分布式分析引擎,旨在为极大数据集提供 SQL 接口和多维分析(OLAP)的能力。

 

Apache Kylin v2.6.0 是继 v2.5.0 后的一个新功能版本,该版本引入了很多有价值的改进,完整的改动列表请参见release notes。在这里,我们将挑一些主要改进做说明。

 

针对以JDBC为数据源的SDK

 

Kylin 目前已经支持通过 JDBC 连接包括 Amazon Redshift, SQL Server 在内的多种数据源。

 

为了便于开发者更便利地处理各种 SQL 方言(dialect) 的不同,以更加简单地开发新的 JDBC 数据源,Kylin 提供了相应的 SDK 和统一的 API 入口:

 

* 同步元数据和数据
* 构建 Cube
* 当找不到相应的 Cube 来解答查询时,下推查询到数据源

 

更多内容参见 KYLIN-3552。

 

使用 Memcached 作 Kylin 的分布式缓存

 

在过去,Kylin 对查询结果的缓存不是十分高效,主要有以下两个方面的原因:

 

* 一个是当 Kylin 的 metadata 发生变化时,会主动盲目地去清除大量缓存,使得缓存会被频繁刷新而导致利用率降低。
* 另一点是由于只使用本地缓存而导致 Kylin server 之间不能共享彼此的缓存,这样查询的缓存命中率就会降低。

 

本地缓存的一个缺点是大小受到限制,不能像分布式缓存那样水平扩展。这样导致能缓存的查询结果量受到了限制。

 

针对这些缺陷,我们改变了缓存失效的机制,不再主动去清理缓存,而是采取如下的方案:

 

  1. 在将查询结果放入缓存之前,根据当前的元数据信息计算一个数字签名,并与查询结果一同放入缓存中。
  2. 从缓存中获取查询结果之后,根据当前的元数据信息计算一个数字签名,对比两者的数字签名是否一致。如果一致,那么缓存有效;反之,该缓存失效并删除。

 

我们还引入了 Memcached 作为 Kylin 的分布式缓存。这样 Kylin server 之间可以共享查询结果的缓存,而且由于 Memcached server 之间的独立性,非常易于水平拓展,更加有利于缓存更多的数据。

 

相关开发任务是 KYLIN-2895, KYLIN-2894, KYLIN-2896, KYLIN-2897, KYLIN-2898, KYLIN-2899。

 

ForkJoinPool 简化 fast cubing 的线程模型

 

在过去进行 fast cubing 时,Kylin 使用自己定义的一系列线程,如 split 线程,task 线程,main 线程等等进行并发的 Cube 构建。

 

在这个线程模型中,线程之间的关系十分的复杂,而且对异常处理也十分容易出错。

 

现在我们引入了 ForkJoinPool,在主线程中处理 split 逻辑,构建 cuboid 的任务以及子任务都在 fork join pool中执行,cuboid 构建的结果可以被异步的收集并且可以更早地输出给下游的 merge 操作。

 

更多内容参见 KYLIN-2932。

 

改进 HLLCounter 的性能

 

对于 HLLCounter, 我们从两方面进行了改进:构建 HLLCounter 和计算调和平均的方式。

 

  1. 关于 HLLCounter 的构建,我们不再使用merge的方式,而是直接copy别的HLLCounter里面的registers
  2. 关于计算 HLLCSnapshot 里面的调和平均,做了以下三个方面的改进:

    * 缓存所有的1/2^r
    * 使用整型相加代替浮点型相加
    * 删除条件分支,例如无需检查 registers[i] 是不是为0

 

更多内容参见 KYLIN-3656。

 

改进 Cube Planner 算法

 

在过去,cube planner 的 phase two 增加未被预计算的 cuboid 的方式只能通过 mandatory cuboid 的方式。而一个 cuboid 是否为 mandatory,又有两种方式:手动设置,或者查询时 rollup 的行数足够大。

 

这里通过判断查询时 rollup 的行数是否足够大来判断是否为 mandatory cuboid 的方式有两大缺陷:
* 一是估算 rollup 的行数的算法不是很好
* 二是很难设立一个静态的阈值来做判定

 

现在我们不再从 rollup 行数的角度看问题了。一切都是从 cuboid 行数的角度看问题,这样就和 cost based 的 cube planner 算法做了统一。

为此我们通过使用 rollup 比率来改进了未被预先构建的 cuboid 的行数的估算,然后让 cost based 的 cube planner 算法来判定哪些未被构建的 cuboid 该被构建,哪些该被遗弃。

通过这样的改进,无需通过设定静态的阈值来推荐 mandatory cuboid 了,而 mandatory cuboid 只能被手动设置,不能被推荐了。

 

更多内容参见 KYLIN-3540。

 

下载

 

要下载Apache Kylin v2.6.0源代码或二进制包,请访问下载页面:

Apache Kylin | Download​kylin.apache.org

 

升级

 

参考升级指南:

Upgrade From Old Versions​kylin.apache.org

 

反馈

 

如果您遇到问题或疑问,请发送邮件至 Apache Kylin dev 或 user 邮件列表:

dev@kylin.apache.org,user@kylin.apache.org

 

在发送之前,请确保您已通过发送电子邮件至:

dev-subscribe@kylin.apache.org 或 user-subscribe@kylin.apache.org 订阅了邮件列表。

 

感谢 eBay 团队钟阳红(Apache Kylin Committer & PMC)撰稿!

近期文章

【Kyligence 公开课】视频回顾—— Superset设计与SQL查询

【Kyligence 公开课】视频回顾—— Superset设计与SQL查询

  公开课现场座无虚席   在上周举办的 2019 年 Kyligence 公开课 NO. […]

详细阅读

【干货+案例】保险行业怎么实现业财融合?

【干货+案例】保险行业怎么实现业财融合?

作者 | 周倚平 编辑 | Sammi   不管是“全球新增的600万亿欧元保费中,中国市场占八成” […]

详细阅读

【干货】公司年终业绩分析报告,你的数据统计对么?

【干货】公司年终业绩分析报告,你的数据统计对么?

作者 | 陈晓杰 编辑 | Sammi   每年年终或新年伊始,公司管理层都要从各个角度比如部门、产 […]

详细阅读