Apache Kyuubi概述——网易数帆(网易杭州研究院)开源

news/2024/10/27 17:10:34/

Kyuubi_0">Apache Kyuubi概述

在这里插入图片描述

Kyuubi__3">一、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 查询语言进行大规模数据分析。


Kyuubi__21">二、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网关(可以理解为翻译器——连接不同的网络、系统或应用程序,让它们能够相互沟通和交换信息。)
在这里插入图片描述


Kyuubi__45">三、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来处理请求,不会影响整体服务。

Kyuubi__65">三、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,提供了一种有效的解决方案,以应对这些挑战。

在这里插入图片描述

  1. 客户端层

    • 客户端通过服务发现层中的命名空间,找到多个注册的 Kyuubi 实例。这一层确保了高可用性,因为多个实例可以处理并发请求。
  2. 负载均衡

    • 客户端选择一个 Kyuubi 实例进行连接,这些实例可以根据当前负载进行智能调度,避免单个实例的过载。
  3. 引擎实例选择

    • 一旦客户端连接到某个 Kyuubi 实例,该实例会在服务发现层的 eng-namespace 中选择一个可用的引擎实例(Engine Instance, e.i.)。如果没有可用实例,它会创建一个新的实例。
  4. 连接复用

    • 对于同一用户的后续请求,系统会优先使用相同的 Kyuubi 实例和引擎实例,优化资源使用和响应时间。
  5. 用户隔离

    • 对于来自不同用户的请求,系统会重复执行选择过程。引擎实例的命名空间基于用户隔离,确保不同用户之间不会互相干扰,增强了安全性和资源管理的灵活性。

Tips

  • Kyuubi 和 Spark Thrift Server (STS) 的主要区别在于资源管理
  • STS 只能作为一个单一的 Spark 应用,不能灵活调整资源,且安全性较低,因为所有用户共享同一用户权限
  • Kyuubi 则根据每个客户端的连接请求动态创建多个 Spark 应用,这些应用可以使用不同的资源队列,并且能在不活动时释放资源。此外,Kyuubi 支持 Spark 的动态资源分配,可以根据工作负载自动调整资源使用,提高效率。这种设计使得 Kyuubi 在资源利用率和安全性上更具优势。

3. 统一接口

Kyuubi 实现了 Hive Service RPC 模块,提供与 HiveServer2 和 Spark Thrift Server 相似的数据访问方式,用户可以方便地访问和操作数据。

  1. 简单的数据访问:通过 Hive JDBC 模块,可以轻松构建业务报表、BI 应用程序和 ETL 工作流,而无需复杂的编程。

  2. 熟悉的工具:只需了解结构化查询语言(SQL)和 Java 数据库连接(JDBC),即可处理大量数据。非专业开发者也能参与数据分析和处理。

  3. 标准化接口:JDBC 提供了一种标准的 API,开发者能够用纯 Java 编写数据库应用,更方便地集成各种工具和数据库。

  4. 广泛的工具支持:市场上有许多免费的和商业的 JDBC 工具,支持用户进行数据访问和操作,提高了开发效率。


4.认证与授权

  • Kyuubi 的认证和授权过程确保只有经过验证的用户才能访问服务。
  • 系统验证客户端的身份,只有验证成功后,才能建立安全的连接。经过认证的用户可以创建引擎实例,并在此基础上应用相应的数据库访问权限。
  • 此外,Kyuubi 还集成了 Submarine: Spark Security 插件,提供基于 SQL 标准的细粒度授权,以便更精确地管理用户对数据库对象的访问权限。进一步确保系统的安全性和灵活性。

5. 无服务器serverless

Kyuubi 提供了一种简便的方式,让用户可以无服务器地探索和分析数据。

用户可以通过 JDBC + SQL 或 REST + 代码与系统互动,而无需掌握复杂的技术细节。
在这里插入图片描述

大部分与部署和性能优化相关的工作都由 Kyuubi 的专业团队在服务器端处理。

  1. 基本数据发现:用户可以快速探索数据湖中的各种格式(如 Parquet、CSV、JSON 和文本),无论是在云存储还是本地 HDFS 集群中。

  2. 湖仓构建和分析:用户可以轻松地构建支持 ACID 特性的表存储层,使用 Hudi、Iceberg、Delta Lake 或 Paimon 等技术。

  3. 逻辑数据仓库:在不同的数据源上提供关系型抽象,无需进行 ETL(提取、转换、加载)工作,让用户更方便地访问和连接数据。


参考链接:
https://kyuubi.apache.org/

https://kyuubi.readthedocs.io/en/master/index.html#

https://sf.163.com/

Apache Kyuubi(Incubating):网易对Serverless Spark的探索与实践

Kyuubi: 网易数帆开源的企业级数据湖探索平台(架构篇)


http://www.ppmy.cn/news/1542386.html

相关文章

如何使用 NumPy 和 Matplotlib 进行数据可视化

如何使用 NumPy 和 Matplotlib 进行数据可视化 在数据科学领域,NumPy 和 Matplotlib 是 Python 中最常用的两个库。NumPy 用于科学计算和数据处理,而 Matplotlib 提供了丰富的图表工具来展示数据。本文将介绍如何将这两个库结合使用,轻松进行…

最长子序列模型二(二分优化版)

文章目录 提高课题解一、拦截导弹二、导弹防御系统三、最长公共上升子序列四、二分函数速写 基础课题解五、最长上升子序列 II 提高课题解 一、拦截导弹 题目链接 第一问非常简单,直接用之前最长上身子序列模板就行 第二问就有难度了,我们要用最少的递…

qt 滚动条 美化

qt QScrollBar 滚动条分为竖直与水平滚动条,两者设置上类似,但也有一些不同,下面主要讲述美化及注意事项。 一、竖直滚动条 竖直滚动条分为7个部分: sub-line、 up-arrow 、sub-page、 hanle、 add-line、 dow-arrow、 add-pag…

【Android】多渠道打包配置

目录 简介打包配置签名配置渠道配置配置打包出来的App名称正式包与测试包配置 打包方式开发工具打包命令行打包 优缺点 简介 多渠道打包 是指在打包一个 Android 应用时,一次编译生成多个 APK 文件,每个 APK 文件针对一个特定的渠道。不同的渠道可能代表…

从0到1学习node.js(npm)

文章目录 一、NPM的生产环境与开发环境二、全局安装三、npm安装指定版本的包四、删除包 五、用npm发布一个包六、修改和删除npm包1、修改2、删除 一、NPM的生产环境与开发环境 类型命令补充生产依赖npm i -S uniq-S 等效于 --save -S是默认选项npm i -save uniq包的信息保存在…

论文略读Fewer Truncations Improve Language Modeling

ICML 2024 1 背景 在传统LLM训练过程中,为了提高效率,通常会将多个输入文档拼接在一起,然后将这些拼接的文档分割成固定长度的序列。 ——>会造成一个重大问题——文档截断(document truncation),损害…

qt 序列化和反序列化

序列化:QByteArray buffer; QBuffer bufferDevice(&buffer); bufferDevice.open(QIODevice::WriteOnly); QDataStream out(&bufferDevice); out.setVersion(QDataStream::Qt_5_13); 反序列化: void deserialize(const QByteArray &buffer) {…

【计算机网络 - 基础问题】每日 3 题(五十五)

✍个人博客:https://blog.csdn.net/Newin2020?typeblog 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞…