3

我在 S3 中有一些较大的文件 - 高达 40G

我想使用 AWS Batch 设置多个容器来处理每个文件 - 每个容器将获取较大文件的一小部分并对其进行分析,并将其一小部分结果返回给 S3。

由于大小,我不想为每个容器检索大文件的单独副本。

因为我使用的是 AWS Batch,所以不一定知道底层服务器的数量和各个大小(这取决于现货定价),因此将所有栅格预先复制到所有服务器不是一个好的选择。

在某些时候,容器将负责处理尚未在本地卷上的文件块 - 很容易复制它,问题是,当 2 个或更多容器发现文件不存在时会发生什么,并且同时开始复制?

所以,我的问题是“确保每个容器所需的文件在运行该特定容器的主机上的共享卷上可用的最佳模式是什么,而不产生竞争条件和容器间的依赖关系?”

TIA西蒙

4

1 回答 1

0

当我提交作业时,我会通过将文件的块分配给批处理作业来构建它。例如,我将分配批处理作业 A 处理字节 0-1G,分配批处理作业 B 处理字节 1G-2G,依此类推。

您可以通过在提交作业时设置指示范围的环境变量来完成此操作。例如,对于您提交的第一个作业,您可以设置RANGE_START=0RANGE_END=999999999。然后在容器内,您可以从 S3 获取该范围的字节并进行处理。例如,在 Python 中,您可以这样做:

import boto3
s3 = boto3.client("s3")
obj = s3.get_object(
    Bucket="bucket",
    Key="key",
    Range="bytes 0-999999999"
)
content = obj["Body"].read()
于 2020-04-22T23:26:45.287 回答