gpt4 book ai didi

amazon-web-services - 如何在 s3 上分布式获取 key 列表

转载 作者:行者123 更新时间:2023-12-04 08:11:19 25 4
gpt4 key购买 nike

我正在尝试分发从 s3 获取 6000 万个 key (文件名)列表的过程。

背景:
我正在尝试通过 pyspark 处理一个文件夹中的所有文件,大约 6000 万个。如详细 HERE典型的 sc.textFile('s3a://bucket/*') 会将所有数据加载到驱动程序中,然后将其分发到集群。建议的方法是首先获取文件列表,并行化该列表,然后让每个节点获取文件的一个子集。

问题:
在这种方法中,如果“获取文件列表”步骤足够大,那么仍然存在瓶颈。获取 s3 存储桶中的键(文件名)列表的这一步也必须分发以提高效率。

我试过的:
我尝试了两种不同的方法:

  • 使用 python aws api (boto3),它对结果进行分页。理想情况下,我们可以估计页面数,并分配一个范围,以便节点 1 请求页面 1-100,节点 2 请求页面 101-200,等等。不幸的是,您不能指定任意页面 ID,您必须获得“下一个标记”来自上一页,也就是结果的链接列表。
  • aws cli,它们允许排除和包含过滤器。由于我正在检索的文件名都以 8 位整数开头,因此理论上我可以让节点一请求匹配 10* 的文件的完整文件列表,而第二个节点请求匹配 11 的文件名的完整文件列表* 等。这是通过以下方式完成的:

    aws s3 --recursive --exclude=""include="10"s3://bucket/

  • 不幸的是,它似乎对每个请求都进行了全面扫描,而不是使用某个索引,因为它每个请求挂起超过 15 分钟。

    有没有办法使任一解决方案可行?有第三种选择吗?我确信我并不是唯一需要消化数百万个 s3 文件的人。

    最佳答案

    如果您需要一个 Amazon S3 内容列表,但又不需要它是最新的,您可以使用 Amazon S3 Storage Inventory ,它将存储 S3 存储桶中所有文件的每日 CSV 列表。然后您可以使用该列表来触发您的 pyspark 作业。

    同样,您可以维护一个包含所有文件的数据库,每当使用 Amazon S3 Event Notifications 将对象添加到存储桶或从存储桶中删除对象时,都会有一个更新数据库的过程。 .这样,您的 pyspark 作业列表始终是最新的并且可以访问。

    关于amazon-web-services - 如何在 s3 上分布式获取 key 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41401650/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com