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 说明
|
serverless.cross.vpc.vpc.id | 目标 VPC 的 ID | vpc-xxx |
serverless.cross.vpc.subnet.ids | 需要挂载的子网列表,多个子网列表使用逗号分隔 | subnet-xx1,subnet-xx2 注意
|
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
|
在任务中通过 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 网络的连接和通信。
通过设置 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 为例:
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 和域名解析的基础上,EMR Serverless 还支持自定义搜索域,实现自动域名补全。
下面以通过域名访问 ECS 为例:
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;
即可实现短域名自动补全:
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 Serverless 支持访问 EMR on ECS上独立的HiveMetaStore,配置如下:
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;