在 Amazon S3 中组织小文件的最佳方式是什么?



我有一个气流作业,每5分钟调用一个API端点(每天24 x 12个调用)。API响应是一个JSON,其中包含6个项目(约1KB)。我将每个响应作为单独的文件存储在Amazon S3中。

当前s3组织

s3://bucket/data/
1/1/2021/ 
---  288 .json files (one file per every 5 mins)
1/2/2021/
-- 288 .json files

在这种方法中,s3中有很多小文件。有什么更好的方法,我可以实现处理这个问题的小文件?

一个选项是发送到Amazon Kinesis Firehose流而不是存储文件。Kinesis Firehose Stream可以按大小或时间批处理数据,例如每5分钟或每5mb将数据保存到一个文件中。

另一个选项是运行每日作业(或者更经常地)将这些文件中的数据合并为单个文件。根据数据格式的不同,可以使用Amazon Athena完成此操作。。根据您希望如何使用保存的数据,它还提供了更改数据格式的机会组合文件时。以后查询的最佳格式是快速压缩的Parquet文件,可通过Amazon Athena快速廉价查询。

Atlassian采用后者——他们有一个作业,将白天收到的所有文件合并为每日批处理文件。参见:苏格拉底:阿特拉西安的数据湖

最新更新