S3作业书签实现

0

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

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

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

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

profile picture
EXPERTE
gefragt vor 5 Monaten39 Aufrufe
1 Antwort
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
EXPERTE
beantwortet vor 5 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen