Serverless Spark 访问 Kerberos 集群是指在无服务器 Spark 环境中安全访问受 Kerberos 认证保护的集群,解决了无服务器场景下访问安全集群的需求,适用于处理 Kerberos 认证的 HDFS 或 Hive 数据等场景。本文将引导完成配置与使用步骤。
参数名称 | 描述 |
|---|---|
元数据 | 选择外部 HMS |
VPC | 本参数需与 EMR on ECS 集群网络配置保持一致 |
可用区 C 子网 | 本参数需与 EMR on ECS 集群网络配置保持一致 |
安全组 | 本参数需与 EMR on ECS 集群网络配置保持一致 |
HMS 连接 | thrift://<master-1-1 节点的 DNS>:9083 |
说明
建议配置多个 HMS 地址以保证高可用,地址用英文逗号“,”分隔。
说明
参数配置须与 EMR on ECS 集群中 Kerberos 中 krb5.conf文件配置保持一致。
在队列详情 > Kerberos 认证配置页面,填写 krb5.conf 文件内容并保存。
vim /etc/krb5.conf 命令查看krb5.conf文件,将文件内容复制到 Kerberos 认证配置框中。
示例
[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
示例
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)插入数据
-- 定义 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 任务提交说明,将 Kerberos 相关配置填写到 Spark 参数(Spark Conf)中即可正常访问。