我想解决我的 Amazon EMR Serverless 作业的连接和资源访问问题。
简短描述
Amazon EMR Serverless 作业从源读取数据、处理数据并将结果写入数据存储。为此,运行作业的 Worker 必须连接到 AWS 或本地托管的其他 AWS 服务和数据源。如果您的应用程序配置不正确,则可能会遇到以下网络错误:
“java.net.SocketTimeoutException: Connect timed out.”(java.net.SocketTimeoutException:连接超时。)
有关 Amazon EMR Serverless 作业联网选项的详细信息,请参阅配置 VPC 访问和其他注意事项。
解决方法
要解决您的 Amazon EMR Serverless 作业的连接和资源访问问题,请完成以下步骤:
要确认作业是否由于网络错误而失败,请检查作业的状态详细信息或驱动程序日志。检查以下错误消息:
“java.net.SocketTimeoutException: Connect timed out.”(java.net.SocketTimeoutException:连接超时。)
如果前面的错误显示在作业的状态详细信息中,并且您无法获取驱动程序日志,则该作业未启动。该作业未启动,因为 Worker 无法从 Amazon Simple Storage Service (Amazon S3) 获取脚本。因此,当您尝试获取日志时会出现以下错误:
“Failed to open logs for <job_name> (<job_run_id>). ${apiError}”(无法打开以下日志:<job_name> (<job_run_id>). ${apiError})
要对上述错误进行故障排除,请执行以下操作:
- 确保可以从应用程序运行的网络访问 Amazon S3 存储桶。
- 检查您的 Amazon VPC 端点策略、AWS Identity and Access Management (IAM) 策略、服务策略和存储桶策略是否不拒绝访问您的作业。
- 如果您的作业在没有互联网出站连接的 Amazon VPC 子网中运行,请创建一个 Amazon S3 网关 Amazon VPC 端点。确保在与应用程序相同的子网中创建端点。
如果这些错误出现在驱动程序日志中,请查看您的错误代码消息,以确定无法访问的 AWS 服务或数据源。然后,确认您当前的网络配置是否可以访问 AWS 服务或数据源。如果无法访问,请更新您的网络配置。
对于 Amazon VPC 应用程序,请执行以下操作:
- 确保附加的安全组允许流向所需资源的出站流量。或者,您可以允许所有端口的出站流量。
- 确保主机应用程序的子网网络访问控制列表(网络 ACL)不拒绝所需资源之间的任何流量。
- 确保资源的安全组允许来自应用程序子网或安全组的入站流量。
- 如果您的应用程序需要互联网连接,请确保使用私有子网和来自公共 NAT 网关的出站互联网连接。
- 如果您的应用程序没有出站互联网连接,请使用 Amazon VPC 端点来获取您的作业需要访问的 AWS 服务。
- 要确定是否可以从应用程序的子网访问目标资源,请使用 Reachability Analyzer。使用 Worker 弹性网络接口作为源,使用资源弹性网络接口或 IP 地址作为目标。
其他故障排除
如果您之前运行的应用程序卡滞在启动状态,请检查您的安全组。确保尚未从您的 Amazon VPC 应用程序中删除现有的安全组。
如果您的作业使用一个子网,但您配置了多个子网,则您的应用程序可能会使用预初始化的容量进行配置。结果,Worker 在单个子网中启动,应用程序继续使用该子网直到它停止。提交给应用程序的所有作业都使用带有预初始化 Worker 的子网。
如果您的 IP 地址用完了,或者 Amazon EMR Serverless 使用了所有可用的子网 IP 地址,请扩展您的应用程序。子网中的 Worker 和 IP 地址具有一对一的映射。确保您的子网有足够的可用 IP 地址来启动应用程序。有关详细信息,请参阅子网规划最佳实践。