在大数据领域,Apache Spark 早已成为最炙手可热的计算引擎。随着 Spark 两年磨一剑,正式发布 3.0 版本,带来诸多新特性的 Spark 更是拥有了无限想象空间。不过对于用户而言,平台的技术门槛始终是个不小的挑战。也正因如此,不少项目选择直接建立在 Spark 之上,通过将平台的能力统合,并引入新的特性,从而降低用户使用门槛,实现大数据价值的最大化。
Kyuubi 正是这样一个拥抱 Spark、高性能的通用 JDBC 和 SQL 执行引擎,由网易数帆旗下有数大数据团队开源。Kyuubi 提供标准化的接口,赋予用户调动整个数据湖生态的数据的能力,使得用户能够像处理普通数据一样处理大数据。
6 月 21 日,Apache 软件基金会宣布,Kyuubi 以全票通过的表现,正式进入 Apache 基金会孵化器。这也侧面证明了 Kyuubi 的受欢迎程度。
近日,InfoQ 有幸采访到了网易数帆技术专家、Apache Kyuubi PPMC、Apache Spark Committer 燕青,和他聊了聊 Kyuubi 一路发展背后的故事,以及他对于开源的理解。
“九尾狐”Kyuubi
Kyuubi 的命名源自中国神话《山海经》,意为“九尾狐”。狐会喷火,象征 Spark;狐有九尾,类比多租户。这个命名也体现出了 Kyuubi 系统设计之初的主要目的——在 Spark 上实现多租户。
事实上,在 Kyuubi 之前,市面上已存在具备类似能力的产品,比如 Spark ThriftServer(简称 STS)。这是 Spark 社区现有的、基于 HiveServer2 实现的 Thrift 服务,旨在无缝兼容 HiveServer2。
虽然 STS 的性能极佳,但当前并不完善,尤其在企业场景下存在较多短板。比如,单 Spark 应用实现的 STS 并不能完整支持多租户,因为 STS 本质上是一个 Spark Application,整个 Application 只有全局唯一的用户名,并同时包括 Driver 端和 Executor 端。而对于像网易这样有多条产品线的互联网公司来说,每条产品线的数据在一定程度上是隔离的。因此,只有支持多租户才能满足公司对于数据安全、资源隔离、高可用以及高并发的要求。
这也就促使网易内部开发了 Kyuubi。Kyuubi 在统一接口基础上,拓展了 STS 在多租户模式下的使用场景,并依托多租户概念获得了完善的资源隔离共享能力和数据安全隔离的能力。
在 2018 年上线之初,Kyuubi 的定位只是在 Spark 上实现多租户,再引入一个比较细粒度的权限控制,做一个小而美的系统。因此,Kyuubi 的第一代架构主要面向的是 BI 产品。但是正式上线并开源后,团队发现用户并不在意系统本身的设计初衷以及使用场景是什么,所以当一些用户使用 Kyuubi 做 ETL 等工作时,用起来磕磕绊绊,反馈也不是特别好。
苦苦挣扎一年后,团队决定深入 Spark 社区去贡献,从中找到设计一套比较通用的、面向更多用户的架构方案灵感。这期间,Spark 也正在酝酿一个大版本的跨越式升级,从 2.4 直接来到 3.0 版本。Kyuubi 团队在其中参与了很多工作,并一同推动 Spark 社区发展。
“在这个过程中,我们对 Spark 的内核机制有了一个更加充分的了解。在这个基础上,我们意识到我们对于 Kyuubi 原本的构想是不太可持续的,Kyuubi 的第一代架构视野比较小,应用场景也很少。因此,我们觉得是时候对 Kyuubi 的架构进行一番革新了。”燕青回忆道。
2020 年,团队重新设计了 Kyuubi 第二版的架构,新架构的使用场景更加丰富。具体来看,Kyuubi 的使用场景主要包括以下三个方面:
1.替换 HiveServer2,轻松获得 10~100 倍性能提升。
Kyuubi 高度兼容 HiveServer2 接口及行为,支持无缝迁移;
Kyuubi 分层架构,消除客户端兼容性问题,支持无感升级;
Kyuubi 支持 Spark SQL 全链路优化及再增强,性能卓著;
高可用、多租户、细粒度权限认证各种企业级特性统统都有。
2.构建 Serverless Spark 平台。
Serverless Spark 目标绝对不是让用户调用 Spark 的 API、继续写 Spark 作业;
通过 Kyuubi 预置的 Engine 模块,用户无需理解 Spark 逻辑,入门门槛极低;
用户只需通过 JDBC 及 SQL 操作数据专注自身业务开发即可,资源弹性伸缩,0 运维;
支持资源管理器(Kubernetes, YARN 等),Engine 生命周期,Spark 动态资源分配 3 级不同粒度全方位的资源弹性策略;
支持 YARN/Kubernetes 多种资源管理器同时调度,保障历史作业安全迁移上云;
Spark 自适应查询引擎(AQE)及 Kyuubi AQE plus,提供澎湃动力。
3.构建统一数据湖探索分析管理平台。
支持 Spark 所有官方数据源及第三方数据源;
支持 Spark DSv2 元数据管理,直观进行数据湖构建及管理;
支持 Apache Iceberg/Hudi, DeltaLake 等所有主流数据湖框架;
一个接口一个引擎一份数据,提供统一的分析查询、数据摄取、数据湖管理平台;
批流一体,支持流式作业(Upcoming)。
当前,Kyuubi 不仅在网易内部承接了大量工作,在业内也有多家大型公司采用 Kyuubi 解决问题。“Kyuubi 新架构做出来之后,很多其他公司的小伙伴也开始活跃地参与到这个项目中来,慢慢地参与的人多了以后,我们就想着是不是可以去 Apache 软件基金会进行孵化。”燕青说道。
独行者速,众行者远
2021 年 3 月份,团队开始正式筹备将 Kyuubi 捐赠给 Apache 软件基金会。事实上,拥抱 Apache 软件基金会的念头一早就扎在 Kyuubi 团队成员心中了。在燕青看来,做下这一决定背后的原因主要有以下 3 点:
第一,团队以及公司都有意愿去做这件事情。网易内部本身始终贯行开源开放的策略,所以当团队和公司提出这个想法后,公司内部也给予了一定的支持,比如为项目配套了一些运营力量等等。
第二,随着第二版架构的登场,Kyuubi 发展路线日益清晰,也有越来越多的开发者参与到项目中来,社区规模逐步扩大。
第三,团队成员发现一些潜在的 Kyuubi 用户或是开发者产生 IP 产权方面的顾虑。此前即便 Kyuubi 已经开源,但依旧是属于网易的产品,将项目捐赠给 Apache 软件基金会后,可以消除这些开发者的顾虑,进一步吸引更多的开发者参与其中。
6 月 21 日,Apache 软件基金会宣布,Kyuubi 以全票通过的表现,正式进入 Apache 基金会孵化器。根据投票结果,Kyuubi 获得了 13 个约束性投票(binding votes)和 8 个无约束性投票(non-binding votes),投票全部持赞同意见,无弃权票和反对票。
在走向 Apache 软件基金会的过程中,燕青坦言 Kyuubi 很幸运地得到了来自公司内外的不少帮助。
“有些帮助是无形的,有些帮助是有形的”,燕青说,“Kyuubi 能够成功进入 Apache 基金会孵化器,很大程度上是因为那些开源前辈们已经把路铺好,很多前辈在国内开源领域深耕多年,比如姜宁老师等等,他们在前期做的一些努力让我们后人能够乘凉。理论上来说,现在的项目要想进入 Apache 软件基金会孵化,比他们那个年代要更加容易一些。
“另外,姜宁老师发起并创立的 ALC Beijing 也会帮助我们国内开发者或企业去孵化一些本土项目,比如他们会把一些 Apache 软件基金会的文档翻译成中文,这对于英文不太好的开发者来说帮助非常大。”
在这个过程中,Kyuubi 也得到了不少来自 Apache 软件基金会的支持与帮助。“Apache 的指导文档本身就对我们产生很大的帮助。如果没有这个文档,你根本不知道这一步做什么,下一步做什么。Apache 的指导文档写得非常详细,就算没有其他人的帮助,只要你耐心地把这些文档阅读下来,也能更好地完成项目捐献。”
在 Kyuubi 项目官宣进入 Apache 孵化器的那天,Kyuubi 特别感谢了很多给予过自己帮助的人,比如给 Kyuubi 提供指导的 Champion 和 Mentors 姜宁,Mentors 章剑锋、张铎、Akira Ajisaka。也有为 Kyuubi 提出 issue 和建议的伙伴们,以及为 Kyuubi 做出贡献与支持的国内外数十家企业用户。
独行者速,众行者远。而这,也是开源一贯传承的精神。
发展社区的关键在于多倾听开发者的声音
现在,距离 Kyuubi 进入 Apache 大家庭已有月余,至于进入 Apache 之后发生了哪些变化,燕青认为主要体现在项目管理和社区管理两个方面。
在过去,Kyuubi 归属于网易,项目管理者相当于拥有超级管理员的权限,可以直接对项目做决策,发版时间也不固定。进入 Apache 孵化器后,项目有发版等重大决策时,需要在邮件列表里一起讨论,并发起投票。内部沟通讨论结束后,还需要在孵化器邮件列表里面再去发起讨论、投票,此外,Apache 软件基金会方面也会帮忙做项目审查,看下在法律或是其他方面是否合规。相较过去,虽然整个决策链路长了一些,但这样的层层讨论对项目本身来说更负责,借助这些外脑,项目的发展路线也愈加清晰。
在社区管理方面,燕青坦言“以前我们比较随意,现在进入 Apache 软件基金会后,我们定了一个目标就是要把社区建立起来。”在燕青看来,社区是由人构成的,要想让社区建立并发展起来,需要多倾听社区的声音,多去了解这些个人开发者或是公司的需求。
至于如何提高社区的活跃度,燕青认为最重要的一点是要尽量避免犯一些错误,要以开放友好且包容的态度去接纳开发者。对于社区新人,要更加有耐心,给他们时间去成长。此外,在宣传方面还需要加大力度,社区运营者也需要积极地去配合宣传。
最后在项目上,要更加注重品控的把握。“如果 Release 版本不太稳定的话,从用户层面来说,会劝退很多用户”,燕青解释道。
Kyuubi 的终极目标:让大数据平民化
对于 Kyuubi 的未来,燕青也有着很高的期待:希望建立在 Apache Spark 和数据湖技术之上,统一门户,打造一个理想的数据湖管理平台,让用户处理大数据能像处理普通数据一样轻松。
具体来说,第一要增强 Kyuubi 对 Kubernetes 云原生的支持,让 Kyuubi 提供的服务以及计算资源都可以在容器中进行;第二要增强 Kyuubi 对数据湖的支持,让用户能够更简单地管理、使用和建设数据湖,实现所见即所得;第三要继续深入优化引擎侧,增加流式场景,打造批流一体的平台。
“未来,希望 Kyuubi 可以让 Spark、让大数据平民化”,燕青憧憬道。
“这是开源最好的时代”
除了是 Apache Kyuubi 的作者,燕青还有多个身份,比如 Apache Spark Committer、Apache Submarine Committer。从业多年,燕青始终在开源大数据领域深耕,对他来说,“开源是可以做一辈子的事情”,而他也始终热爱开源,信仰开源。
在燕青看来,开源非常利于个人学习和提升自己。“很多开源大神把自己的代码或 idea 放在 GitHub 或其他开源平台上面,如果你选择在某一技术领域深耕的话,可以在这些平台中找到很多学习资料,边学边做”。
通过在开源社区的不断学习,燕青也实现了从医学信息学博士到顶级开源社区核心贡献者的身份转变。
提及自己积累下来的经验,燕青觉得在持续学习之外,也要拥有良好的心态,以及明确且专注的技术方向。“开源是一个圈子,这个圈子是开放的,但从个人的角度来看,每个人的想法不同,圈子外的人或多或少会感觉到有一堵墙的存在。如果你能够拥有良好的心态,谦虚、友善地去和社区沟通,自然也能换来同样友好的回应,从而形成良好的回路。
此外,从技术角度来讲,方向一定要明确,专注在一个领域内深耕,从而慢慢从不擅长变得擅长。比如我自己就是一直围绕着 Spark 这个项目去深耕,当我在这个项目里做得差不多的时候,我并不是离开它,而是继续在这个项目里去帮助别人,包括我做的 Kyuubi 也是围绕着 Spark 去做的。”
当前,虽然国内开源发展存在进步与乱象并生,机遇与挑战共存的状态,但燕青坚信“这是开源最好的时代”。
在其看来,很多开源前辈已经在这个领域做出了长时间的铺垫和积累,很多热爱开源的开发者也都投入其中,大家都在为开源贡献出自己的一份力量,帮助它朝着更好的方向去发展。
“从某种程度上来讲,开源氛围好与坏是在描述一个圈子,是圈子就会有一堵无形的墙,有时墙里面的人会翻出去把墙外的人引进来,有时墙外的人会主动地进到墙里。其实只要你学会融入它,帮助它去改善,就一定会朝着好的方向去发展。另外,从开源角度来讲,有些项目正确地衰落,其实正说明我们在往更正确的方向走去”,燕青说道。
对于国内开源的未来,燕青期望可以有越来越多的优秀开源项目诞生自高校,让开源氛围更加“年轻化”。监管层面,也希望有一些相应的规范,帮助开源更好地持续发展。
嘉宾介绍:
燕青,Apache Kyuubi PPMC,Apache Spark Committer,Apache Submarine Committer。目前就职于网易数帆有数大数据团队,专注于开源大数据领域。
评论