Livy Gateway和Kyuubi Gateway提供了便捷的接口,您可以通过这两种类型的Gateway向Serverless Spark提交任务。
背景信息
Livy是一个提供REST接口的服务,用于简化与Spark的交互。通过Livy,您可以利用Airflow中的livy_operator以及spark_magic等开源项目,向Serverless Spark提交任务、查询任务状态并获取计算结果。
Kyuubi提供了JDBC/ODBC接口,支持通过SQL查询或BI工具(如Tableau、Power BI)直接连接Serverless Spark。Kyuubi还具备多租户环境中的资源隔离能力,能够满足企业级应用的需求。
管理Livy Gateway
创建Livy Gateway
进入Gateway页面。
在左侧导航栏,选择
。在Spark页面,单击目标工作空间名称。
在EMR Serverless Spark页面,单击左侧导航栏中的
。
在Livy Gateway页面,单击创建Livy Gateway。
在创建Livy Gateway页面,配置以下信息,单击创建。
参数
说明
名称
新建Gateway的名称。仅支持小写字母、数字、短划线(-),并且开头和结尾必须是字母或者数字。
Livy Gateway资源
默认
1 CPU,4 GB
。Livy版本
默认使用最新版0.8.0。
引擎版本
当前Gateway使用的引擎版本。引擎版本号含义等详情请参见引擎版本介绍。
使用Fusion加速
Fusion可加速Spark负载的运行并降低任务的总成本。有关计费信息,请参见产品计费。有关Fusion引擎介绍,请参见Fusion引擎。
关联队列
创建的Gateway将部署在所选队列。通过Gateway提交Spark任务时,将使用Gateway创建者的身份提交任务。
运行环境
通过Livy Gateway提交任务时,任务运行所需的资源将根据所选环境进行预配置。
自动停止
默认关闭。
开启该功能后,如果在45分钟内未检测到任何活动,系统将自动停止该Gateway。
认证方式
仅支持Token方式。
在您创建Gateway之后,需要为其生成一个唯一的鉴权Token,以便在之后的请求中使用该Token进行身份验证和访问控制。创建Token的具体操作,请参见管理Token。
在Livy Gateway页面,单击已创建Livy Gateway操作列的启动。
管理Token
Token使用时,请在请求的header中添加--header `x-acs-spark-livy-token: token`
。
在Livy Gateway页面,单击目标Gateway操作列的Token管理。
单击创建Token。
在创建Token对话框中,配置以下信息,单击确定。
参数
说明
名称
新建Token的名称。
过期时间
设置该Token的过期时间。设置的天数应大于或等于1。默认情况下为开启状态,365天后过期。
复制Token信息。
重要Token创建完成后,请务必立即复制新Token的信息,后续不支持查看。如果您的Token过期或遗失,请选择新建Token或重置Token。
查看Session信息
当您通过Livy创建Spark Session后,该Session的相关信息(例如Session ID、状态等)将显示在列表中。
在Livy Gateway页面,单击目标Gateway的名称。
单击Session 列表页签。
在该页面,您可以查看通过该Livy创建的Spark Session相关信息。
管理Kyuubi Gateway(Beta)
每个工作空间仅支持创建一个Kyuubi Gateway。
创建Kyuubi Gateway
在Kyuubi Gateway页面,单击创建Kyuubi Gateway。
在创建Kyuubi Gateway页面,配置以下信息,单击创建。
参数
说明
名称
新建Gateway的名称。仅支持小写字母、数字、短划线(-),并且开头和结尾必须是字母或者数字。
Kyuubi Gateway 资源
默认
1 CPU,4 GB
。Kyuubi 版本
默认使用最新版1.9.2。
引擎版本
当前Gateway使用的引擎版本。引擎版本号含义等详情请参见引擎版本介绍。
关联队列
创建的Gateway将部署在所选队列。通过Gateway提交Spark任务时,将使用Gateway创建者的身份提交任务。
Kyuubi 配置
填写Kyuubi配置信息,默认以空格符分隔,例如:
kyuubi.engine.pool.size 1
。仅支持以下Kyuubi配置。
kyuubi.engine.pool.size kyuubi.engine.pool.size.threshold kyuubi.engine.share.level kyuubi.engine.single.spark.session kyuubi.session.engine.idle.timeout kyuubi.session.engine.initialize.timeout kyuubi.engine.security.token.max.lifetime kyuubi.session.engine.check.interval kyuubi.session.idle.timeout kyuubi.session.engine.request.timeout kyuubi.session.engine.login.timeout kyuubi.backend.engine.exec.pool.shutdown.timeout kyuubi.backend.server.exec.pool.shutdown.timeout kyuubi.backend.server.exec.pool.keepalive.time kyuubi.frontend.thrift.login.timeout kyuubi.operation.status.polling.timeout
Spark 配置
填写Spark配置信息,默认以空格符分隔。除
spark.kubernetes.*
类型的参数外,其他参数均支持。例如:spark.sql.catalog.paimon.metastore dlf
。认证方式
仅支持Token方式。
在您创建Gateway之后,需要为其生成一个唯一的鉴权Token,以便在之后的请求中使用该Token进行身份验证和访问控制。
在Kyuubi Gateway页面,单击已创建Kyuubi Gateway操作列的启动。
管理Token
在Kyuubi Gateway页面,单击目标Gateway操作列的Token管理。
单击创建Token。
在创建Token对话框中,配置以下信息,单击确定。
参数
说明
名称
新建Token的名称。
过期时间
设置该Token的过期时间。设置的天数应大于或等于1。默认情况下为开启状态,365天后过期。
复制Token信息。
重要Token创建完成后,请务必立即复制新Token的信息,后续不支持查看。如果您的Token过期或遗失,请选择新建Token或重置Token。
连接Kyuubi Gateway
在连接Kyuubi Gateway时,请根据您的实际情况替换jdbc:hive2://<endpoint>:443/;transportMode=http;httpPath=cliservice/token/<token>
中的以下信息:
<endpoint>
:您在总览页签获取的Endpoint信息。<token>
:您在Token管理页签复制的Token信息。<tokenname>
:Token名称。您可以在Token管理页签获取。使用Python连接Kyuubi Gateway时需要该参数。
使用Beeline连接Kyuubi Gateway
在连接Kyuubi Gateway时,请确保您使用的Beeline版本与Kyuubi服务端版本兼容。如果您未安装Beeline,详情请参见Getting Started — Apache Kyuubi。
beeline -u "jdbc:hive2://<endpoint>:443/;transportMode=http;httpPath=cliservice/token/<token>"
使用Beeline连接时支持修改会话参数,例如beeline -u "jdbc:hive2://<endpoint>:443/;transportMode=http;httpPath=cliservice/token/<token>;#spark.sql.shuffle.partitions=100;spark.executor.instances=2;"
。
使用Java连接Kyuubi Gateway
更新pom.xml。
使用适当版本的依赖项以替换
hadoop-common
和hive-jdbc
。<dependencies> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>3.0.0</version> </dependency> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-jdbc</artifactId> <version>2.3.9</version> </dependency> </dependencies>
编写Java代码,连接Kyuubi Gateway。
import org.apache.hive.jdbc.HiveStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; public class Main { public static void main(String[] args) throws Exception { String url = "jdbc:hive2://jdbc:hive2://<endpoint>:443/;transportMode=http;httpPath=cliservice/token/<token>"; Class.forName("org.apache.hive.jdbc.HiveDriver"); Connection conn = DriverManager.getConnection(url); HiveStatement stmt = (HiveStatement) conn.createStatement(); String sql = "select * from students;"; System.out.println("Running " + sql); ResultSet res = stmt.executeQuery(sql); ResultSetMetaData md = res.getMetaData(); String[] columns = new String[md.getColumnCount()]; for (int i = 0; i < columns.length; i++) { columns[i] = md.getColumnName(i + 1); } while (res.next()) { System.out.print("Row " + res.getRow() + "=["); for (int i = 0; i < columns.length; i++) { if (i != 0) { System.out.print(", "); } System.out.print(columns[i] + "='" + res.getObject(i + 1) + "'"); } System.out.println(")]"); } conn.close(); } }
使用Python连接Kyuubi Gateway
执行以下命令,安装PyHive和Thrift包。
pip3 install pyhive thrift
编写Python脚本,连接Kyuubi Gateway。
以下是一个Python脚本示例,展示如何连接到Kyuubi Gateway并显示数据库列表。
from pyhive import hive if __name__ == '__main__': cursor = hive.connect('<endpoint>', port="443", scheme='http', username='<tokenname>', password='<token>').cursor() cursor.execute('show databases') print(cursor.fetchall()) cursor.close()
相关文档
关于Livy Gateway的应用场景,请参见以下信息: