You need to enable JavaScript to run this app.
导航
Serverless Spark 访问 Kerberos 集群
最近更新时间:2025.11.19 21:01:36首次发布时间:2025.11.19 16:48:12
复制全文
我的收藏
有用
有用
无用
无用

Serverless Spark 访问 Kerberos 集群是指在无服务器 Spark 环境中安全访问受 Kerberos 认证保护的集群,解决了无服务器场景下访问安全集群的需求,适用于处理 Kerberos 认证的 HDFS 或 Hive 数据等场景。本文将引导完成配置与使用步骤。

前提条件

使用限制

  1. 仅支持在独占队列的 default 计算组下访问 Kerberos 集群。
  2. 系统仅支持 Serverless Spark 访问存算分离的 Kerberos 集群,且不支持 Spark Streaming 作业访问。
  3. 单个 Serverless 队列仅支持访问一个 Kerberos 集群。
  4. 访问 Kerberos 认证集群的 Spark 作业中,Driver 无法使用队列的弹性资源,仅 Executor 可正常调度弹性资源。由于 Driver 是作业启动的前置依赖(需先占用资源完成初始化),因此必须保证 default 计算组下有可用的固定资源,以支撑 Driver 启动及后续作业执行。

操作步骤

配置外部 HMS

  1. 登录 EMR Serverless 控制台,点击队列名称,进入队列详情页面。
  2. 依次点击左侧导航栏中的计算组 > default,进入计算组详情页面。
  3. 元数据与网络连接标签页中点击更改配置。配置说明参考如下:

参数名称

描述

元数据

选择外部 HMS

VPC

本参数需与 EMR on ECS 集群网络配置保持一致

可用区 C 子网

本参数需与 EMR on ECS 集群网络配置保持一致

安全组

本参数需与 EMR on ECS 集群网络配置保持一致

HMS 连接

thrift://<master-1-1 节点的 DNS>:9083

说明

建议配置多个 HMS 地址以保证高可用,地址用英文逗号“,”分隔。

Image

  1. 配置完成点击保存,可点击右下方测试连接,查看连接是否成功。

Kerberos 认证参数配置

说明

参数配置须与 EMR on ECS 集群中 Kerberos 中 krb5.conf文件配置保持一致。

队列详情 > Kerberos 认证配置页面,填写 krb5.conf 文件内容并保存。

  1. 登录主节点,通过vim /etc/krb5.conf 命令查看krb5.conf文件,将文件内容复制到 Kerberos 认证配置框中。
  2. 将文件中的 KDC 服务器域名修改为 EMR on ECS 集群主节点的内网 IP 地址,完成后点击保存

Image
示例

[libdefaults]
        default_realm = xxxxxxxxxxxxxxxxxx.EMR.COM
        udp_preference_limit = 4096
        ticket_lifetime = 24h
        renew_lifetime = 7d
        forwardable = true
        rdns = false
        dns_lookup_realm = false
        dns_lookup_kdc = false
        kdc_timeout = 3s
        max_retries = 2

    [realms]
        xxxxxxxxxxxxxxxxxx.EMR.COM = {
            kdc = 192.168.1.36:88
            kdc = 192.168.1.36:88
            admin_server = 192.168.1.36:749
        }

     [domain_realm]
      .xxxxxxxxxxxxxxxxxx.EMR.COM = xxxxxxxxxxxxxxxxxx.EMR.COM
      xxxxxxxxxxxxxxxxxx.EMR.COM = xxxxxxxxxxxxxxxxxx.EMR.COM

提交 Spark 任务

SparkSQL

读取表

示例

set spark.kerberos.principal=<user>@<REALM>;-- 指定访问kerberos使用的principal,格式必须为 <username>@<REALM>
set serverless.spark.kerberos.keytab.path=tos://bucketname/<user>.keytab;-- 对应用户的keytab文件的TOS路径,需提前生成keytab文件并上传到账号的TOS下
-- 只打开 spark driver 的跨vpc访问,避免大任务消耗大量的子网ip
set serverless.cross.vpc.driver.only.enabled = true;
set serverless.cross.vpc.dns.resolve.enabled = true;
set tqs.query.engine.type = sparkcli;-- sparksql添加,sparkjar不需要
set spark.hive.metastore.sasl.enabled=true;
set spark.hive.metastore.kerberos.principal=hive/_HOST@<REALM>;-- 格式为 hive/_HOST@<REALM>,前面部分无需修改,替换自身 kerberos 集群的<REALM>即可

show tables; --查看当前数据库下的所有表
show create table xxx;--查看指定表
select * from xxx limit 10;--查询指定表的前10条数据

写入表

示例

-- 定义 Spark SQL 的默认数据仓库目录TOS路径,用于存储托管表(Managed Tables)的数据文件
set spark.sql.warehouse.dir=tos://bucketname/managed;
-- 上述必须添加的参数
set spark.kerberos.principal=<user>@<REALM>;-- 指定访问kerberos使用的principal,格式必须为 <username>@<REALM>
set serverless.spark.kerberos.keytab.path=tos://bucketname/<user>.keytab;-- 对应用户的keytab文件的TOS路径,需要提前上传到账号的TOS下
-- 只打开 spark driver 的跨vpc访问,避免大任务消耗大量的子网ip
set serverless.cross.vpc.driver.only.enabled = true;
set serverless.cross.vpc.dns.resolve.enabled = true;
set tqs.query.engine.type = sparkcli;-- sparksql添加,sparkjar不需要
set spark.hive.metastore.sasl.enabled=true;
set spark.hive.metastore.kerberos.principal=hive/_HOST@<REALM>;-- 格式为 hive/_HOST@<REALM>,前面部分无需修改,替换自身 kerberos 集群的<REALM>即可

create table if not exists serverless.employees_serverless as select * from employees;--创建托管表(若不存在),并从源表(employees)插入数据

读取外部 Catalog 并写入表
-- 定义 Spark SQL 的默认数据仓库目录TOS路径,用于存储托管表(Managed Tables)的数据文件
set spark.sql.warehouse.dir=tos://bucketname/managed;
-- 上述必须添加的参数
set spark.kerberos.principal=<user>@<REALM>;
set serverless.spark.kerberos.keytab.path=tos://bucketname/<user>.keytab;
set serverless.cross.vpc.driver.only.enabled = true;
set serverless.cross.vpc.dns.resolve.enabled = true;
set tqs.query.engine.type = sparkcli;
set spark.hive.metastore.sasl.enabled=true;
set spark.hive.metastore.kerberos.principal=hive/_HOST@<REALM>;

-- paimon catalog
set spark.sql.catalog.paimon_catalog=org.apache.paimon.spark.SparkCatalog;
set spark.sql.catalog.paimon_catalog.warehouse=tos://paimon-emr-test/user/paimon/warehouse/;
set spark.sql.storeAssignmentPolicy=ansi;

create table serverless.test as select * from paimon_catalog.paimon_db.veh_2k where dt = '20251117';

SparkJar

参照 SparkJar 任务提交说明,将 Kerberos 相关配置填写到 Spark 参数(Spark Conf)中即可正常访问。