代码之家  ›  专栏  ›  技术社区  ›  panc

AWS Athena的分区数据导致S3中有许多小文件

  •  7
  • panc  · 技术社区  · 7 年前

    我有一个大数据集(>40G),我想将其存储在S3中,然后使用Athena进行查询。

    根据建议 this blog post ,我可以将数据存储在以下层次目录结构中,以便使用 MSCK REPAIR 从我的数据集创建表时自动添加分区。

    s3://yourBucket/pathToTable/<PARTITION_COLUMN_NAME>=<VALUE>/<PARTITION_COLUMN_NAME>=<VALUE>/
    

    但是,这需要我将数据集拆分为许多较小的数据文件,每个文件都存储在一个嵌套文件夹下,具体取决于分区键。

    虽然使用分区可以减少Athena扫描的数据量,从而加快查询速度,但管理大量小文件是否会导致S3的性能问题?我是否需要考虑权衡?

    2 回复  |  直到 7 年前
        1
  •  4
  •   Gonzalo Solera    6 年前

    是的,对于小文件和大量分区,您可能会遇到效率的严重下降。

    Here 对于文件大小和分区数量有很好的解释和建议,它们应该大于128 MB以补偿开销。

    此外,我在一个非常小的数据集(1 GB)中进行了一些实验,按分钟、小时和天对数据进行了分区。当您缩小分区时,扫描的数据会减少,但用于查询的时间会增加很多(在一些实验中慢40倍)。

        2
  •  2
  •   Zerodf    7 年前

    我会尽量进入这一领域,不要太过偏向于意见领域。

    对于我使用Athena的用例,按照基础技术(Presto)的设计处理标准,40 GB实际上是一个非常小的数据集。根据Presto的网页,Facebook使用底层技术查询其300 PB的数据仓库。我经常在大小介于500 GB和1 TB之间的数据集上使用它。

    考虑到底层的S3技术,S3被用于托管Dropbox和Netflix,因此我怀疑大多数企业可能会对存储基础架构征税。您可能听说过性能问题,而S3涉及到在S3中分散的许多文件上存储多个小型静态内容的网站。在这种情况下,检索这些小内容的延迟可能会影响较大站点上的用户体验。

    相关阅读: Presto