如何解决 AWS Glue 错误“The specified subnet does not have enough free addresses to satisfy the request”(指定的子网没有足够的可用地址来满足请求)?

2 分钟阅读
0

我运行了一个 AWS Glue 提取、转换、加载 (ETL) 作业。但是,作业失败了,并且我收到了一条错误消息,指出子网中没有足够的可用 IP 地址。

简短描述

当运行 AWS Glue ETL 作业时,您可能会收到以下错误之一:

  • “指定的子网没有足够的可用地址来满足请求。(服务: AmazonEC2;状态代码: 400;错误代码: InsufficientFreeAddressesInSubnet;请求 ID:my_request_id)”
  • “调用 o70.getDynamicFrame 时出错。作业 0 已取消,原因是达到了执行程序在启动后失败的阈值,导致 SparkContext 被关闭”

出现上述错误的原因如下:

  • AWS Glue 作业使用的数据处理单元 (DPU) 数量超过了可用的 IP 地址数量。
  • 其他 AWS 服务正在使用同一子网中的 IP 地址。
  • 作业完成后,您没有分离弹性网络接口。

解决方法

确认作业使用了多少 DPU,并减少 DPU 的数量

确保作业已完成。然后,确认作业使用了多少 DPU 并确定可以删除的 DPU 数量。

要查看作业使用的 DPU 数量,请完成以下步骤:

  1. 打开 AWS Glue 控制台
  2. 在导航窗格中,选择 Jobs(作业)。
  3. 选择作业,然后选择 History(历史记录)选项卡。
  4. 查看 Maximum capacity(最大容量)列中的 DPU 数量。

然后,确定要从作业中删除的 DPU 数量。

DPU 的数量不等于网络接口的数量。

每个 Worker 需要一个网络接口,但以下 Worker 类型除外,这些类型的每个 Worker 都需要一个额外的网络接口:

  • 标准 Worker 类型(每个 Worker 1 个 DPU)
  • G1.X Worker 类型(每个 Worker 1 个 DPU)
  • G2.X Worker 类型(2 个 DPU)

例如,如果您在 G.2x 上运行一个包含 20 个Worker 的作业,请使用以下计算来计算 IP 地址的数量:

AWS Glue 2.0/3.0/4.0: 40 个 DPU = 19 个 Worker(执行程序)+ 1 个驱动程序 = 20 个 IP 地址(AWS Glue 2.0/3.0/4.0 中没有任务运行器)

要减少 DPU 的数量,请完成以下步骤:

  1. 打开 AWS Glue 控制台
  2. 在导航窗格中,选择 Jobs(作业),然后选择作业。
  3. 选择 Action(操作)下拉列表,然后选择 Edit job(编辑作业)。
  4. 展开 Security configuration, script libraries, and job parameters (optional)(安全配置、脚本库和作业参数(可选))列表。
  5. Maximum capacity(最大容量)字段中,为作业可以使用的最大 DPU 数量输入一个较小的数字。
  6. 保存您的更改,然后再次运行作业。

检查可用 IP 地址的数量,并删除未使用的网络接口

首先,检查子网中可用 IP 地址的数量。

完成以下步骤:

  1. 打开 AWS Glue 控制台
  2. 在导航窗格中,选择 Connections(连接)。
  3. 选择您的作业使用的连接。
  4. 选择 Action(操作)下拉列表,然后选择 View details(查看详细信息)。
  5. 记下子网。
  6. 打开 Amazon VPC 控制台
  7. 在导航窗格中,选择 Subnets(子网)。
  8. Subnet(子网)下拉列表中,选择 AWS Glue 连接使用的子网。
  9. Description(描述)选项卡上,选中 Available IPv4 Addresses(可用的 IPv4 地址)字段,以查看该子网中可用的 IP 地址数量。
  10. 验证该子网中的可用 IP 地址数量是否超过了 AWS Glue 作业所需的数量。

如果子网没有足够的可用 IP 地址,请删除所有未使用的网络接口

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

如果现有子网没有足够的 IP 地址,请在您的 Amazon VPC 中创建一个新子网。您可以使用原来的 CIDR 块,也可以添加一个新的 CIDR 块来扩大范围。然后,验证新子网是否使用与原始子网相同的路由表网络访问控制列表 (网络 ACL) 规则。例如,如果您先前的子网具有指向互联网网关的默认路由,则您的新子网也必须路由到互联网网关。

更新 AWS Glue 连接,使其使用新子网

完成以下步骤:

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

相关信息

定义 Spark 作业的作业属性

设置 Amazon VPC 以建立从 AWS Glue 到 Amazon RDS 数据存储的 JDBC 连接

AWS 官方
AWS 官方已更新 2 个月前
没有评论

相关内容