AWS Glue 作业以 Parquet 格式写入 s3 并出现 Not Found 错误

Posted

技术标签:

【中文标题】AWS Glue 作业以 Parquet 格式写入 s3 并出现 Not Found 错误【英文标题】:AWS Glue job write to s3 in parquet format error with Not Found 【发布时间】:2020-02-13 17:35:52 【问题描述】:

我一直在创建 pyspark 作业,但我不断收到一个类似的间歇性错误(更像是随机错误):

An error occurred while calling o129.parquet. Not Found 
(Service: Amazon S3; Status Code: 404; Error Code: 404 Not Found; 
Request ID: D2FA355F92AF8F05; S3 Extended Request ID: 1/fWdf1DurwPDP40HDGARlMRO/7lKzFDJ4g7DbUnM04wUvG89CG9w5T+u4UxapkWp20MfQfdjsE=)

我什至没有从 s3 阅读,我实际上在做的是: df.coalesce(100).write.partitionBy("mth").mode("overwrite").parquet("s3://"+bucket+"/"+path+"/out")

所以我更改了coalesce 分区,但我不知道我还应该做些什么来减轻这个错误并使我的工作更加稳定。

【问题讨论】:

您是否验证了用于写入此存储桶的角色的 s3 权限? 是的,可以访问。错误不会一直发生,就像随机一样,有一次它可以工作并写入输出,有时它会因为这个错误而失败。 最好的办法是通过错误跟踪中的请求 ID 和扩展请求 ID 联系 AWS 支持 【参考方案1】:

使用胶水从 s3 读取文件

datasource0 = glueContext.create_dynamic_frame.from_options( connection_type = "s3", connection_options = "paths": "s3/path", format = "json", transformation_ctx = "datasource0")

使用胶水将文件写入s3

output = glueContext.write_dynamic_frame.from_options(frame = df, connection_type = "s3", connection_options = "path": "s3/path", format = "parquet", transformation_ctx = "output")

【讨论】:

感谢分享这种写入 S3 的不同方式,它之前已实现,我不知道这种方式是否能解决我遇到的问题。我要添加的是以下代码:dynamic_frame_df = DynamicFrame.fromDF(df,glueContext, "nested") 这解决了第一次运行,让我再运行几次,如果这完全解决了写入 s3 的问题,我会告诉你。谢谢杰! 酷没问题坚持下去

以上是关于AWS Glue 作业以 Parquet 格式写入 s3 并出现 Not Found 错误的主要内容,如果未能解决你的问题,请参考以下文章

通过 Terraform 创建的 AWS Glue 中的无效架构错误

AWS Glue 作业在写入 S3 时被拒绝访问

如何使用 AWS Glue 将许多 CSV 文件转换为 Parquet

AWS Glue 作业将 Null 写入 Redshift

如何克服 AWS Glue 作业中的 Spark“设备上没有剩余空间”错误

AWS Glue ETL Spark- 字符串到时间戳