如何将S3中的大体积ZIP文件传输至Sagemaker Notebook实例?
从S3直接传输文件到Sagemaker Notebook实例的方法
以下几种方法都不需要从本地中转,直接在Sagemaker Notebook实例内完成S3文件的获取与处理:
1. 使用AWS CLI直接下载/同步
Sagemaker Notebook实例默认预装了AWS CLI,只要实例关联的IAM角色拥有S3对象读取权限,就能直接执行命令:
- 下载单个ZIP文件:
aws s3 cp s3://your-bucket-name/path/to/your/file.zip ./local-directory/ - 同步整个S3目录下的所有ZIP文件到实例本地:
aws s3 sync s3://your-bucket-name/source-path/ ./local-directory/
可添加--multipart-chunk-size 10GB参数优化大文件传输效率,或指定--region your-region-id匹配S3桶所在区域以加快速度。
2. 在Python代码中用boto3下载
适合在Notebook的代码单元格中直接操作,尤其适合程序化处理多个文件:
import boto3 from botocore.config import Config # 配置多线程提升大文件下载速度 s3_config = Config(max_concurrency=10) s3 = boto3.client('s3', config=s3_config) # 下载单个文件 s3.download_file( Bucket='your-bucket-name', Key='path/to/your/file.zip', Filename='./local-directory/file.zip' ) # 处理超大文件推荐用流式下载,避免内存溢出 with open('./local-directory/large-file.zip', 'wb') as f: s3.download_fileobj('your-bucket-name', 'path/to/large-file.zip', f)
3. 挂载S3桶到实例文件系统(无需提前下载)
通过s3fs将S3桶挂载为实例的本地目录,直接读取S3上的ZIP文件并解压,仅需存储解压后的文件:
- 安装s3fs:
pip install s3fs - 在Python中挂载并操作:
import s3fs import zipfile # 挂载S3桶 fs = s3fs.S3FileSystem(anon=False) fs.mount('s3://your-bucket-name', './mounted-s3-bucket') # 直接读取S3上的ZIP文件并解压 with zipfile.ZipFile('./mounted-s3-bucket/path/to/file.zip', 'r') as zip_ref: zip_ref.extractall('./unzip-directory/')
注意事项
- 确保Sagemaker Notebook实例的IAM角色已配置
s3:GetObject、s3:ListBucket等必要权限; - 选择磁盘容量足够的实例类型(需容纳100-105GB的解压后文件),或挂载EBS卷扩展存储;
- 大文件传输时,优先使用多线程/分块传输参数提升效率。
内容的提问来源于stack exchange,提问作者Keithx
相关产品推荐
相关产品推荐

