我的 AWS Glue 提取、转换、加载(ETL)任务返回以下错误之一:“The specified subnet does not have enough free addresses to satisfy the request.(Service: AmazonEC2; Status Code: 400; Error Code: InsufficientFreeAddressesInSubnet; Request ID: my_request_id)”(指定的子网没有足够的可用地址来满足请求。(服务:AmazonEC2;状态代码:400;错误代码:InsufficientFreeAddressesInSubnet;请求 ID:my_request_id))或“An error occurred while calling o70.getDynamicFrame.Job 0 cancelled because SparkContext was shut down caused by threshold for executors failed after launch reached”(调用 o70.getDynamicFrame 时出错。任务 0 已取消,因为 SparkContext 由于达到启动后执行程序的阈值失败而导致关闭)
简短描述
如果没有足够的 IP 地址可用于 AWS Glue 任务,您就会收到此错误。下面是可能发生这些错误的两个常见原因:
- 当您在虚拟私有云(VPC)子网中运行任务时,AWS Glue 会设置弹性网络接口,使您的任务能够安全地连接到 VPC 中的其他资源。每个弹性网络接口都会获得一个私有 IP 地址。如果弹性网络接口未按预期释放,则可能没有足够的 IP 地址可用于该作业。要解决此错误,请确认作业使用的 DPU 数量。然后,减少 DPU 的数量,并再次运行作业。或者,删除未使用的弹性网络接口。
- 多个 AWS 服务正在使用同一子网。这些服务可能使用子网的许多可用 IP 地址。要解决此错误,请为 AWS Glue 作业使用具有更多可用 IP 地址的不同子网。
解决方法
使用以下方法之一来解决这些错误。
减少任务的数据处理单元 (DPU) 数量
任务运行完成后,检查该任务使用的 DPU 数量:
- 打开 AWS Glue 控制台。
- 在导航窗格上,选择任务。
- 选择作业,然后选择 History(历史记录)选项卡。Maximum capacity(最大容量)列显示用于该作业的 DPU 数量。
执行以下操作以减少任务的 DPU 数量:
- 确定要从该作业删除多少个 DPU。请记住,DPU 的数量不等于弹性网络接口的数量。有一个弹性网络接口始终连接到每个工作线程。但是,每个作业还需要额外的弹性网络接口:
**标准工作线程类型(每个工作线程 1 个 DPU):**需要一个额外的弹性网络接口
**G1.X 工作线程类型(每个工作线程 1 个 DPU):**需要一个额外的弹性网络接口
**G2.X 工作线程类型(2 个 DPU):**需要一个额外的弹性网络接口 例如:
如果您在 G.2x 上运行一个有 20 个工作线程的作业,则可以按如下方式计算 IP 地址的数量:
对于 AWS Glue 0.9/1.0:41 DPU = 20 个工作线程(执行程序)+ 1 个驱动程序 + 1 个任务运行程序 = 22 个 IP 地址
对于 AWS Glue 2.0/3.0:40 DPU = 19 个工作线程(执行程序)+ 1 个驱动程序 = 20 个 IP 地址(AWS Glue 2.0/3.0 中没有任务运行程序)
- 在导航窗格上,选择任务。
- 选择 Action (操作) 下拉列表,然后选择 Edit job (编辑作业)。
- 展开安全配置、脚本库和任务参数 (可选) 列表。
- 在 Maximum capacity(最大容量)字段中,输入较小的数字。此字段设置作业可以使用的 DPU 最大数量。
- 保存更改,然后再次运行该任务。
删除未使用的弹性网络接口
检查子网中的可用 IP 地址的数量:
- 打开 AWS Glue 控制台。
- 在导航窗格中,选择连接。
- 选择要检查的连接。
- 在操作下拉列表中,选择查看详细信息。记下该子网。
- 打开 Amazon VPC 控制台。
- 在导航窗格中,选择 Subnets(子网)。
- 在 Subnet(子网)下拉列表中,选择 AWS Glue 连接正在使用的子网。
- 在 Description(说明)选项卡上,选中 Available IPv4 Addresses(可用的 IPv4 地址)字段。此字段显示子网中有多少 IP 地址可用。
请确保可用 IP 地址的数量超过 AWS Glue 任务所需的 IP 地址数。
如果可用 IP 地址的数量少于 AWS Glue 任务运行所需的数量,则删除未使用的弹性网络接口。
创建并使用具有更多可用 IP 地址的子网
执行以下操作以创建新子网:
- 在 VPC 中创建新子网。
**注意:**您可以使用 VPC 的原始 CIDR 块创建新子网,也可以将额外的 CIDR 块添加到您的 VPC 以便与新子网一起使用。
- 查阅与旧子网关联的路由表和访问控制列表(ACL)规则,以确保新子网以相同的方式路由流量。例如,如果以前的子网将默认路由配置为互联网网关,则确保新子网具有类似的默认路由。
执行以下操作修改 AWS Glue 连接以使用新子网:
- 打开 AWS Glue 控制台。
- 在导航窗格中,选择连接。
- 选择 AWS Glue 任务正在使用的连接。
- 在 Action(操作)下拉列表中,选择 Edit connection(编辑连接)。
- 在 Set up your connection’s properties(设置连接的属性)页面上,选择 Next(下一步)。
- 在 Set up access to your data store(设置数据存储的访问权限)页面上的 Subnet(子网)下拉列表中,选择新子网。
- 选择 Next(下一步),然后选择 Finish(完成)。
- 重新运行任务。
相关信息
为 Spark 任务定义任务属性
设置 VPC 以连接到 JDBC 数据存储