从 AWS Redshift 到 S3 的 AWS Glue ETL 作业失败

Posted

技术标签:

【中文标题】从 AWS Redshift 到 S3 的 AWS Glue ETL 作业失败【英文标题】:AWS Glue ETL job from AWS Redshift to S3 fails 【发布时间】:2018-01-30 11:13:30 【问题描述】:

我正在尝试使用 AWS Glue 服务来 ETL 一些从 redshift 到 S3 的数据。爬虫成功运行并在数据目录中创建元表,但是当我运行 ETL 作业(由 AWS 生成)时,它在大约 20 分钟后失败,说“资源不可用”。

我看不到在 Cloudwatch 中创建的 AWS 粘合日志或错误日志。当我尝试查看它们时,它显示“找不到日志流。找不到日志流 jr_xxxxxxxxxx。检查它是否正确创建并重试。”

如果您能提供任何解决此问题的指导,我们将不胜感激。

【问题讨论】:

好像是2个问题。第一个导致 ETL 作业失败。第二个问题是没有正确创建日志流。 我目前遇到了第二个问题(未找到日志流),这使我无法识别工作的真正错误。我已经为运行我的工作的角色授予了对 CloudWatch 的完全访问权限(以创建日志组等)。而且我不确定从这里去哪里。 【参考方案1】:

我最近遇到了 Glue Job 引发的 Resource Unavailable

我也无法使用 RDS 在 Glue 中建立直接连接 - 它说“找不到合适的安全组”

我在尝试连接 AWS RDS 和 Redshift 时遇到了这个问题

问题出在 Redshift 使用的安全组上。需要在安全组中放置一个自引用入站规则。

对于不知道什么是自引用入站规则的人,请按照以下步骤操作

1) 转到您正在使用的安全组(VPC -> 安全组)

2) 在入站规则中选择编辑入站规则

3) 添加规则

a) 类型 - 所有流量 b) 协议 - 全部 c) 端口范围 - 全部 d) 源 - 自定义和可用空间中写入您的安全组的首字母并选择它。 e) 保存。

完成了!

如果您的安全组入站规则中缺少此条件

尝试创建连接,您将能够创建连接。

这次也应该工作了。

【讨论】:

【参考方案2】:

所以基本上,如果您的 Glue 所在区域没有太多流量,您添加到 Glue 的作业将运行。如果没有可用资源,您需要重新手动重新添加作业,也可以bind yourself to events from CloudWatch via SNS。

此外,您可以将一些参数传递给作业,例如 maximunRetrytimeout

如果您有Ressource not available,它不会触发重试,因为作业没有失败,它甚至还没有开始。但是,如果您将timeout 设置为60 minutes,它将在该时间之后触发错误,减少您的重试池并重新启动作业。

【讨论】:

【参考方案3】:

我在这里看到的最接近 Glue 文档的内容是:

如果您在 AWS Glue 中遇到错误,请使用以下解决方案 帮助您找到问题的根源并解决问题。注意 AWS Glue GitHub 存储库在 AWS Glue 常见问题。错误:资源不可用如果 AWS Glue 返回资源不可用消息,您可以查看错误 消息或日志,以帮助您了解有关该问题的更多信息。下列 任务描述了故障排除的一般方法。 • 自定义 DNS 没有反向查找的配置可能会导致 AWS Glue 失败。查看 您的 DNS 配置。如果您使用 Amazon Route 53 或 Microsoft Active Directory,确保有正向和反向 查找。有关更多信息,请参阅在您的 VPC 中设置 DNS (p. 23)。 • 对于您使用的任何连接和开发端点,请检查 您的集群没有用完弹性网络接口。

【讨论】:

以上是关于从 AWS Redshift 到 S3 的 AWS Glue ETL 作业失败的主要内容,如果未能解决你的问题,请参考以下文章

AWS:使用从 s3 到 redshift 的复制命令时没有插入任何内容

AWS Glue 数据从 S3 迁移到 Redshift

用于将数据从AWS S3加载到Redshift的Python脚本

如何从 SQL 脚本执行 AWS S3 到 Redshift Copy 命令?

AWS Data Pipeline DynamoDB 到 S3 到 Redshift,包括 JsonPaths

AWS Redshift:从 S3 上的许多存储桶加载数据