我目前正在尝试使用python将文件从本地上传到S3。我有非常大的文件(超过10 GB),当我通过一些最佳实践来加快上传时,我遇到了分段上传。如果我理解正确,分段上传会做以下事情:
因为,在所有块的上传结束之后,很明显多部分上传将所有内容组装成单个对象。但是,我希望保持各个部分不变,或者找到另一种方法来分割文件并使用python boto的put_object方法上传。这是因为,我希望从S3并行读取文件的各个块/部分以供我进一步处理。有没有办法做到这一点,或者我应该坚持自己拆分文件并将其并行上传(以便更快上传)的传统方式。
提前致谢。
答案 0 :(得分:3)
我们遇到了同样的问题,这就是我们采取的方法。
启用传输加速
到你的水桶。
https://docs.aws.amazon.com/AmazonS3/latest/dev/transfer-acceleration.html
如果您的上传带宽有限,则拆分文件毫无意义。
如果您拥有巨大的上传带宽且单个加速端点没有消耗整个上传带宽,您可以拆分文件并使用multipart上传它们。
使用多部分上传单个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
希望它有所帮助。
<强> EDIT1 强>
从S3部分阅读:
使用S3,您不需要阅读完整的对象。您可以指定对象的起始范围和结束范围。您不需要在S3中维护拆分。您可以维护为单个对象。下面的命令将帮助您部分阅读。
另一个好处是,你也可以平行阅读它们。
aws s3api get-object --bucket my_bucket --key object / location / file.txt file1.range-1000-2000.txt --range bytes = 1000-2000