python - Amazon S3 - 分段上传与分割文件然后上传

标签 python amazon-s3 parallel-processing boto boto3

我目前正在尝试使用 python 将文件从本地上传到 S3。我有非常大的文件(超过 10 GB),当我尝试一些更快上传的最佳实践时,我遇到了分段上传。如果我理解正确的话,分段上传会执行以下操作:

  1. 将文件拆分为多个 block 。
  2. 将每个 block 上传到 S3(根据我们的代码串行或并行)。
  3. 每个 block 的上传完成后,S3 就会负责将各个 block 最终组装成单个最终对象/文件。

因为,在所有 block 的上传结束后,很明显,分段上传将所有内容组装成一个对象。但是,我想保持各个部分不变,或者找到另一种方法来分割文件并使用 python boto 的 put_object 方法上传。这是因为,我希望从 S3 并行读取文件的各个 block /部分以进行进一步处理。有没有办法做到这一点,或者我应该坚持自己分割文件并并行上传它们的传统方式(为了更快的上传)。

提前致谢。

最佳答案

我们遇到了同样的问题,这是我们采取的方法。

Enable Transfer Acceleration

到你的桶里。

https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html

如果您的上传带宽有限,则拆分文件就没有意义。

如果您有巨大的上传带宽,并且您的单个加速端点没有消耗整个上传带宽,您可以拆分文件并分段上传。

上传包含多个部分的单个 S3 对象/文件:

以下链接包含详细说明。

https://aws.amazon.com/premiumsupport/knowledge-center/s3-multipart-upload-cli/

创建分段上传:

aws s3api create-multipart-upload --bucket multirecv --key testfile --metadata md5= mvhFZXpr7J5u0ooXDoZ/4Q==

上传文件部分:

aws s3api upload-part --bucket multirecv --key testfile --part-number 1 --body testfile.001 --upload-id sDCDOJiTUVGeKAk3Ob7qMynRKqe3ROcavPRwg92eA6JPD4ybIGRxJx9R0VbgkrnOVphZFK59KCYJAO1PXlrBSW7vcH7ANHZwTTf0ovqe6XPYHwsSp7eTRnXB1qjx40Tk --content-md5 Vuoo2L6aAmjr+4sRXUwf0w==

完成上传:

aws s3api list-parts --bucket multirecv --key testfile --upload-id sDCDOJiTUVGeKAk3Ob7qMynRKqe3ROcavPRwg92eA6JPD4ybIGRxJx9R0VbgkrnOVphZFK59KCYJAO1PXlrBSW7vcH7ANHZwTTf0ovqe6XPYHwsSp7eTRnXB1qjx40Tk

希望有帮助。

编辑1

从 S3 部分读取:

使用 S3,您不需要读取完整的对象。您可以指定对象的开始范围和结束范围。您不需要维护 S3 中的拆分。您可以将其维护为单个对象。以下命令将帮助您部分阅读。

另一个好处是,您也可以并行阅读它们。

aws s3api get-object --bucket my_bucket --key object/location/file.txt file1.range-1000-2000.txt --range bytes=1000-2000

关于python - Amazon S3 - 分段上传与分割文件然后上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49695718/

相关文章:

python - SQLAlchemy 关联困惑

android - 将 S3 TransferUtility 与 Content Uri 结合使用

c - 使用 openmp 时可能出现竞争条件问题

python-2.7 - Joblib 内存使用量不断增长

java - Java中如何并行添加两个数组?

python - 你能用 Cython 创建一个 PIL 图像而不用复制内存吗?

python - 在 Jinja2 循环中设置标志,在循环外访问

python 3.7 对cosmos db的异步http请求

python - 使用具有 IAM 角色的 boto3 连接到 Amazon S3

amazon-s3 - s3 临时签名 URL 中缺少对象的自定义 404 页面