S3作业书签实现

0

【以下的问题经过翻译处理】 AWS 是否提供 Glue 中 S3 书签逻辑的实施细节?

我有一个包含数万个分区(year, month, day, device_id)的桶,分区内的每个文件都包含许多事件

当我运行作业时,书签逻辑如何调用 S3 API 来确定需要处理哪些文件?我知道它使用 ListObjects 或 ListObjectsV2 并检查每个文件的修改时间,但我担心的是当有数百万个文件时,Glue 如何优化此列表行为?

我原以为它可能使用每个分区的 objectCountrecordCount 属性来首先检查是否有新的对象要处理,然后再调用 ListObjects,但我只是运行了一些测试并确认这不会发生。 比如,如果我将文件上传到 S3 并重新运行作业,而不运行爬虫,它仍然会检测到新文件(爬虫尚未检测到新文件,也没有作为聚合元数据添加到分区属性)

profile picture
专家
已提问 5 个月前33 查看次数
1 回答
0

【以下的回答经过翻译处理】 AWS不提供S3书签的实现细节。但AWS文档提供了一些有用的信息,可以在实现书签时参考。

对于 Amazon S3 输入源,AWS Glue 作业书签检查对象的上次修改时间,以确定需要重新处理哪些对象。如果输入源数据在上一次作业运行以来已更改,则在再次运行作业时将重新处理这些文件。

以下是在使用S3作为源时需要记住的一些最佳实践:

  • 确保在作业属性中启用作业书签选项,并且最大并发数为1;
  • 作业必须具有job.init()job.commit(),并且作业名称作为参数传入 (job.init(args ['JOB_NAME'],args));
  • 使用glueContext和transformation_ctx启用书签,尤其是在源部分。使用sparkContext将无法处理书签;
  • 文档中的最佳实践中,请注意AWS建议在爬虫之后从目录读取,而不是使用 from_options() 方法直接读取S3文件。

将目录表和书签搭配使用以实现更好的分区管理。书签既适用于来自数据目录的数据源,也适用于来自选项的数据源。但是,使用来自选项方法很难删除/添加新的分区。将目录表和爬网程序搭配使用可以提供更好的自动化,以跟踪新添加的分区并让您通过下推谓词灵活选择特定的分区。

同样从文档的最佳实践指南中,建议使用S3文件列表或useS3ListImplementation。例如:

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则