Kyuubi介绍

Kyuubi 是对spark thrift server的加强版,它弥补了spark thrift server缺少的多租户,授权,负载均衡,高可用特性。
在这里插入图片描述

统一接口

Kyuubi使用的协议与HiveServer保持一致,因此它能够支持所有的JDBC/ODBC客户端,用户应用程序也可以根据上图的thrift API写。用户可以用多种类型的客户端连接kyuubi服务,每个连接都绑定了一个sparkSession实例,sparkSession中包含了HiveMetaStoreClient,它能够与hive MetaStore Server交互。

运行时资源弹性

在启动期间,Kyuubi不会占用集群管理器(Yarn)的任何资源,如果没有与SparkContext交互的活动会话,Kyuubi会将所有资源返回给Yarn。此外,它还支持Spark动态资源分配,允许我们在SparkContext中动态分配资源。

Kyuubi动态SparkContext缓存

Kyuubi实现了一个SparkSessionCacheManager来控制SparkSession/SparkContext的实例化、注册、缓存、重用和回收。不同的用户在第一次连接到服务器后,在Kyuubi服务器中只有一个SparkContext实例,它将在整个连接生命周期和所有连接关闭后的一段时间内缓存在SparkSessionCacheManager中。这样SparkContext就会有多个实例,每个用户使用属于自己的实例,每个SparkContext占用yarn上部分资源,这就实现了多租户的功能。
在这里插入图片描述

所有属于同一用户的连接共享这个SparkContext来生成它们自己的SparkSession。

spark动态资源分配

Spark提供了一种机制,可以根据工作负载动态调整应用程序占用的资源。这意味着,如果不再使用资源,您的应用程序可能会将它们返回给集群,并在以后需要时再次请求它们。如果多个应用程序共享Spark集群中的资源,该特性尤其有用。

安全

kyuubi支持Kerberos认证,并且支持集成spark-authorizer权限验证插件,该插件对Spark没有侵入性,主要用于查询优化的最后阶段。实际上,具体权限对接的是Ranger中的权限控制中心,通过集成Spark-authorizer,能够做到细粒度的权限控制。

在这里插入图片描述

高可用

在这里插入图片描述

当配置spark.kyuubi.ha.enabled=true时,多个Kyuubi服务器实例可以向ZooKeeper注册。然后客户端可以通过ZooKeeper找到一个Kyuubi服务器。当一个客户端请求一个服务器实例时,ZooKeeper会随机返回一个选中的注册实例。这个特性提供了:
 高可用性
 负载均衡
 滚动升级

内部结构

在这里插入图片描述
FrontendService负责维护与客户端的连接,与客户端进行交互,将客户端的SQL请求转发至BackendService;BackendService负责执行Spark SQL并将执行结果返回给FrontendService。FrontendService最后将结果返回至客户端。

SparkSessionCacheManager 负责管理SparkSession,OperationManager负责管理KyuubiOperation。客户端提交上来的请求转化为KyuubiOperation。通过KyuubiSession获取到sparkSession,将请求提交到spark sql执行。

总结

Kyuubi以HiveServer2 Thrift API为接口协议,提供Spark SQL服务。相比传统的Spark,Kyuubi主要增加多租户、权限、负载均衡等功能。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Kyuubi是一个开源的Spark SQL JDBC服务器,它允许通过JDBC连接来访问和查询Spark SQL。下面是使用Kyuubi JDBC连接Spark的步骤: 1. 首先,确保你已经下载并安装了Kyuubi服务器。你可以从Apache官方网站下载Kyuubi的发行版本。 2. 启动Kyuubi服务器。你可以使用以下命令启动Kyuubi服务器: ```shell ./bin/kyuubi-start.sh ``` 3. 在你的Java或Scala代码中,使用JDBC连接字符串连接到Kyuubi服务器。连接字符串的格式如下: ``` jdbc:hive2://<kyuubi-server-host>:<kyuubi-server-port>/<database-name> ``` 其中,`<kyuubi-server-host>`是Kyuubi服务器的主机名或IP地址,`<kyuubi-server-port>`是Kyuubi服务器的端口号,`<database-name>`是要连接的数据库名称。 例如,如果Kyuubi服务器运行在本地主机的10000端口,并且你要连接到名为"mydatabase"的数据库,连接字符串将如下所示: ``` jdbc:hive2://localhost:10000/mydatabase ``` 4. 使用合适的JDBC驱动程序连接到Kyuubi服务器。你可以使用Apache Hive提供的JDBC驱动程序,或者使用其他支持HiveServer2协议的JDBC驱动程序。 在Java中,你可以使用以下代码连接到Kyuubi服务器: ```java import java.sql.*; public class KyuubiJdbcExample { public static void main(String[] args) { String jdbcUrl = "jdbc:hive2://localhost:10000/mydatabase"; String username = "your-username"; String password = "your-password"; try (Connection connection = DriverManager.getConnection(jdbcUrl, username, password)) { // 连接成功,可以执行SQL查询和操作 // ... } catch (SQLException e) { e.printStackTrace(); } } } ``` 在Scala中,你可以使用以下代码连接到Kyuubi服务器: ```scala import java.sql.DriverManager import java.sql.Connection object KyuubiJdbcExample { def main(args: Array[String]): Unit = { val jdbcUrl = "jdbc:hive2://localhost:10000/mydatabase" val username = "your-username" val password = "your-password" try { val connection = DriverManager.getConnection(jdbcUrl, username, password) // 连接成功,可以执行SQL查询和操作 // ... connection.close() } catch { case e: Exception => e.printStackTrace() } } } ``` 请注意,你需要将`your-username`和`your-password`替换为实际的用户名和密码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值