Apache Kyuubi概述——网易数帆(网易杭州研究院)开源
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: 网易数帆开源的企业级数据湖探索平台(架构篇)
相关文章:

Apache Kyuubi概述——网易数帆(网易杭州研究院)开源
Apache Kyuubi概述 一、Apache Kyuubi 历史 Kyuubi是网易数帆(网易杭州研究院)旗下易数大数据团队开源的一个企业级数据湖探索平台,建立在Apache Spark之上。(Kyuubi依赖Apache Spark提供高性能的数据查询能力,扩展了…...

前端代码注释
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言类注释属性注释函数注释函数参数注释解构 & 函数返回结果 注释Vue Props 注释注释建议注释内容要清晰简洁注释类型避免不必要的注释采用一致的风格版本与更…...

Linux线程安全(二)条件变量实现线程同步
目录 条件变量 条件变量初始化和唤醒 键盘触发条件变量唤醒线程demo 条件变量的等待 条件变量定时等待demo 条线变量实现多线程间的同步 条件变量 条件变量是为了控制多个线程的同步工作而设计的 比如说一个系统中有多个线程的存在但有且仅有一个线程在工作,…...

Linux初阶——线程(Part2):互斥同步问题
一、互斥锁 1、CPU 运算过程 执行完整个语句后,才会把数据写入内存;如果执行时被中断,那么数据和上下文就会保存到线程的 TCB,但数据并不会被写入内存。 1.1. 当 CPU 执行完整个语句时 CPU 最终执行完整个语句的过程 就用上图举…...

力扣——二叉树的后序遍历(C语言)
1.题目: 给你一棵二叉树的根节点 root ,返回其节点值的后序遍历。 2.原理: 这里的遍历,是要存入到数组中,所以需要建立数组,这里传参有*returnSize,需要求节点个数,可以调用前面Tr…...
利用kimi编程助手从0到1开始搭建小程序!
电脑崩了,更新5次小程序,什么都不剩!(但是遗留下来了一些东西,开源的思维和不断地对于技术的使用和掌握“一个软件更多的哲学:(01)优秀的ui页面设计(02)更加细…...
WSL(Ubuntu20.04)编译和安装DPDK
编译和安装DPDK DPDK可以使用工具meson和ninja在您的系统上进行配置、构建和安装。 DPDK配置 要配置DPDK构建,请使用: meson setup build --prefix/home/xx/dpdk19.11xxxx:~/dpdk-stable-19.11.14/$ meson setup build Message:Content Skipped libs…...
HLS协议之nginx-hls-多码率测试环境搭建
运行环境:ubuntu 20.04 时间:2024年10月26日 环境更新 sudo apt-get update sudo apt-get install build-essential libtool libpcre3 libpcre3-dev zlib1g-dev openssl下载nginx wget http://nginx.org/download/nginx-1.19.2.tar.gz tar xvzf n…...

函数式接口与回调函数实践
函数式接口与回调函数实践 一、Java 的函数式接口 是指仅包含一个抽象方法的接口,通常用于 lambda 表达式或方法引用。Java 8 引入了很多内置的函数式接口,比如 Runnable、Callable、Predicate、Function、Consumer 等 演示,数据类型转换的函…...

Windows11系统如何使用自带的录音、录屏工具?
电脑录音和录屏作为现代办公的辅助工具,不仅极大地提升了工作效率,也保障了信息传递的准确性和完整性。通过合理利用这些工具,我们可以更好地保存和管理重要资料,为办公带来无与伦比的便利。 在会议记录、讲座学习、语音备忘等场景…...
使用 web (vue 和DRF))实现 模拟一个IDE 功能思路
采用文件系统和数据库相结合的方案,不仅可以实现基本的文件管理,还可以为未来的扩展提供灵活性。结合我们讨论的内容,以下是更完善的策略: 方案概述:文件系统与数据库结合 文件系统负责实际的文件存储和执行操作&…...

智航船舶租赁综合管理系统
1.产品介绍 产品介绍方案 产品名称: 智航船舶租赁综合管理系统 主要功能: 船舶信息管理租赁合同管理运营调度与优化财务分析与报告功能介绍: 1. 船舶信息管理 具体作用与使用方式:该功能模块允许用户录入、编辑和查询所有船舶的详细信息,包括但...

统信UOS下启动图形界面应用工具monitor报JAVA相关错:An error has occurred. See the log file
☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython 一、前言 在博文《基于飞腾2000CPU浪潮电脑统信UOS安装达梦数据库详解 https://blog.csdn.net/LaoYuanPython/article/details/143258863》中介绍了基于飞腾2000CPU浪潮电脑统信UOS安装达梦数据库的详细过程…...

N-154基于springboot酒店预订管理系统
开发工具:IDEA 服务器:Tomcat9.0, jdk1.8 项目构建:maven 数据库:mysql5.7 前端技术:AdminLTEBootstrapLayUIHTMLjQuery 服务端技术:springbootmybatis-plusthymeleaf 本项目分前台和后台…...
微信小程序如何实现地图轨迹回放?
要在Uni-app中实现微信小程序的地图轨迹回放功能,你可以按照以下步骤进行操作: 在Uni-app项目中引入地图组件:在页面中使用uni-app提供的map组件,可以使用uni.createMapContext方法获取地图上下文对象,以便后续操作地图…...

vscode的一些使用心得
问题1:/home目录空间有限 连接wsl或者remote的时候,会在另一端下载一个.vscode-server,vscode的插件都会安装进去,导致空间增加很多,可以选择更换这个文件的位置 参考:https://blog.csdn.net/weixin_4389…...

Python金色流星雨(完整代码)
文章目录 环境需求完整代码下载代码代码分析1. 导入库和窗口设置2. 创建画笔对象3. 流星的颜色4. 定义流星类`Meteor`5. `meteor`方法:绘制流星6. `move`方法:流星的运动7. 创建流星对象列表8. 动画循环总结系列目录写在后面环境需求 python3.11.4PyCharm Community Edition …...
[山河CTF 2024] week3
一周不在家,这是补的最后一篇。后边的还有0xgame和shctf的末周。打不动了。 Crypto Approximate_n 题目分两部分,flag分两块两个RSA,第1个泄露了4个n_approxkpr的值,后边只泄露了1个。 第1部分利用以前的模板,造格…...

Java集合常见面试题总结(5)
HashSet 如何检查重复? 当你把对象加入HashSet时,HashSet 会先计算对象的hashcode值来判断对象加入的位置,同时也会与其他加入的对象的 hashcode 值作比较,如果没有相符的 hashcode,HashSet 会假设对象没有重复出现。但是如果发…...

牛客网刷题(3)(Java的几种常用包)
目录 一、牛客网案例题目。 二、Java常用包的总结。 <1>JAVA常用包(图片)。 <2>java.lang包。 <3>java.util包。 (1)集合框架。 1、Collection接口。 2、List接口。 3、Set接口。 4、Queue接口。 5、Map接口。 …...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...

376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...

在 Spring Boot 中使用 JSP
jsp? 好多年没用了。重新整一下 还费了点时间,记录一下。 项目结构: pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...
git: early EOF
macOS报错: Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...
小木的算法日记-多叉树的递归/层序遍历
🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术 🚀 引言 你好,未来的算法大神! 在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它…...