7

我刚刚在玩 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 具有完全访问权限。尝试在不同区域创建存储桶。虽然没有创建任何文件。再次控制台说它成功了。

4

4 回答 4

4

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

文档中:

“AWS Glue 通过持久化作业运行中的状态信息来跟踪在之前的 ETL 作业运行期间已经处理过的数据。这种持久化的状态信息称为作业书签。作业书签有助于 AWS Glue 维护状态信息并防止重新处理旧数据。”

于 2021-03-06T11:25:09.590 回答
3

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

于 2017-09-25T22:31:11.320 回答
0

有同样的问题。经过几天看起来像 Glue 的作业随机写入 s3,有时我没有找到这个线程。@Sinan Erdem 的建议解决了我的问题。

来自 aws 文档:

作业书签用于跟踪已处理的源数据,防止对旧数据进行重新处理。作业书签可用于 JDBC 数据源和一些 Amazon Simple Storage Service (Amazon S3) 源。作业书签与作业相关联。如果您删除作业,则其作业书签也会被删除。

您可以将 Glue Spark ETL 作业的作业书签回退到任何先前的作业运行,这允许您的作业重新处理数据。如果您想使用同一个作业重新处理所有数据,您可以重置作业书签

还发现了这个: 如何在 Glue Spark ETL 作业上倒带作业书签?

于 2022-02-07T20:48:58.133 回答
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"
于 2021-03-08T11:15:03.160 回答