kyuubi rest api介绍

全网都没有找到介绍怎么使用kyuubi rest api,于是自己研究了一下

首先要设置kyuubi配置项,来支持REST

vim conf/kyuubi-defaults.conf

kyuubi.frontend.rest.bind.host          0.0.0.0
kyuubi.frontend.rest.bind.port          10099
kyuubi.frontend.protocols=THRIFT_BINARY,THRIFT_HTTP,REST

启动kyuubi server

bin/kyuubi start

访问WEB UI

http://34.126.178.230:10099/static/sessions.html

Kyuubi关键REST接口

接口

接口说明

请求方法

URL

示例URL

备注

创建会话

在Kyuubi创建一个Session用户会话,一个Session对应我们调度系统的一个作业实例

POST

/sessions

http://34.126.178.230:10099/api/v1/sessions

返回sessionHandle

提交SQL

基于会话,提交一个sql到Kyuubi,在Kyuubi测会封装成一个operation

POST

/sessions/{sessionHandle}/operations/statement

http://34.126.178.230:10099/api/v1/sessions/c6e59a42-39f9-44cf-8078-7c2285696182/operations/statement

返回operationHandle

轮询状态

查询指定operation当前的状态

GET

/operations/{operationHandle}/event

http://34.126.178.230:10099/api/v1/operations/7b51fba9-ec8e-495c-bace-cdcbdadb4006/event

重点字段:state

查询日志

查询指定operation当前的执行日志

GET

/operations/{operationHandle}/log

http://34.126.178.230:10099/api/v1/operations/7b51fba9-ec8e-495c-bace-cdcbdadb4006/log

日志包含Spark web ui信息

查询结果集

查询指定operation当前的结果集,如果已经跑完的话

GET

/operations/{operationHandle}/rowset

http://34.126.178.230:10099/api/v1/operations/7b51fba9-ec8e-495c-bace-cdcbdadb4006/rowset

有一个size配置项可以控制返回记录条数

终止执行

终止执行指定operation

PUT

/operations/{operationHandle}

http://34.126.178.230:10099/api/v1/operations/7b51fba9-ec8e-495c-bace-cdcbdadb4006

1.创建Session接口 

默认情况下,经过过滤器AuthenticationFilter拦截,使用BasicAuthenticationHandler类来做认证

这里需要设置Header,Authorization:"BASIC aGl2ZTpoaXZl"

其中aGl2ZTpoaXZl是字符串hive:hive的base64编码

2.提交SQL接口

3.轮询状态接口

因为提交spark sql是异步操作,需要轮询operation的状态,重点是state字段,当state=FINISHED_STATE时,说明operation执行完成了,可以调用rowset接口获取查询结果了

4.查询日志接口

请注意日志中d3d60a3b-9c85-4e27-9773-d322f1084d34是spark的job id,可以根据它直接检索spark原生的一些状态

5.查询结果集接口

6.终止执行接口

Kyuubi官网REST api说明
https://kyuubi.readthedocs.io/en/latest/client/rest/rest_api.html

创建Session和提交SQL分别对应着LaunchEngine和ExecuteStatement两个类,继承关系如下:

LaunchEngine        —> KyuubiOperation —> AbstractOperation —> Operation
ExecuteStatement  —> KyuubiOperation —> AbstractOperation —> Operation

LaunchEngine

LaunchEngine定义一些启动引擎的特定行为,在runInternal()执行了KyuubiSessionImpl的openEngineSession(),根据namespace通过服务发现获得一个可用的engine,如果没有则创建一个engine,根据engineType来构建一个builder对象,每个引擎类型需要的构建参数不一样,然后拉起一个engine的新进程,新进程启动的时候会把自己注册到服务注册中心,所以LaunchEngine这里只会有查服务发现的代码

KyuubiSessionImpl的openEngineSession()通过服务发现实际获得的是一个(host, port),现在引擎的ip和端口已经有了,然后创建一条到engine的thrift连接_client_client是一个KyuubiSyncThriftClient类型对象,实际上全部跟引擎交互的操作都是在这个类里面完成的,现在有连接了,然后通过_client发起创建session的请求,获得两个重要对象_remoteSessionHandle_engineId,接下来这个sessionengine的全部操作都需要带上_remoteSessionHandle_engineId则代表一个引擎的唯一编号

ExecuteStatement

ExecuteStatement定义一些执行语句的特定行为,在runInternal()执行了executeStatement()和waitStatementComplete(),前者是异步提交sql,后者是一条线程,不断轮询日志和结果

ExecuteStatement类waitStatementComplete方法被封装成一个线程,提交到SessionManager持有的线程池execPool,这个线程用一个while循环来轮询获取最新状态和日志,调用client的getOperationStatus和fetchResults,需要传递参数_remoteOpHandle

KyuubiOperation

KyuubiOperation持有client_remoteOpHandle

KyuubiOperation,自身维护了一个_remoteOpHandle,并从Session拿到_client,可以通过thrift client连接到spark engine做一些获取结果集操作,做取消执行操作。

AbstractOperation

AbstractOperation持有handle_backgroundHandle,还有维护一些状态和超时计算,_backgroundHandle是一个标准的java的Future,用来异步操作engine的后台线程

AbstractOperation定义了执行框架的模板方法,run()里面,先后执行了beforeRun(),runInternal(),afterRun()

Operation

Operation接口定义了run(),cancel(),close()等方法

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
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`替换为实际的用户名和密码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值