内容简介:近日,Apache Kylin 社区很高兴地宣布,Apache Kylin v2.6.0 正式发布。Apache Kylin 是一个开源的分布式分析引擎,旨在为极大数据集提供 SQL 接口和多维分析(OLAP)的能力。Apache Kylin v2.6.0 是继 v2.5.0 后的一个新功能版本,该版本引入了很多有价值的改进,完整的改动列表请参见release notes:
近日,Apache Kylin 社区很高兴地宣布,Apache Kylin v2.6.0 正式发布。
Apache Kylin 是一个开源的分布式分析引擎,旨在为极大数据集提供 SQL 接口和多维分析(OLAP)的能力。
Apache Kylin v2.6.0 是继 v2.5.0 后的一个新功能版本,该版本引入了很多有价值的改进,完整的改动列表请参见release notes:
https://kylin.apache.org/docs/release_notes.html
在这里,我们将挑一些主要改进做说明。
针对以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 之间不能共享彼此的缓存,这样查询的缓存命中率就会降低。
本地缓存的一个缺点是大小受到限制,不能像分布式缓存那样水平扩展。这样导致能缓存的查询结果量受到了限制。
针对这些缺陷,我们改变了缓存失效的机制,不再主动去清理缓存,而是采取如下的方案:
-
在将查询结果放入缓存之前,根据当前的元数据信息计算一个数字签名,并与查询结果一同放入缓存中。
-
从缓存中获取查询结果之后,根据当前的元数据信息计算一个数字签名,对比两者的数字签名是否一致。如果一致,那么缓存有效;反之,该缓存失效并删除。
我们还引入了 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 和计算调和平均的方式。
-
关于 HLLCounter 的构建,我们不再使用merge的方式,而是直接copy别的HLLCounter里面的registers
-
关于计算 HLLCSnapshot 里面的调和平均,做了以下三个方面的改进:
-
关于计算 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源代码或二进制包,请访问下载页面:
http://kylin.apache.org/download
升级参考升级指南:
https://kylin.apache.org/docs/howto/howto_upgrade.html
反馈如果您遇到问题或疑问,请发送邮件至 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)撰稿!
文章转载自公众号: apachekylin
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 掘金 AMA:听分布式架构 SOFA 的开源负责人黄挺聊分布式架构和开源
- Kubernetes云原生开源分布式存储介绍
- 宝马开源RAMSES分布式3D渲染系统
- 3个开源分布式跟踪系统,都很不错!
- Facebook开源分布式日志存储系统LogDevice
- 开源 | GateKeeper:滴滴开源的使用 Go 编写的不依赖分布式数据库的 API 网关
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。