Apache Kyuubi概述
一、Apache Kyuubi 历史
Kyuubi是网易数帆(网易杭州研究院)旗下易数大数据团队开源的一个企业级数据湖探索平台,建立在Apache Spark之上。(Kyuubi依赖Apache Spark提供高性能的数据查询能力,扩展了Spark Thrift Server在企业应用中的场景,其中最重要的是多租户支持)
网易对于Kyuubi 的研发始于高度封装大数据算力的朴素想法,通过提供企业级数据湖探索提供标准化的接口,使得用户能够像处理普通数据一样处理大数据,推动大数据平民化。(例如.通过SQL进行数据湖数据探索。)
Kyuubi提供一个高性能的通用JDBC和SQL执行引擎,通过它,用户能够像处理普通数据一样处理大数据。
2021年网易数帆(网易杭州研究院)先后推出四个自主开源项目,也将 Kyuubi 项目送入 Apache 基金会孵化。
它的设计动机是让 Spark 能够开箱即用,用户可以像使用一个 OpenAPI 一样直接调用 Spark 能力,而不需要像使用 SDK 一样将 Spark 嵌入自己的业务逻辑,这样一方面可以降低用户使用 Spark 的门槛,另一方面也使得业务代码与 Spark 数据访问层解耦,简化业务代码逻辑。
Kyuubi 支持多种数据源和计算引擎,特别是 Apache Spark,使用户能够通过标准 SQL 查询语言进行大规模数据分析。
二、Apache Kyuubi 概念
Apache Kyuubi 是一个开源的分布式(distributed
)多租户(multi-tenant
) SQL 网关(gateway
),专为数据仓库和湖仓环境设计。
网易数帆(网易杭州研究院)在企业级数据处理探索过程中总结到:
开源大数据项目的繁荣带来了强大的大数据平台,而对于负责数据价值挖掘的终端用户而言,平台的技术门槛是另一种挑战。
如果能将平台的能力统合,并不断地优化和迭代,让用户能够通过JDBC和SQL这种最普遍最通用的技术来使用,数据生产力将可以得到进一步的提升。
Kyuubi提供了一种无服务器(serverless
)的方式,让用户能够方便地执行 SQL 查询,并支持多种后端计算引擎(如 Apache Spark、Apache Flink 和 Trino)。
终端用户可以专注于开发自己的业务系统和挖掘数据价值,而无需了解底层的大数据平台(计算引擎、存储服务、元数据管理等)。
简单讲,Kyuubi 就是基于 Apache Spark 实现的一个 Thrift JDBC/ODBC 服务,支持多租户和分布式的特性,可以满足企业内诸如 ETL、BI 报表等多种的大数据场景的应用。
Tips:文中提到的gateway
网关(可以理解为翻译器——连接不同的网络、系统或应用程序,让它们能够相互沟通和交换信息。)
三、Apache Kyuubi 架构
- Kyuubi的架构主要分为客户端(下图左)、Kyuubi服务端(下图中)和Spark集群(下图右)。
- 客户端通过Kyuubi Session连接到服务端,服务端负责管理会话和执行请求。在Kyuubi中,这些连接请求被维护为
Kyuubi Session
,执行请求被维护为Kyuubi Operation,并与相应的session进行绑定。
- Kyuubi维护与多个SparkContext的连接,支持轻量级和重量级的Session创建。
- 这些SparkConext实例本质上是由Kyuubi服务托管的远程查询执行引擎程序。这些程序在Spark SQL上实现,并对SQL语句进行端到端编译、优化和执行,以及与元数据(如Hive Metastore)和存储(如HDFS)服务进行必要的交互,最大限度地发挥Spark SQL的威力。它们可以自行管理自己的生命周期,自行缓存和回收,并且不受Kyuubi服务器上故障转移的影响。
- 轻量级Session无感知地快速响应,而重量级Session则在首次连接时创建SparkContext。
- Kyuubi以松耦合方式与Spark集群交互,执行SQL查询并优化执行流程,同时管理元数据和存储服务,确保高效的查询性能。这个设计使得Kyuubi在处理复杂查询时具备高可用性和灵活性。
-
“松耦合”指的是Kyuubi与Spark集群之间的关系比较独立,意味着Kyuubi可以与多个SparkContext进行交互,而不必依赖特定的实现。这种设计带来的好处包括:
-
- 灵活性:Kyuubi可以支持不同的Spark集群配置,比如本地模式、Yarn或Kubernetes集群,用户不需要关心具体的部署方式。
-
- 高可用性:如果某个SparkContext出现故障,Kyuubi可以继续使用其他可用的SparkContext来处理请求,不会影响整体服务。
-
-
三、Apache Kyuubi 特性
1. 多租户支持
-
Kyuubi扩展了Spark Thrift Server(基于 Apache Spark 的服务,提供 JDBC 和 ODBC 接口,使得用户能够通过标准的 SQL 查询语言与 Spark 集群进行交互)在企业应用中的场景,其中最重要的是多租户支持。
-
Spark Thrift Server 本身对多租户的支持有限,主要是因为它缺乏细粒度的权限控制和资源隔离。因此,在多用户环境中,可能会出现资源争用和安全隐患。
-
Kyuubi 则在此基础上增强了多租户支持,通过提供更好的资源管理和安全性,允许多个用户在同一集群中独立运行查询,从而提高了在企业应用中的可用性。
-
Kyuubi 允许多个用户和团队在同一环境中独立工作,通过会话管理确保资源的隔离和安全性。企业可以在共享资源的同时,保持数据的隐私和安全。
Tips:Spark Thrift Server 本身并不提供完整的多租户支持,主要因为它的会话管理和资源隔离能力有限。
虽然多个用户可以同时连接并执行查询,但缺乏对不同用户之间资源使用的严格管理和隔离。在高并发场景下,可能会出现资源争用的问题。Kyuubi 通过增强的多租户特性,改善了这一点,提供了更好的资源隔离和管理,适合企业级应用需求。
2. 高可用与负载均衡
-
高可用性和负载均衡在企业服务中至关重要,尤其是在需要满足严格服务水平协议(SLA)的情况下。
-
Kyuubi 的设计通过集成 ZooKeeper,提供了一种有效的解决方案,以应对这些挑战。
-
客户端层:
- 客户端通过服务发现层中的命名空间,找到多个注册的 Kyuubi 实例。这一层确保了高可用性,因为多个实例可以处理并发请求。
-
负载均衡:
- 客户端选择一个 Kyuubi 实例进行连接,这些实例可以根据当前负载进行智能调度,避免单个实例的过载。
-
引擎实例选择:
- 一旦客户端连接到某个 Kyuubi 实例,该实例会在服务发现层的
eng-namespace
中选择一个可用的引擎实例(Engine Instance, e.i.)。如果没有可用实例,它会创建一个新的实例。
- 一旦客户端连接到某个 Kyuubi 实例,该实例会在服务发现层的
-
连接复用:
- 对于同一用户的后续请求,系统会优先使用相同的 Kyuubi 实例和引擎实例,优化资源使用和响应时间。
-
用户隔离:
- 对于来自不同用户的请求,系统会重复执行选择过程。引擎实例的命名空间基于用户隔离,确保不同用户之间不会互相干扰,增强了安全性和资源管理的灵活性。
Tips:
- Kyuubi 和 Spark Thrift Server (STS) 的主要区别在于资源管理。
- STS 只能作为一个单一的 Spark 应用,不能灵活调整资源,且安全性较低,因为所有用户共享同一用户权限。
- 而 Kyuubi 则根据每个客户端的连接请求动态创建多个 Spark 应用,这些应用可以使用不同的资源队列,并且能在不活动时释放资源。此外,Kyuubi 支持 Spark 的动态资源分配,可以根据工作负载自动调整资源使用,提高效率。这种设计使得 Kyuubi 在资源利用率和安全性上更具优势。
3. 统一接口
Kyuubi 实现了 Hive Service RPC 模块,提供与 HiveServer2 和 Spark Thrift Server 相似的数据访问方式,用户可以方便地访问和操作数据。
-
简单的数据访问:通过 Hive JDBC 模块,可以轻松构建业务报表、BI 应用程序和 ETL 工作流,而无需复杂的编程。
-
熟悉的工具:只需了解结构化查询语言(SQL)和 Java 数据库连接(JDBC),即可处理大量数据。非专业开发者也能参与数据分析和处理。
-
标准化接口:JDBC 提供了一种标准的 API,开发者能够用纯 Java 编写数据库应用,更方便地集成各种工具和数据库。
-
广泛的工具支持:市场上有许多免费的和商业的 JDBC 工具,支持用户进行数据访问和操作,提高了开发效率。
4.认证与授权
- Kyuubi 的认证和授权过程确保只有经过验证的用户才能访问服务。
- 系统验证客户端的身份,只有验证成功后,才能建立安全的连接。经过认证的用户可以创建引擎实例,并在此基础上应用相应的数据库访问权限。
- 此外,Kyuubi 还集成了 Submarine: Spark Security 插件,提供基于 SQL 标准的细粒度授权,以便更精确地管理用户对数据库对象的访问权限。进一步确保系统的安全性和灵活性。
5. 无服务器serverless
Kyuubi 提供了一种简便的方式,让用户可以无服务器地探索和分析数据。
用户可以通过 JDBC + SQL 或 REST + 代码与系统互动,而无需掌握复杂的技术细节。
大部分与部署和性能优化相关的工作都由 Kyuubi 的专业团队在服务器端处理。
-
基本数据发现:用户可以快速探索数据湖中的各种格式(如 Parquet、CSV、JSON 和文本),无论是在云存储还是本地 HDFS 集群中。
-
湖仓构建和分析:用户可以轻松地构建支持 ACID 特性的表存储层,使用 Hudi、Iceberg、Delta Lake 或 Paimon 等技术。
-
逻辑数据仓库:在不同的数据源上提供关系型抽象,无需进行 ETL(提取、转换、加载)工作,让用户更方便地访问和连接数据。
参考链接:
https://kyuubi.apache.org/
https://kyuubi.readthedocs.io/en/master/index.html#
https://sf.163.com/
Apache Kyuubi(Incubating):网易对Serverless Spark的探索与实践
Kyuubi: 网易数帆开源的企业级数据湖探索平台(架构篇)