管理Gateway

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

  1. 进入Gateway页面。

    1. 登录E-MapReduce控制台

    2. 在左侧导航栏,选择EMR Serverless > Spark

    3. Spark页面,单击目标工作空间名称。

    4. EMR Serverless Spark页面,单击左侧导航栏中的运维中心 > Gateway

  2. Livy Gateway页面,单击创建Livy Gateway

  3. 在创建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

  4. 在Livy Gateway页面,单击已创建Livy Gateway操作列的启动

管理Token

说明

Token使用时,请在请求的header中添加--header `x-acs-spark-livy-token: token`

  1. Livy Gateway页面,单击目标Gateway操作列的Token管理

  2. 单击创建Token

  3. 创建Token对话框中,配置以下信息,单击确定

    参数

    说明

    名称

    新建Token的名称。

    过期时间

    设置该Token的过期时间。设置的天数应大于或等于1。默认情况下为开启状态,365天后过期。

  4. 复制Token信息。

    重要

    Token创建完成后,请务必立即复制新Token的信息,后续不支持查看。如果您的Token过期或遗失,请选择新建Token或重置Token。

查看Session信息

当您通过Livy创建Spark Session后,该Session的相关信息(例如Session ID、状态等)将显示在列表中。

  1. Livy Gateway页面,单击目标Gateway的名称。

  2. 单击Session 列表页签。

    在该页面,您可以查看通过该Livy创建的Spark Session相关信息。

    image

管理Kyuubi Gateway(Beta)

说明

每个工作空间仅支持创建一个Kyuubi Gateway。

创建Kyuubi Gateway

  1. Kyuubi Gateway页面,单击创建Kyuubi Gateway

  2. 在创建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进行身份验证和访问控制。

  3. 在Kyuubi Gateway页面,单击已创建Kyuubi Gateway操作列的启动

管理Token

  1. Kyuubi Gateway页面,单击目标Gateway操作列的Token管理

  2. 单击创建Token

  3. 创建Token对话框中,配置以下信息,单击确定

    参数

    说明

    名称

    新建Token的名称。

    过期时间

    设置该Token的过期时间。设置的天数应大于或等于1。默认情况下为开启状态,365天后过期。

  4. 复制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-commonhive-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

  1. 执行以下命令,安装PyHive和Thrift包。

    pip3 install pyhive thrift
  2. 编写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的应用场景,请参见以下信息: