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接口。 …...
PyTorch nn.Conv2d 空洞卷积
torch.nn.Conv2d() 中 dilation 参数控制卷积核的间隔 dilation controls the spacing between the kernel points 当 dilation1 时, 表示卷积核没有额外的空白间距, 也就是标准卷积当 dilation>1 时, 表示空洞卷积(dilated convolution) 动画演示: 手动计算 以 2*2 的卷…...
像素、分辨率、PPI(像素密度)、帧率的概念
文章目录 前言一、像素1、定义2、像素点也不是越多越好 二、分辨率1、定义 三、PPI(像素密度)1、定义2、计算公式3、视网膜屏幕 四、帧率1、帧 (Frame)2、帧数 (Frames)3、帧率 (Frame Rate)4、FPS (Frames Per Second)5、赫兹 五、其他1、英寸2、为何显示器尺寸以英寸命名 总结…...
两步GMM计算权重矩阵
在广义矩方法(GMM)中,权重矩阵(W)的选择是关键的一步。理想情况下,(W)应该等于矩条件的协方差矩阵的逆矩阵。这是因为使用这样的权重矩阵可以使得估计量达到最小方差,从而提高估计效率。 两步GMM计算权重矩阵(W) 第一…...
leetcode452. 用最少数量的箭引爆气球
有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points ,其中points[i] [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球的确切 y 坐标。 一支弓箭可以沿着 x 轴从不同点 完全垂直 地射出。在坐标 x 处射出一…...
【Android】使用TextView实现按钮开关代替Switch开关
介绍 Android 本身自己带的有开关控件,但是很多时候我们是不愿意使用这种开关的,感觉使用起来比较麻烦,特别是遇到需要延迟操作的情况。 比如有一个需求是这样的:我们需要打开一个设置,但是这个设置是否打开需要经过…...
(49)MATLAB实现迫零均衡器原理与代码
文章目录 前言一、迫零均衡器设计说明二、迫零均衡器MATLAB源代码1.函数说明2.代码实现3.辅助函数 前言 使用MATLAB实现迫零均衡器。给出完整的MATLAB设计源代码。 一、迫零均衡器设计说明 理想的迫零均衡器有无限多个抽头权系数,是不能实现的,本文考虑…...
滚柱导轨出现异常损坏的原因
滚柱导轨是一种精密的直线滚动导轨,具有较高的承载能力和较高的刚性,对反复动作、起动、停止往复运动频率较高情况下可减少整机重量和传动机构及动力成本。滚柱导轨可获得较高的灵敏度和高性能的平面直线运动,在重载或变载的情况下࿰…...
架构师考试系列(6)论文专题:论分布式架构设计
论分布式架构设计 摘要: 2020年2月,我司中标了某省电力公司的配网运维管控项目,该项目接入电力公司营销、设备和调度等多个部门的专业数据,为配网运行、配网检修、配网抢修、配网工程、供电服务等核心业务提供数据支撑。由于本项目是省级项目,系统可靠性、可用性要求比较…...
leetcode hot100【LeetCode 230. 二叉搜索树中第K小的元素】java实现
LeetCode 230. 二叉搜索树中第K小的元素 题目描述 给定一个二叉搜索树的根节点 root,和一个整数 k,请你找出其中第 k 小的节点。 注意: 题目保证 k 的有效性。 示例: 给定二叉搜索树: 5/ \3 7/ \ \ 2 4 …...
从0开始深度学习(23)——图像卷积
上节了解了卷积层的原理,本节以图像为例,介绍一下它的实际应用 1 互相关运算 严格来说,卷积层是个错误的叫法,因为它所表达的运算其实是互相关运算(cross-correlation)。 首先,我们暂时忽略通…...
长沙做网站建设公司哪家好/新闻稿营销
还记得2010年的时候,那个时候移动互联网时代刚刚兴起,很多以前做java的,也就是做J2EE的人(当时J2EE是红海),抓住了这个机会进行的转型,然后得到红利,甚至实现了人生的转变࿰…...
双语 网站 数据怎么做/vue seo 优化方案
写成宏,方便移植#define setbit(x,y) x|(1<//将X的第Y位置1#define clrbit(x,y) x&~(1<方法二:C语言位运算除了可以提高运算效率外,在嵌入式系统的编程中,它的另一个最典型的应用,而且十分广泛地正在被使用着的是位间的…...
郑州做网站/谷歌推广技巧
Numpy 修炼之道(1) —— 什么是 Numpy Numpy 是什么 简单来说,Numpy 是 Python 的一个科学计算包,包含了多维数组以及多维数组的操作。 Numpy 的核心是 ndarray 对象,这个对象封装了同质数据类型的n维数组。起名 ndarr…...
杭州网站建站公司/哈尔滨网络优化推广公司
为什么要说AbstractQueuedSynchronizer呢? 因为AbstractQueuedSynchronizer是JUC并发包中锁的底层支持,AbstractQueuedSynchronizer是抽象同步队列,简称AQS,是实现同步器的基础组件,并发包中锁的实现底层就是使用AQS实…...
济南做网络安全的公司/手机网站怎么优化
2019独角兽企业重金招聘Python工程师标准>>> 权声明:本文为博主原创文章,未经博主允许不得转载。 一、使用CM添加服务的方式安装Oozie 如果在创建Oozie数据库时失败,且提示数据库已存在,如下图,则可能是之前…...
厦门网站开发建设/刚刚中国宣布重大消息
转载于:https://www.cnblogs.com/lpfuture/archive/2013/02/28/2936492.html...