AWS Glue作业未写入S3

时间:2017-09-21 05:59:21

标签: amazon-s3 aws-glue

我刚刚使用Glue,但还没有在现有的S3存储桶中成功创建新表。作业将无错误地执行,但S3中从不存在任何输出。

以下是自动生成的代码:

glueContext.write_dynamic_frame.from_options(frame = applymapping1, 
connection_type = "s3", connection_options = {"path": 
"s3://glueoutput/output/"}, format = "json", transformation_ctx = 
"datasink2") 

尝试了所有这些变体 - 文件名(尚未存在),在存储桶的根文件夹中,尾随斜杠和没有。使用的角色具有对S3的完全访问权限。尝试在不同地区创建水桶。但是没有创建任何文件。控制台再次说它成功了。

3 个答案:

答案 0 :(得分:2)

您的代码是否正确,只需验证applymapping1 DF中是否有任何数据?使用此命令检查:applymapping1.toDF()。show()

答案 1 :(得分:2)

正如@Drellgor 在他对上一个答案的评论中所建议的那样,除非您绝对不想处理旧文件,否则请确保禁用“作业书签”。

来自documentation

"AWS Glue 通过保留作业运行中的状态信息来跟踪在 ETL 作业的上一次运行期间已经处理过的数据。这种保留的状态信息称为作业书签。作业书签帮助 AWS Glue 维护状态信息并防止旧数据的再处理。”

答案 2 :(得分:0)

您需要修改您的 IAM 角色。您应该定义您的 IAM 角色可以写入和读取 S3。

  1. 转到您的 AWS 控制台
  2. 转到 IAM
  3. 政策
  4. 修改政策
  5. 除了获取对象之外,还为 S3 添加以下放置和删除对象。
  6. 然后保存

确保您使用您编辑的 IAM 角色运行 AWS Glue。 祝你好运。

"Effect": "Allow",
        "Action": [
            "s3:GetObject",
            "s3:PutObject",
            "s3:DeleteObject"