You need to enable JavaScript to run this app.
导航
EMR Serverless 访问 VPC 实践指南
最近更新时间:2025.08.15 11:36:33首次发布时间:2025.03.20 15:52:33
复制全文
我的收藏
有用
有用
无用
无用

EMR Serverless 默认将您的作业托管在 EMR 服务 VPC 下运行,默认与您账户下的 VPC 网络不互通。本文将介绍如何在任务级别,通过设置参数的方式,实现与您的 VPC 内网络互通(下文简称跨 VPC)。

配置说明

跨VPC场景说明

如果用户任务需要访问 Mysql、Kafka 等其他资源,则需要设置跨 VPC 参数。

说明

访问 TOS 或 LAS 表不需要设置跨 VPC 参数。

队列网络设置说明

  • 在 EMR Serverless 队列详情页面设置网络参数,全局路由建议保持关闭,任务通过设置参数来开启跨 VPC 功能。
  • 跨 VPC 任务的每个 pod 都会消耗一个子网 IP,需要合理规划子网网段。
  • 对于仅 Driver 访问 mysql 等其他 VPC 场景,可参考仅Driver访问VPC下资源配置参数,来减少子网 IP 消耗。

说明

EMR Serverless 支持在EMR Serverless 控制台 > 队列详情 > 网络配置 页面设置队列级别的网络。

访问本账号资源

访问 VPC 下资源

在任务中通过 set 命令设置参数(或通过 sdk conf 传入),即可实现跨 VPC 网络打通,driver&executor 等每个 pod 都会绑定一个辅助网卡,消耗一个子网 IP。

set serverless.cross.vpc.access.enabled=true

仅 Driver 访问 VPC 下资源

set serverless.cross.vpc.access.enabled = true;
set serverless.cross.vpc.driver.only.enabled = true

在跨 VPC 的基础上,通过设置 serverless.cross.vpc.dns.resolve.enabled = true,来实现 VPC 下的私网域名解析。

set serverless.cross.vpc.access.enabled = true;
set serverless.cross.vpc.dns.resolve.enabled = true;
select 1;

私网域名补全

在跨 VPC 和域名解析的基础上,EMR Serverless 还支持自定义搜索域,实现自动域名补全。
下面以通过域名访问 ECS 为例:

  1. 通过 privateZone 创建 ECS 的域名,指向 ECS 具体的 IP。
  1. 提交任务,设置serverless.cross.vpc.dns.search.domain = test-ziwen.cn-beijing;
set serverless.cross.vpc.access.enabled = true;
set serverless.cross.vpc.dns.resolve.enabled = true;
set serverless.cross.vpc.dns.search.domain = test-ziwen.cn-beijing;

即可实现短域名自动补全:

自定义 DNS 解析规则

EMR Serverless 还支持自定义 DNS 解析规则,用户可以设置 IP 与域名一对一的域名解析规则。
通过设置serverless.cross.vpc.dns.alias.${domain} 即可实现。
例如在参数中设置:serverless.cross.vpc.dns.alias.ziwen = 192.168.1.9,即可在域名解析规则中插入:
ziwen 192.168.1.9 这样一条规则:

set serverless.cross.vpc.access.enabled = true;
set serverless.cross.vpc.dns.alias.ziwen = 192.168.1.9;

实现自定义 DNS 解析:

访问其他主账号资源

说明

本章节均为白名单功能,如有需要请通过 提工单 的方式,联系火山引擎技术支持人员。。

任务(Driver&Executor)访问 VPC 下资源

set serverless.cross.vpc.access.enabled = true;

set serverless.cross.vpc.accountId = xxxxxx;
set serverless.cross.vpc.vpc.id = vpc-xxxxx;
set serverless.cross.vpc.subnet.ids = subnet-xxxx;
set serverless.cross.vpc.security.group.id = sg-xxxxx;

仅 Driver 访问 VPC 下资源

set serverless.cross.vpc.access.enabled=true
set serverless.cross.vpc.driver.only.enabled = true

set serverless.cross.vpc.accountId = xxxxxx;
set serverless.cross.vpc.vpc.id = vpc-xxxxx;
set serverless.cross.vpc.subnet.ids = subnet-xxxx;
set serverless.cross.vpc.security.group.id = sg-xxxxx;

访问 EMR on ECS HiveMetaStore

EMR Serverless 支持访问 EMR on ECS 上独立的 HiveMetaStore,方式如下:

  1. 查看 Hive 中 hive.metastore.uri的参数值。
  1. 使用如下参数提交 EMR Serverless 任务。
set serverless.cross.vpc.access.enabled = true;
set serverless.cross.vpc.accountId = 2100075559;
set serverless.cross.vpc.vpc.id = vpc-rrvu7a8xdtz4v0x591w1cfh;
set serverless.cross.vpc.subnet.id = subnet-13f498o7sby803n6nu52cuy63;
set serverless.cross.vpc.security.group.id = sg-rrvu7g60pzwgv0x58iryzbp;
-- 开启DNS解析
set serverless.cross.vpc.dns.resolve.enabled = true;
-- 在非LAS Catalog URI 下关闭默认LAS Catalog鉴权
set spark.sql.serverless.lf.auth.enabled = false;
-- 设置为开源HMS读取方式
set spark.hadoop.hive.hms.client.is.public.cloud = false;
-- 设置hms uri
set spark.hadoop.hive.metastore.uris = thrift://master-1-1.emr-d4xxx:9083;
show databases;

相关参数详解

KEY

含义

示例

serverless.cross.vpc.access.enabled

是否开启跨 VPC

true,默认为false

serverless.cross.vpc.accountId

目标 VPC 所归属租户的 ID

210000123

说明

  • 账户需要完成 EMR Serverless 的开通或授予 ServiceRoleForLAS 权限。
  • 若用户访问的是其自身账户下的 VPC,则无需填写本参数 。

serverless.cross.vpc.vpc.id

目标 VPC 的 ID

vpc-xxx

serverless.cross.vpc.subnet.ids

需要挂载的子网列表,多个子网列表使用逗号分隔

subnet-xx1,subnet-xx2

注意

  • 在同一 VPC 环境中,子网间默认具备网络连通性,可以选择多个可用区的子网,更充分的使用EMR Serverless 多可用区弹性资源。
  • EMR Serverless 每个任务的 Pod(例如 Spark Driver/Executor、Ray Work/Head)都会消耗您子网下的 IP,建议合理规划子网 IP 数量。

serverless.cross.vpc.security.group.id

访问 VPC 所用的安全组 ID

sg-xxx

serverless.cross.vpc.dns.resolve.enabled

是否开启私网域名解析

true

serverless.cross.vpc.dns.search.domain

私网域名解析搜索域,用于自动补全短域名

test-ziwen.cn-beijing

serverless.cross.vpc.dns.alias.${domain}

自定义域名解析

serverless.cross.vpc.dns.alias.ziwen2 = 10.191.0.112
示例说明:将 ziwen2 域名解析至10.191.0.112。
在 Spark SQL 场景下,如果出现解析失败,可以加上```实现转义。
示例:

set `serverless.cross.vpc.dns.alias.ziwen-ziwen` = 10.191.37.104;