小编Chr*_*ell的帖子

如何在s3上分发获取密钥列表

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

背景: 我试图通过pyspark处理文件夹中的所有文件,大约6000万.详见该处典型sc.textFile("S3A://桶/*")将所有的数据装入驱动程序,然后分发到集群.建议的方法是首先获取文件列表,并行化列表,然后让每个节点获取文件的子集.

问题: 在此方法中,如果该列表足够大,则"获取文件列表"步骤仍然存在瓶颈.获取s3存储桶中的密钥(文件名)列表的这一步骤也必须进行分配才能有效.

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

  1. 使用python aws api(boto3),它会对结果进行分页.理想情况下,我们可以估计页数,并分配范围,以便节点1请求页面1-100,节点2将请求页面101-200,等等.不幸的是,您不能指定任意页面ID,您必须得到"下一个标记"来自前一页,也就是结果的链接列表.

  2. aws cli,允许排除和包含过滤器.由于我检索的文件名全部以8位数字开头,理论上我可以让节点一请求匹配10*的文件的完整文件列表,第二个节点请求匹配11的文件名的完整文件列表*等.这是通过以下方式完成的

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

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

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

amazon-s3 amazon-web-services aws-sdk boto3 pyspark

5
推荐指数
1
解决办法
140
查看次数

标签 统计

amazon-s3 ×1

amazon-web-services ×1

aws-sdk ×1

boto3 ×1

pyspark ×1