如何在未写入 _SUCCESS 文件的情况下触发 Spark 写入的下游进程?

问题描述 投票:0回答:1

想象以下场景:

我已通过 SNS 订阅了 Lambda 到 S3

PutObject
事件。此 S3 存储桶的数据生成器将在成功写入后将
_SUCCESS
文件写入分区,并且当检测到
_SUCCESS
文件并使用该数据时,我的 lambda 将触发下游作业。一切都好。

我最近加入了一个新的数据生成器,我还订阅了 S3

PutObject
事件 - 但是该生成器在完成写入后不会写入任何
_SUCCESS
文件。

是否有任何推荐的模式或方法可以有效且可靠地检测已完成的“完整写入”? (显然并不完美,因为可能存在大量边缘情况 - 首先寻找足够好的解决方案)

到目前为止,我的想法是尝试检测分区的

PutObject
事件中的峰值,并跟踪最后一个事件时间戳。一旦检测到活动已停止一段时间(最近的活动之后),下游进程将被触发以消耗新数据。

我该如何改进?

apache-spark amazon-s3 amazon-sns
1个回答
0
投票

我在使用 DynamoDB 作为作业的元数据跟踪器方面取得了巨大成功,这也有助于对失败的作业发出警报。

但是您的数据生产者必须能够将元数据放在那里。作业成功后,只需更新 DynamoDB 中的作业项目,这将触发 Lambda 函数,使您能够继续下游处理。

Producer -> DynamoDB -> Streams -> Lambda

© www.soinside.com 2019 - 2024. All rights reserved.