顶级项目孵化的故事系列——Kylin的心路历程


顶级项目孵化的故事系列——Kylin的心路历程_第1张图片

本文目录

现在已经是名满天下的 Apache  Kylin,是 Hadoop 大数据生态系统不可或缺的一部分,要知道 Kylin 在项目的早期,可是以华人为主的项目团队,一路披荆斩棘,经过几年的奋斗,才在 Apache 基金会牢牢的巩固了自己的位置。Kylin 是本土第一个进入到世界顶级基金会的项目,它的经验是值得大家学习的。

以下内容根据演讲者在 COSCon'17 的演讲速记所整理。

演讲实录

今天主要介绍一下 Apache  Kylin 一路走过来的心路历程。

时间倒退到2014年,那时候 Kylin 刚开源,我们选择了将项目捐赠给 Apache 孵化器,后来经过了大约一年的时间,Kylin 顺利地从孵化器毕业,晋升为 Apache 的顶级项目。

此次的分享大概分如下这么几个部分:

第一是 Kylin 简介。国内叫 Kylin 的项目比较多,我们这个项目全名要加上 Apache,即 Apache Kylin。

第二,架构与核心,和其它大数据项目有什么不同。

第三是重点,叙述一下 Kylin 的开源之路。

第四是一点感慨和总结。

我叫史少锋,在2014年加入 Kylin 项目,是早期的贡献者之一,从开始给 Kylin 写代码,到现在运营社区,跟用户、开发者一起完善和改进 Kylin;期间也做了很多版本的发布。此外,Kylin 的文档也主要由我维护。

Kylin 项目诞生于 eBay,当初开源出去讲它是第一个由华人主导的项目,很多人还以为是 eBay 美国的华人工程师开发的,其实它是完完全全由 eBay 在上海的开发人员所开创、贡献出来的项目。当时国内进入 Apache 基金会的项目几乎还没有,Kylin 是第一个;现在这两年逐渐的多了起来,如 CarbonData,Eagle, Grffin, RocketMQ, WeeX 等。

Kylin 是在大数据生态中的一个项目,它解决的是在海量数据上进行快速查询的难题。这个项目之所以诞生在 eBay,也是因为 eBay 拥有海量数据,有迫切的交互分析的需求。

曾经 eBay 是 Teradata 最大用户,Teradata 的设备非常昂贵,每年 eBay 需要付给 TD 非常大一笔费用。但是 eBay 也是一家技术公司,为什么不能来自己自研一些技术,来取代或降低 TD 的使用呢?这是一件非常困难的事情,当时内部有很多争论,最后由在上海的韩卿带领的团队,通过研究和摸索做了出来。因为在 Hadoop 的生态中,很多项目代号都是动物,于是就找了中国神话中的动物麒麟来命名,象征吉祥和力量。

现在国内很多大的互联网公司都在用 Kylin,而且这个趋势正在往制造业、金融业等传统行业渗透。例如手机厂商 OPPO、VIVO、小米都在使用 Kylin 分析大数据。

顶级项目孵化的故事系列——Kylin的心路历程_第2张图片

什么是 Kylin?Kylin 的定位是什么呢?这张图非常清晰地显示了它在大数据生态的结构。它下面依赖的是 Hadoop 的分布式计算能力,对上提供的是标准 SQL 接口。它集成了 Hadoop 主流的技术,像 HDFS、Hive、HBase 等等。在 Hadoop 上做 SQL 查询的引擎有很多,比如说 Hive 本身就可以查询。Kylin 的 SQL 引擎跟它们有什么区别,为什么可以号称最快呢?原因是Kylin 是唯一一个在 Hadoop 上做预计算的分析引擎,其它技术都不是做预计算,他们主要的核心技术是大规模并行计算(MPP)。我们认为当数据量大到一定程度的时候,MPP 无法提供高性能,所以我们借鉴了传统的预计算的技术并把它移植到了 Hadoop 上,就有了 Kylin。这是 Kylin 与其它 SQL 引擎的本质区别。

下面是 Kylin 的两个特性。

超高性能;可以万亿数据上达到亚秒级的数据,典型案例来自今日头条,它的一个 Cube 里有3万亿条数据,90%的查询能够在1秒以内完成。

高并发;我们知道,一般性能上去以后,并发也就可以提高。Kylin 的另一大优势就是高并发。不少互联网公司把 Kylin 用在高并发的查询上,比如京东用在对外的数据接口上。比如美团,每日有130万次查询,99%的查询在1秒内。当然美团的技术能力是比较强的,我们团队有三个来自美团的 committer,他们对 Kylin 技术进行了深入的研究,帮助做了很多优化和改进。

下面是Kylin的架构。

顶级项目孵化的故事系列——Kylin的心路历程_第3张图片

Kylin 的设计非常巧妙,它没有做别人已经做的东西,而且充分利用了一些成熟技术,充分地发挥它们的优势。左边是 Kylin 支持的数据源,主要支持的数据源有批数据源 hive 和流数据源 kafka。把海量的数据抽取出来,接下来预计算怎么做呢?Kylin 整合了 MR, Spark;Spark 引擎是在 Kylin2.0 引进的。会并发对你的数据,根据建立的模型做预先的计算处理、编码等等。最后计算好的数据,会转换并存储到 HBASE。HBASE 是 Hadoop 上的海量数据库,是一个列式的,基于 KV 的 Storage 。它可以提供非常低延迟的查询,我们把关系型数据最终转成了 KV 的方式。但 Kylin 对外暴露的依然是 SQL 的接口,是关系型的模型。以前是怎么查 Hive 表,可以把这个 SQL 给到 Kylin,Kylin 会把这些 SQL 进行转换,变成对 Cube 的查询。从而最终基于先前的预计算的结果,再次的后计算。往往后计算就会非常快,在几十毫秒或者几百毫秒就完成结果,以上这些就是 Kylin 所做的事情。

Kylin 的安装部署非常的简单,它只有一个包,下载下来找一台机器就可以运行 Hadoop 的资源,不需要装到 Hadoop 上的每个节点。

Kylin 的核心就是 Cube 理论,大家如果学过数据仓库的话,Cube 是其中非常核心的一块。何为Cube就是存放多维聚合数据的集合。比如我们能想象到的一个三维的立方体,它有长宽高三个维度。通过长宽高三个值可以定位到一个小的数据格,在这个里面就可以存储数据。如果把这个概念延伸出去,可以有十维、二十维的 Cube。在线分析领域会按一些纬度去分析特定的指标,我们可以根据维度建立多维的向量空间,当查询来的时候,根据查询中所体现出的纬度和过滤条件去直接定位多维空间的数值,从而给到最终的结果。

比如这里是一个四维的 Cube,有时间纬度、商品纬度、地点纬度、供应商纬度,总共组合下来有16种纬度组合。每一个组合中每个纬度有自己的值,所以最终会形成一个大的 Cube。Cube 可以带来什么好处呢?它可以让查询比以前快很多倍,怎么快呢?这里看一个例子,它是一个典型的 SQL 查询,会查询多张表,按条件组装和过滤,过滤完以后还要做聚合,计算出结果后可能还会有排序。这样会形成一个从上到下的执行计划。当数据量加倍后,这个表的 Join 和聚合的计算量也会加倍,所以我们说没有预计算的查询引擎,它的时间复杂度是 O(N)。

顶级项目孵化的故事系列——Kylin的心路历程_第4张图片

如果我们把它计算成 Cube,在计算 Cube 的时候会预先把表做 join 及聚合。聚合完转换成 Cube,Cube 里面有很多 Cuboid 里面有很多的索引。最终查询过来的时候,透明地转换成右边的执行计划,以Cube 为起点,再去根据你的条件做一些过滤,再做少量的排序。由于在 Cube 中数据已经进行了聚合和索引以及压缩,所以查询响应非常快。它已经跟原始数据量的大小没有关系了,只跟数据模型的复杂度有关。一般业务的复杂度是基本稳定的,所以我们说用了 Kylin 后,查询时间复杂度可以降到 O(1)。

顶级项目孵化的故事系列——Kylin的心路历程_第5张图片

这里是网易提供的性能数据,比如网易云音乐经常要去找现在最流行的歌手和歌曲,这个查询量很大。之前用 Oracle 查询,延迟很高。用了 Kylin 预计算后,性能提升百倍、千倍甚至更多。Kylin 的架构适合做水平扩展,当需要的并发量更高,单个 Kylin 的节点不能满足的时候,只要相应的增加节点数就可以使得吞吐率得到线性的增长。

下面介绍一下Apache Kylin 的开源之路

顶级项目孵化的故事系列——Kylin的心路历程_第6张图片

Kylin 诞生于 eBay,因为 eBay 是一个全球性的公司,有世界级的市场,有非常多的交易数据、用户数据。eBay 分析师团队非常庞大,这些数据分析非常依赖于数据仓库,这些数据仓库是非常昂贵的。今天有越来越多的数据在 Hadoop 被加工、采集、转换,以前这些数据加工完以后,要到 TD 中才能做分析,首先这个架构就是割裂的架构,非常容易出错。我们想为什么不能在 Hadoop 直接做,当时也是做了各种各样的调研,做了很多的调研,试用了很多项目,但是不能解决 eBay 所遇到的问题。所以最后决定自己做。

当时 eBay 在上海有非常不错的工程师团队和工程师文化,所以韩卿就物色可以做这种事的人,然后找到了蒋旭,蒋旭对数据分析、搜索引擎比较了解,再加上在 eBay 做了 Hadoop 相关的开发,所以对 Hadoop 很懂,所以拿来书就开始研究。他想出一条路,在 Hadoop 上做预计算,然后由招兵买马找人做这个项目。这个项目从2013年开始做,加班加点差不多一年时间,在2014年的10月1号终于在 eBay 内部上了生产。上了生产的同一天就把代码放在 Github 上进行开源,为什么要开源?eBay 的主营业务是电商,技术并不是它的主要业务。另外 eBay 也是硅谷技术公司,本身用了很多开源技术,有开源的传统。在 Github 上开源出去以后,很快收获了很多个赞,有一些大佬看这个项目给予了非常高的评价。另外一个主要原因,Kylin 确实做了一件别人没有做的事情。随后有人提议,项目要不要进到 Apache?进 Apache 是最好不过了,因为大数据的项目基本上都在 Apache,进 Apache 相当于回归到它应该在的地方,而且这个社区知名度高,品牌度也高。所以2014年11月 Kylin 进入了 Apache 的孵化器,进入孵化器并不意味着就成功了,而是一个按照 Apache 要求进行孵化的过程,各项都要按照 Apache 要求来做,代码要迁移到 Apache 的仓库,committer 要签 Apache 的协议,使用的第三方类库许可证要做清理,不满足 Apache 的要求的许可证的依赖都要去除、剥离。

大概过了好几个月,在2015年的3月份,我们才做了第一个 Apache Release。第一个版本出来并不是容易安装,跟 Hadoop 的环境有关。所以在2015年的时候我们主要是解决用户各种各样的问题,来完善项目。期间很有意思的是美国有一个科技媒体 InfoWorld,每年它都会评选最佳开源软件。那年 Kylin 刚开源不到一年,它就把最佳开源大数据的奖项给了 Kylin。但是几个月以后才发现在 twitter 上被人@并恭喜,原因是我们都上不了 twitter。这个奖是独立评选的,我们甚至都没有得到通知,这给了我们一个很大的鼓舞,原来这个工具在国外也得到了这么高的评价。

在2015年底的时候,Luke(韩卿) 和 Apache 的主席建立了私人关系,让他们也知道了我们的项目。麒麟在2015年就被很多大厂商用于生产环境,包括百度、京东;这很重要,说明了项目的成熟度,它经受住了实战的考验。后来我们发起关于从孵化器毕业的讨论,这个讨论我们还以为会比较顺利,因为 Kylin 的社区活跃度比较高,代码的质量也毋庸置疑。但是有意思的是,因为这是第一个来自中国的项目,当时在投票的时候有人提出了质疑,甚至修改主题为讨论来自中国的开源项目。当时我看到这封邮件的时候,心里有一些气愤。他们说这些中国工程师他们总是喜欢在 QQ 群里面聊,他们不喜欢在邮件里讨论,这是不符合 Apache 的精神的,而且经常用中文讨论他们看不懂云云。这个邮件出来的时候,我其实是蛮生气的。Luke 说不要激动,随后 Luke 给了他们一个有力的回复,用数字证明了 Kylin 社区的活跃度。随后 Apache 一个资深的人出来说,要停止这样无意义的、有偏见性的讨论。当时的确有一些技术的 QQ 群,我也被人拉进去,后来我解释了,确实 Apache 不建议通过 QQ 群去讨论,有问题还是去社区发邮件。因为 QQ 群问了问题,我给你回答,下一个用户看不到这个问题,搜索引擎也没有办法检索到,这些知识没法被沉淀。之后我退了群,有问题在社区提问,下次有人问类似问题的时候不需要再回答,只需要给一个链接。

后来到投票毕业的时候,开始的投票都是+1赞成,突然有个 reviewer 给了个-1,因为他仔细扫描了我们的代码,发现前端页面有打包一个谷歌的字体文件,这个字体的 license 来源不明,不适合打包在 Apache 软件。当时我们紧急撤换字体,换到其它可用的字体,再补发一个新的版本,这位 reviewer 随后说我改变我的投票为+1。至此我们项目以全票通过的方式顺利从孵化器毕业了。

毕业成为顶级项目在我们看来还只是一个起点,它代表我们的项目得到了大家的认可,但前面还有更长的路要走。在2016年初的时候,当时的团队几名成员出来成立了一家公司,专门致力于 Kylin 的发展。这里有一个争论,你们是不是获得了知识产权呢?其实这个项目是捐献给了Apache 基金会,它不属于任何一家公司,它的知识产权是属于社区,属于大家的,每个人都可以致力于这样的开源项目做二次开发。我们成立公司以后,在2016年发布了 Kylin 的商业版KAP,因为一些行业和客户对产品有更高的需求,现在我们开源版和企业版一起在推动。2016年的时候 Kylin 又蝉联了最佳大数据工具的奖项,而且2016获奖的名单比2015年减少了一半,从22个变成了11个,足以说明了用户对 Kylin 的认可。

顶级项目孵化的故事系列——Kylin的心路历程_第7张图片

在今年 Kylin 版本已经最新发布到 2.2。接下来简要介绍一下 Kylin 版本的一些主要变化吧。第一个版本2014天10月的时候是比较简陋粗糙,很多用户在安装的时候遇到问题。1.0 版本的时候兼容性已经大大提高,大家拿去解压基本上就可以运行了,不像之前 0.7 的版本还要做很多手工配置。后来到 1.5 版本,对底层的存储引擎做了大幅改进,改成了分片的存储,使得它的性能提升若干倍。随后的 1.6 版本加入了对流式数据的支持,使得数据从产生到被查询到的时间大幅缩减。今年初更大的一个版本 2.0 发布,最大的变化是支持雪花模型,还有是对 Spark 的支持,使得构建的时间可以减少三分之一到二分之一。2.2 版本又支持了查询下压到其他引擎的功能。

如今 Kylin 的用户数非常多,不止二三百个,互联网企业很多都在用 Kylin,包括国外也有多的用户在使用。现在我经常接到一些帮助请求,来自英国、意大利、法国、以色列等等。我们在金融、电信领域,有非常大的发展空间。例如太保、银联、华泰证券,陆金所,还有三大电信公司,都跟我们有合作。中国前三大手机厂商,包括华为,都是 Kyin 的用户。

Kylin 今天取得的成功是我们最初没有看到的。当初做这个项目的一些伙伴,有一些陆续离开了团队。从始至终麒麟的核心人员也就四五个,Kylin 的贡献者远少于其他的开源项目,但是社区的邮件非常活跃,我们第三季度有超过1000个邮件讨论,当然线下还很多的 QQ 群、微信群在讨论,那个就不统计了。我每天固定抽出一定时间,会到邮件社区帮助用户解决这些问题,大家都是义务在为开源项目工作。

最后总经一下。如何成为一个成功的开源项目。

 产品要好用。易用性非常重要,Kylin 不仅性能好,而且还提供了丰富易用的接口和用户界面。

性能追求极致。不断优化查询引擎、存储引擎,追求更好的性能。

构建生态。我们不是一家什么都做的公司,跟其他厂商一起合作发展有助于生态的构建。

轻量级架构。对管理员友好,架构要非常容易地扩展部署,满足企业不同的 IT 架构。

倾听社区用户的反馈。这样他们才会长期地跟随你一起来发展。

顶级项目孵化的故事系列——Kylin的心路历程_第8张图片

我们非常欢迎大家贡献到开源社区,贡献到 Apache。为 Apache 顶级开源项目贡献代码并不难,第一步先加入社区讨论,知道大家做什么,知道大家有哪些难点。其次在学习之后贡献你的 patch,有了第一个 patch 后,希望你持续地贡献,贡献到10个20个,或者更多的时候我们就可以来投票,将你发展成 committer。Apache Committer 对于个人是一个很好的认可,你的品牌、代码全世界的人都可以看到。

最后和大家简单提一下我们公司 -- Kyligence,基于 Apache Kylin 之上提供商业服务的大数据创业公司。公司位于上海张江,已经在硅谷设立分公司,以后会有更多。我们这家公司跟交大有非常深的渊源,我们的主力都是交大的校友。Kylin 头六号的贡献者中五位是交大毕业,所以我们也非常欢迎交大的师弟师妹加入我们公司,大家一起来做一个世界级的项目。 

谢谢大家!

你可能感兴趣的:(顶级项目孵化的故事系列——Kylin的心路历程)