【发布时间】:2021-12-04 02:53:48
【问题描述】:
我正在尝试将数据帧作为 json 输出写入不同的帐户 s3 存储桶。 以下代码因 GLUE Spark Streaming 作业中的 S3 Access denied 错误而失败。但是如果我在下面的代码中运行没有第一行的代码,它就会工作并将其输出写入 S3 存储桶
glueContext._jsc.hadoopConfiguration().set("fs.s3.canned.acl", "BucketOwnerFullControl")
glueContext.write_dynamic_frame.from_options(frame=dynamic_df, connection_type="s3",
connection_options={"path": output_path},
format=file_format, transformation_ctx="datasink")
这是错误日志:
com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS3Exception: 拒绝访问(服务:Amazon S3;状态代码:403;错误代码: 拒绝访问;请求编号:W52125NY7G3EF7WH; S3 扩展请求 ID: 4t9JOJedv2qNRy6W8ySxdQQ7r+TMN1MWpZCFOK1IKO6W4gx4a2oKuK5vwXUPnh4HkkPAG+LnEIc=; 代理:空),S3 扩展请求 ID:4t9JOJedv2qUPnh4HkkPAG+LnEIc= at com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1819) 在 com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleServiceErrorResponse(AmazonHttpClient.java:1403) 在
这对我来说看起来很奇怪,因为 Bucket 拥有完全权限,并且当单独执行第二行但存储桶所有者仍然是胶水帐户时它可以完美运行,我正在尝试使用 fs.s3.canned.acl 更改它。
目标存储桶也设置了Bucket owner preferred 选项
请建议我做错了什么。
谢谢
【问题讨论】:
标签: hadoop amazon-s3 amazon-emr aws-glue