如何解决 AWS Glue 错误“指定子网没有足够的可用地址来满足请求”?

2 分钟阅读
0

我的 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 数量:

  1. 打开 AWS Glue 控制台
  2. 在导航窗格上,选择任务
  3. 选择作业,然后选择 History(历史记录)选项卡。Maximum capacity(最大容量)列显示用于该作业的 DPU 数量。

执行以下操作以减少任务的 DPU 数量:

  1. 确定要从该作业删除多少个 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 中没有任务运行程序)
  2. 在导航窗格上,选择任务
  3. 选择 Action (操作) 下拉列表,然后选择 Edit job (编辑作业)
  4. 展开安全配置、脚本库和任务参数 (可选) 列表。
  5. Maximum capacity(最大容量)字段中,输入较小的数字。此字段设置作业可以使用的 DPU 最大数量。
  6. 保存更改,然后再次运行该任务。

删除未使用的弹性网络接口

检查子网中的可用 IP 地址的数量:

  1. 打开 AWS Glue 控制台
  2. 在导航窗格中,选择连接
  3. 选择要检查的连接。
  4. 操作下拉列表中,选择查看详细信息。记下该子网。
  5. 打开 Amazon VPC 控制台
  6. 在导航窗格中,选择 Subnets(子网)。
  7. Subnet(子网)下拉列表中,选择 AWS Glue 连接正在使用的子网。
  8. Description(说明)选项卡上,选中 Available IPv4 Addresses(可用的 IPv4 地址)字段。此字段显示子网中有多少 IP 地址可用。

请确保可用 IP 地址的数量超过 AWS Glue 任务所需的 IP 地址数。

如果可用 IP 地址的数量少于 AWS Glue 任务运行所需的数量,则删除未使用的弹性网络接口

创建并使用具有更多可用 IP 地址的子网

执行以下操作以创建新子网:

  1. 在 VPC 中创建新子网
    **注意:**您可以使用 VPC 的原始 CIDR 块创建新子网,也可以将额外的 CIDR 块添加到您的 VPC 以便与新子网一起使用。
  2. 查阅与旧子网关联的路由表访问控制列表(ACL)规则,以确保新子网以相同的方式路由流量。例如,如果以前的子网将默认路由配置为互联网网关,则确保新子网具有类似的默认路由。

执行以下操作修改 AWS Glue 连接以使用新子网:

  1. 打开 AWS Glue 控制台
  2. 在导航窗格中,选择连接
  3. 选择 AWS Glue 任务正在使用的连接。
  4. Action(操作)下拉列表中,选择 Edit connection(编辑连接)。
  5. Set up your connection’s properties(设置连接的属性)页面上,选择 Next(下一步)。
  6. Set up access to your data store(设置数据存储的访问权限)页面上的 Subnet(子网)下拉列表中,选择新子网。
  7. 选择 Next(下一步),然后选择 Finish(完成)。
  8. 重新运行任务。

相关信息

为 Spark 任务定义任务属性

设置 VPC 以连接到 JDBC 数据存储

相关视频

AWS 官方
AWS 官方已更新 1 年前