You need to enable JavaScript to run this app.
导航
EMR Serverless 访问 VPC
最近更新时间:2025.03.21 15:49:16首次发布时间:2025.03.20 15:52:33
我的收藏
有用
有用
无用
无用

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

说明

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

相关参数详解

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;

最佳实践

访问账户 VPC 下的资源

在任务中通过 set 命令设置参数(或通过 sdk conf 传入),即可实现跨 VPC 网络打通。

set serverless.cross.vpc.access.enabled = true;
set serverless.cross.vpc.vpc.id = vpc-miyxx;
set serverless.cross.vpc.subnet.ids = subnet-mixx;
set serverless.cross.vpc.security.group.id = sg-miyxx;
select 1;

设置后 VPC 环境中会出现以 “catena” 名称开头的辅助网卡,EMR Serverless 能够通过名为 “catena” 名称开头的辅助网卡,实现与 VPC 网络的连接和通信。

访问其他账户 VPC 下的资源

通过设置 serverless.cross.vpc.accountId 来指定目标 VPC 所归属的租户 ID。

说明

该功能需要开白使用,如需操作请通过 提工单 的方式,联系火山引擎技术支持人员。

set serverless.cross.vpc.access.enabled = true;
set serverless.cross.vpc.vpc.id = vpc-miyxx;
set serverless.cross.vpc.subnet.ids = subnet-mixx;
set serverless.cross.vpc.security.group.id = sg-miyxx;
set serverless.cross.vpc.accountId = 2100xx;
select 1;

通过设置 serverless.cross.vpc.dns.resolve.enabled = true参数,实现 VPC 环境中的私网域名解析。
下面以通过域名访问 ECS 为例:

  1. 通过 privateZone 创建 ECS 的域名,指向 ECS 具体的 IP。
  1. 提交任务,设置参数serverless.cross.vpc.dns.resolve.enabled = true
set serverless.cross.vpc.access.enabled = true;
set serverless.cross.vpc.vpc.id = vpc-miyxx;
set serverless.cross.vpc.subnet.ids = subnet-mixx;
set serverless.cross.vpc.security.group.id = sg-miyxx;
set serverless.cross.vpc.dns.resolve.enabled = true;
select 1;

即可在任务代码中,访问 ECS 域名,并成功完成域名解析和打通网络。

通过set serverless.cross.vpc.accountId = 2100xx;参数来指定目标 VPC 账户。

set serverless.cross.vpc.access.enabled = true;
set serverless.cross.vpc.vpc.id = vpc-miyxx;
set serverless.cross.vpc.subnet.ids = subnet-mixx;
set serverless.cross.vpc.security.group.id = sg-miyxx;
set serverless.cross.vpc.accountId = 2100xx;
set serverless.cross.vpc.dns.resolve.enabled = true;

select 1;

VPC 下的私网域名补全

在跨 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.vpc.id = vpc-miyxx;
set serverless.cross.vpc.subnet.ids = subnet-mixx;
set serverless.cross.vpc.security.group.id = sg-miyxx;
set serverless.cross.vpc.dns.resolve.enabled = true;
set serverless.cross.vpc.dns.search.domain=test-ziwen.cn-beijing;
select 1;

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

自定义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.vpc.id = vpc-miyxx;
set serverless.cross.vpc.subnet.ids = subnet-mixx;
set serverless.cross.vpc.security.group.id = sg-miyxx;
set serverless.cross.vpc.dns.alias.ziwen = 192.168.1.9;
select 1;

实现自定义 dns 解析:

访问 EMR on ECS HiveMetaStore

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

  1. 服务管理 > Hive > 服务参数中查看 hive.metastore.uris 参数值。
  1. 使用hive.metastore.uris 参数提交 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;