我有一个大型数据集(> 40G),我想在S3中存储,然后使用Athena进行查询。
根据this blog post的建议,我可以将我的数据存储在以下分层目录结构中,以便在从我的数据集创建表时使用MSCK REPAIR
自动添加分区。
s3://yourBucket/pathToTable/<PARTITION_COLUMN_NAME>=<VALUE>/<PARTITION_COLUMN_NAME>=<VALUE>/
但是,这需要我将数据集拆分为许多较小的数据文件,并且每个数据文件都将存储在嵌套文件夹下,具体取决于分区键。
尽管使用分区可以减少Athena要扫描的数据量并因此加快查询速度,但是管理大量小文件会导致S3出现性能问题吗?在这里我需要考虑一个权衡吗?
答案 0 :(得分:1)
我会尝试进入它,而不会过多地转向观点领域。
对于我使用Athena的用例,40 GB实际上是一个非常小的数据集,其标准是基础技术(Presto)旨在处理的标准。根据Presto网页,Facebook使用底层技术查询他们的300 PB数据仓库。我经常在500 GB到1 TB的数据集上使用它。
考虑到基础S3技术,S3被用来托管Dropbox和Netflix,所以我怀疑大多数企业可能会对存储基础设施造成负担。您可能已经听说过性能问题,而S3涉及在S3上分散的许多文件中存储多个小块静态内容的网站。在这种情况下,检索这些小内容之一的延迟可能会影响较大站点上的用户体验。
相关阅读: Presto
答案 1 :(得分:1)
是的,如果文件很小,分区很多,效率可能会大大降低。
Here对于文件大小和分区数有很好的解释和建议,应该大于128 MB以补偿开销。
此外,我在一个非常小的数据集(1 GB)中进行了一些实验,将我的数据按分钟,小时和天划分。当您使分区变小时,扫描的数据会减少,但是查询所花费的时间会增加很多(在某些实验中慢40倍)。