管理Spark Thrift Server会话

Spark Thrift ServerApache Spark提供的一种服务,支持通过JDBCODBC连接并执行SQL查询,从而便捷地将Spark环境与现有的商业智能(BI)工具、数据可视化工具及其他数据分析工具集成。本文主要为您介绍如何创建并连接Spark Thrift Server

前提条件

已创建工作空间,详情请参见管理工作空间

创建Spark Thrift Server会话

Spark Thrift Server创建完成后,您可以在创建Spark SQL类型任务时选择此会话。

  1. 进入会话管理页面。

    1. 登录E-MapReduce控制台

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

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

    4. EMR Serverless Spark页面,单击左侧导航栏中的会话管理

  2. 会话管理页面,单击Spark Thrift Server页签。

  3. 单击创建Spark Thrift Server

  4. 创建Spark Thrift Server页面,配置以下信息,单击创建

    参数

    说明

    名称

    新建Spark Thrift Server的名称。

    长度限制为1~64个字符,仅支持字母、数字、短划线(-)、下划线(_)和空格。

    部署队列

    请选择合适的开发队列部署会话。仅支持选择开发或者开发和生产公用的队列。

    队列更多信息,请参见管理资源队列

    引擎版本

    当前会话使用的引擎版本。引擎版本号含义等详情请参见引擎版本介绍

    使用Fusion加速

    Fusion可加速Spark负载的运行并降低任务的总成本。有关计费信息,请参见产品计费。有关Fusion引擎介绍,请参见Fusion引擎

    自动停止

    默认开启。45分钟不活动后自动停止Spark Thrift Server会话。

    Spark Thrift Server端口

    使用外网域名访问时端口号为443,使用内网域名访问时端口号为80。

    认证方式

    仅支持Token方式。

    spark.driver.cores

    用于指定Spark应用程序中Driver进程所使用的CPU核心数量。默认值为1 CPU。

    spark.driver.memory

    用于指定Spark应用程序中Driver进程可以使用的内存量。默认值为3.5 GB。

    spark.executor.cores

    用于指定每个Executor进程可以使用的CPU核心数量。默认值为1 CPU。

    spark.executor.memory

    用于指定每个Executor进程可以使用的内存量。默认值为3.5 GB。

    spark.executor.instances

    Spark分配的执行器(Executor)数量。默认值为2。

    动态资源分配

    默认关闭。开启后,需要配置以下参数:

    • executors数量下限:默认为2。

    • executors数量上限:如果未设置spark.executor.instances,则默认值为10。

    更多内存配置

    • spark.driver.memoryOverhead:每个Driver可利用的非堆内存。如果未设置该参数,Spark会根据默认值自动分配,默认值为 max(384MB, 10% × spark.driver.memory)

    • spark.executor.memoryOverhead:每个Executor可利用的非堆内存。如果未设置该参数,Spark会根据默认值自动分配,默认值为 max(384MB, 10% × spark.executor.memory)

    • spark.memory.offHeap.size:Spark可用的堆外内存大小。默认值为1 GB。

      仅在spark.memory.offHeap.enabled设置为true时生效。默认情况下,当采用Fusion Engine时,该功能将处于启用状态,其非堆内存默认设置为1 GB。

    Spark配置

    填写Spark配置信息,默认以空格符分隔,例如,spark.sql.catalog.paimon.metastore dlf

  5. 获取Endpoint信息。

    1. Spark Thrift Server页签,单击新增的Spark Thrift Server的名称。

    2. 总览页签,复制Endpoint信息。

创建Token

  1. Spark Thrift Server页签,单击新增的Spark Thrift Server的名称。

  2. 单击Token管理页签。

  3. 单击创建Token

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

    参数

    说明

    名称

    新建Token的名称。

    过期时间

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

  5. 复制Token信息。

    重要

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

连接Spark Thrift Server

在连接Spark Thrift Server时,请根据您的实际情况替换以下信息:

  • <endpoint>:您在总览页签获取的Endpoint信息。

  • <port>:端口号。使用外网域名访问时端口号为443,使用内网域名访问时端口号为80。

  • <username>:您在Token管理页签新建的Token的名称。

  • <token>:您在Token管理页签复制的Token信息。

使用Python连接Spark Thrift Server

  1. 执行以下命令,安装PyHiveThrift包。

    pip install pyhive thrift
  2. 编写Python脚本,连接Spark Thrift Server。

    以下是一个Python脚本示例,展示如何连接到Hive并显示数据库列表。

    from pyhive import hive
    
    if __name__ == '__main__':
        # 替换<endpoint>, <username>, 和 <token> 为您的实际信息。
        cursor = hive.connect('<endpoint>', port=<port>, scheme='https', username='<username>', password='<token>').cursor()
        cursor.execute('show databases')
        print(cursor.fetchall())
        cursor.close()
    

使用Java连接Spark Thrift Server

  1. 请在您的pom.xml中引入以下Maven依赖。

    <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.1.0</version>
            </dependency>
        </dependencies>
    
    说明

    当前Serverless Spark内置的Hive版本为2.x,因此仅支持hive-jdbc 2.x版本。

  2. 编写Java代码,连接Spark Thrift Server。

    以下是一个Sample Java代码,用于连接到Spark Thrift Server,并查询数据库列表。

    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://<endpoint>:<port>/;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 = "show databases";
            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();
        }
    }

通过Spark Beeline连接Spark Thrift Server

  1. (可选)如果您使用的是EMR on ECS的集群,建议您先进入Sparkbin目录。

    cd /opt/apps/SPARK3/spark-3.4.2-hadoop3.2-1.0.3/bin/
  2. 使用Beeline客户端连接到Spark Thrift Server。

    beeline -u "jdbc:hive2://<endpoint>:<port>/;transportMode=http;httpPath=cliservice/token/<token>"

    如果连接Serverless Spark Thrift Server时出现以下报错,通常是由于Hive Beeline版本不兼容导致的。请确保您使用的是Spark Beeline。

    24/08/22 15:09:11 [main]: ERROR jdbc.HiveConnection: Error opening session
    org.apache.thrift.transport.TTransportException: HTTP Response code: 404

配置Apache Superset连接Spark Thrift Server

Apache Superset是一个现代数据探索和可视化平台,具有丰富的从简单的折线图到高度详细的地理空间图表的图表形态。更多Superset信息,请参见Superset

  1. 安装依赖。

    请确保您已经安装了高版本的 thrift 包(建议高于16.0.0)。如未安装,您可以使用以下命令安装。

    pip install thrift==20.0.0
  2. 启动Superset,进入Superset界面。

    更多启动操作信息,请参见Superset文档

  3. 在页面右上角单击DATABASE,进入Connect a database页面。

  4. Connect a database页面,选择Apache Spark SQL

    image

  5. 填写连接字符串,然后配置相关数据源参数。

    hive+https://<username>:<token>@<endpoint>:<port>/<db_name>
  6. 单击FINISH,以确认成功连接和验证。

配置Hue连接Spark Thrift Server

Hue是一个流行的开源Web界面,可用于与Hadoop生态系统进行交互。关于Hue的更多介绍,请参见Hue官方文档

  1. 安装依赖。

    请确保您已经安装了高版本的 thrift 包(建议高于16.0.0)。如未安装,您可以使用以下命令安装。

    pip install thrift==20.0.0
  2. Hue的配置文件中添加Spark SQL连接串。

    请找到Hue的配置文件(通常位于/etc/hue/hue.conf),并在文件中添加以下内容。

       [[[sparksql]]]
         name = Spark Sql
         interface=sqlalchemy
         options='{"url": "hive+https://<username>:<token>@<endpoint>:<port>/"}'
  3. 重启Hue。

    修改配置后,您需要执行以下命令重启Hue服务以使更改生效。

    sudo service hue restart
  4. 验证连接。

    成功重启后,访问Hue界面,找到Spark SQL选项。如果配置正确,您应能够成功连接到Spark Thrift Server并执行SQL查询。

    image

相关文档

Fusion引擎更多介绍,请参见Fusion引擎