加载文件后如何清理 AWS Firehose 使用的 S3 文件?

Posted

技术标签:

【中文标题】加载文件后如何清理 AWS Firehose 使用的 S3 文件?【英文标题】:How to clean up S3 files that is used by AWS Firehose after loading the files? 【发布时间】:2017-09-14 00:05:10 【问题描述】:

在将数据复制到 redshift 之前,AWS Firehose 使用 S3 作为间歇性存储。一旦数据传输到redshift,如果成功了如何自动清理它们。

我手动删除了这些文件,它退出状态并抱怨文件被删除,我必须删除并重新创建 Firehose 才能恢复。

使用 S3 规则在 7 天后删除这些文件会起作用吗?或者是否有任何自动化方式,Firehose 可以删除成功移至 redshift 的文件。

【问题讨论】:

【参考方案1】:

与支持 AWS 讨论,

确认在 24 小时或最大重试时间后删除这些中间文件是安全的。

在 S3 存储桶上自动删除的生命周期规则应该可以解决此问题。

希望对你有帮助。

【讨论】:

【参考方案2】:

加载完目标表后,执行类似的操作(下面的 sn-p 是典型的 shell 脚本):

aws s3 ls $aws_bucket/$table_name.txt.gz
    if [ "$?" = "0" ]
    then
            aws s3 rm $aws_bucket/$table_name.txt.gz
    fi

这将检查您刚刚加载的表是否存在于 s3 上并将其删除。将其作为 cronjob 的一部分执行。

如果您的 ETL/ELT 不是递归的,您可以在脚本末尾编写此 sn-p。填充表格后,它将删除 s3 上的文件。但是,在执行这部分之前,请确保您的目标表已被填充。

如果您的 ETL/ELT 是递归的,您可以将其放在脚本开头的某个位置,以检查并删除在上次运行中创建的文件。这将保留创建的文件直到下一次运行,并且应该首选该文件作为备份,以防最后一次加载失败(或者您需要最后一次加载的平面文件用于任何其他目的)。

【讨论】:

不是相关答案。问题是关于消防站而不是关于 s3 生命周期。我建议删除它。 问题在于 Firehose,而不是如何删除 S3 上的文件。 Firehose 使用 S3 作为临时存储将数据推送到目的地。一旦这个过程完成,它就永远不会清理它。我删除了其中一些文件,它抱怨文件丢失,必须删除 firehose 并重新创建才能使其正常工作。这就是问题所在。

以上是关于加载文件后如何清理 AWS Firehose 使用的 S3 文件?的主要内容,如果未能解决你的问题,请参考以下文章

使用 AWS kinesis-firehose 将数据写入文件

使用 AWS Firehose 时连接 s3 文件

如何使用 AWS Kinesis Firehose 将嵌套结构推送到 Redshift

aws kinesis firehose 中的复制命令不起作用

是否可以使用 .Net Core 2.2 在 AWS Lambda 上使用 Kinesis FireHose 执行 PutRecord?

将AWS Kinesis Firehose回填到Elasticsearch Service失败的记录