Apache Kyuubi概述
一、Apache Kyuubi 历史
Kyuubi是网易数帆(网易杭州研究院)旗下易数大数据团队开源的一个企业级数据湖探索平台,建立在Apache Spark之上。(Kyuubi依赖Apache Spark提供高性能的数据查询能力,扩展了Spark Thrift Server在企业应用中的场景,其中最重要的是多租户支持)
网易对于Kyuubi 的研发始于高度封装大数据算力的朴素想法,通过提供企业级数据湖探索提供标准化的接口,使得用户能够像处理普通数据一样处理大数据,推动大数据平民化。(例如.通过SQL进行数据湖数据探索。)
2021年网易数帆(网易杭州研究院)先后推出四个自主开源项目,也将 Kyuubi 项目送入 Apache 基金会孵化。
它的设计动机是让 Spark 能够开箱即用,用户可以像使用一个 OpenAPI 一样直接调用 Spark 能力,而不需要像使用 SDK 一样将 Spark 嵌入自己的业务逻辑,这样一方面可以降低用户使用 Spark 的门槛,另一方面也使得业务代码与 Spark 数据访问层解耦,简化业务代码逻辑。
Kyuubi提供一个高性能的通用JDBC和SQL执行引擎,通过它,用户能够像处理普通数据一样处理大数据。
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进行交互,而不必依赖特定的实现。这种设计带来的好处包括:- 1. 灵活性:Kyuubi可以支持不同的Spark集群配置,比如本地模式、Yarn或Kubernetes集群,用户不需要关心具体的部署方式。- 1. 高可用性:如果某个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 实例和引擎实例,优化资源使用和响应时间。
- 用户隔离:- 对于来自不同用户的请求,系统会重复执行选择过程。引擎实例的命名空间基于用户隔离,确保不同用户之间不会互相干扰,增强了安全性和资源管理的灵活性。
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#
Apache Kyuubi(Incubating):网易对Serverless Spark的探索与实践
Kyuubi: 网易数帆开源的企业级数据湖探索平台(架构篇)
版权归原作者 喻师傅 所有, 如有侵权,请联系我们删除。