我运行了一个 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 数量,请完成以下步骤:
- 打开 AWS Glue 控制台。
- 在导航窗格中,选择 Jobs(作业)。
- 选择作业,然后选择 History(历史记录)选项卡。
- 查看 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 的数量,请完成以下步骤:
- 打开 AWS Glue 控制台。
- 在导航窗格中,选择 Jobs(作业),然后选择作业。
- 选择 Action(操作)下拉列表,然后选择 Edit job(编辑作业)。
- 展开 Security configuration, script libraries, and job parameters (optional)(安全配置、脚本库和作业参数(可选))列表。
- 在 Maximum capacity(最大容量)字段中,为作业可以使用的最大 DPU 数量输入一个较小的数字。
- 保存您的更改,然后再次运行作业。
检查可用 IP 地址的数量,并删除未使用的网络接口
首先,检查子网中可用 IP 地址的数量。
完成以下步骤:
- 打开 AWS Glue 控制台。
- 在导航窗格中,选择 Connections(连接)。
- 选择您的作业使用的连接。
- 选择 Action(操作)下拉列表,然后选择 View details(查看详细信息)。
- 记下子网。
- 打开 Amazon VPC 控制台。
- 在导航窗格中,选择 Subnets(子网)。
- 在 Subnet(子网)下拉列表中,选择 AWS Glue 连接使用的子网。
- 在 Description(描述)选项卡上,选中 Available IPv4 Addresses(可用的 IPv4 地址)字段,以查看该子网中可用的 IP 地址数量。
- 验证该子网中的可用 IP 地址数量是否超过了 AWS Glue 作业所需的数量。
如果子网没有足够的可用 IP 地址,请删除所有未使用的网络接口。
创建并使用具有更多可用 IP 地址的子网
如果现有子网没有足够的 IP 地址,请在您的 Amazon VPC 中创建一个新子网。您可以使用原来的 CIDR 块,也可以添加一个新的 CIDR 块来扩大范围。然后,验证新子网是否使用与原始子网相同的路由表和网络访问控制列表 (网络 ACL) 规则。例如,如果您先前的子网具有指向互联网网关的默认路由,则您的新子网也必须路由到互联网网关。
更新 AWS Glue 连接,使其使用新子网
完成以下步骤:
- 打开 AWS Glue 控制台。
- 在导航窗格中,选择 Connections(连接)。
- 选择您的 AWS Glue 作业使用的连接。
- 在 Action(操作)下拉列表中,选择 Edit connection(编辑连接)。
- 在 Setup your connection's properties(设置连接的属性)页面上,选择 Next(下一步)。
- 在 Setup access to your data store(设置数据存储访问权限)页面的 Subnet(子网)下拉列表中,选择新子网。
- 选择 Next(下一步),然后选择 Finish(完成)。
- 再次运行作业。
相关信息
定义 Spark 作业的作业属性
设置 Amazon VPC 以建立从 AWS Glue 到 Amazon RDS 数据存储的 JDBC 连接