Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅
中国的 Amazon Web Services 服务入门
(PDF)。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon S3 Transfer Manager 版本 1 到 版本 2 的更改
本主题详细介绍了 Amazon S3 Transfer Manager 从版本 1 (v1) 到版本 2 (v2) 的更改。
高级别更改
更改 |
v1 |
v2 |
Maven 依赖项
|
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-bom</artifactId>
<version>1.12.6911 </version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
</dependency>
</dependencies>
|
<dependencyManagement>
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>bom</artifactId>
<version>2.27.212 </version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3-transfer-manager</artifactId>
</dependency>
// Add the following if using the
// AWS CRT-based S3 client.
<dependency>
<groupId>software.amazon.awssdk.crt</groupId>
<artifactId>aws-crt</artifactId>
<version>0.29.143 </version>
</dependency>
</dependencies>
|
软件包名称 |
com.amazonaws.services.s3.transfer |
software.amazon.awssdk.transfer.s3 |
类名称 |
TransferManager
|
S3TransferManager
|
1 最新版本。 2 最新版本。 3 最新版本。
配置更改
您需要为 v2 传输管理器设置的配置更改取决于您使用的 S3 客户端。您可以选择 Amazon CRT基于 S3 客户端或基于 Java 的标准的 S3 异步客户端。有关差异的信息,请参阅中的 S3 客户端 Amazon SDK for Java 2.x主题。
- Use the Amazon CRT-based S3 client
-
设置 |
v1 |
v2-使用 Amazon CRT基于 S3 客户端的传输管理器 |
(获取生成器)
|
TransferManagerBuilder tmBuilder =
TransferManagerBuilder.standard();
|
S3TransferManager.Builder tmBuilder =
S3TransferManager.builder();
|
S3 客户端
|
tmBuilder.withS3Client(...);
tmBuilder.setS3Client(...);
|
tmBuilder.s3Client(...);
|
执行程序
|
tmBuilder.withExecutorFactory(...);
tmBuilder.setExecutorFactory(...);
|
tmBuilder.executor(...);
|
关闭线程池
|
tmBuilder.withShutDownThreadPools(...);
tmBuilder.setShutdownThreadPools(...);
|
不支持。关闭后,提供的执行者不会被关闭 S3TransferManager |
最小上传段大小
|
tmBuilder.withMinimumUploadPartSize(...);
tmBuilder.setMinimumUploadPartSize(...);
|
S3AsyncClient s3 = S3AsyncClient.crtBuilder().
minimumPartSizeInBytes(...).build();
tmBuilder.s3Client(s3);
|
分段上传阈值
|
tmBuilder.withMinimumUploadPartSize(...);
tmBuilder.setMinimumUploadPartSize(...);
|
S3AsyncClient s3 = S3AsyncClient.crtBuilder().
thresholdInBytes(...).build();
tmBuilder.s3Client(s3);
|
最小复制段大小
|
tmBuilder.withMinimumUploadPartSize(...);
tmBuilder.setMinimumUploadPartSize(...);
|
S3AsyncClient s3 = S3AsyncClient.crtBuilder().
minimumPartSizeInBytes(...).build();
tmBuilder.s3Client(s3);
|
分段复制阈值
|
tmBuilder.withMinimumUploadPartSize(...);
tmBuilder.setMinimumUploadPartSize(...);
|
S3AsyncClient s3 = S3AsyncClient.crtBuilder().
thresholdInBytes(...).build();
tmBuilder.s3Client(s3);
|
禁用并行下载
|
tmBuilder.withDisableParallelDownloads(...);
tmBuilder.setDisableParallelDownloads(...);
|
通过将禁用分段功能(默认)的基于 Java 的标准 S3 客户端传递给传输管理器,禁用并行下载。S3AsyncClient s3 =
S3AsyncClient.builder().build();
tmBuilder.s3Client(s3);
|
始终计算多分段 md5
|
tmBuilder.withAlwaysCalculateMultipartMd5(...);
tmBuilder.setAlwaysCalculateMultipartMd5(...);
|
不支持。 |
- Use Java-based S3 async client
-
设置 |
v1 |
v2-使用基于 Java 的 S3 异步客户端的传输管理器 |
(获取生成器)
|
TransferManagerBuilder tmBuilder =
TransferManagerBuilder.standard();
|
S3TransferManager.Builder tmBuilder =
S3TransferManager.builder();
|
S3 客户端
|
tmBuilder.withS3Client(...);
tmBuilder.setS3Client(...);
|
tmBuilder.s3Client(...);
|
执行程序
|
tmBuilder.withExecutorFactory(...);
tmBuilder.setExecutorFactory(...);
|
tmBuilder.executor(...);
|
关闭线程池
|
tmBuilder.withShutDownThreadPools(...);
tmBuilder.setShutdownThreadPools(...);
|
不支持。关闭后,提供的执行者不会被关闭 S3TransferManager |
最小上传段大小
|
tmBuilder.withMinimumUploadPartSize(...);
tmBuilder.setMinimumUploadPartSize(...);
|
S3AsyncClient s3 = S3AsyncClient.builder()
.multipartConfiguration(cfg ->
cfg.minimumPartSizeInBytes(...)).build();
tmBuilder.s3Client(s3);
|
分段上传阈值
|
tmBuilder.withMinimumUploadPartSize(...);
tmBuilder.setMinimumUploadPartSize(...);
|
S3AsyncClient s3 = S3AsyncClient.builder()
.multipartConfiguration(cfg ->
cfg.thresholdInBytes(...)).build();
tmBuilder.s3Client(s3);
|
最小复制段大小
|
tmBuilder.withMinimumUploadPartSize(...);
tmBuilder.setMinimumUploadPartSize(...);
|
S3AsyncClient s3 = S3AsyncClient.builder()
.multipartConfiguration(cfg ->
cfg.minimumPartSizeInBytes(...)).build();
tmBuilder.s3Client(s3);
|
分段复制阈值
|
tmBuilder.withMinimumUploadPartSize(...);
tmBuilder.setMinimumUploadPartSize(...);
|
S3AsyncClient s3 = S3AsyncClient.builder()
.multipartConfiguration(cfg ->
cfg.thresholdInBytes(...)).build();
tmBuilder.s3Client(s3);
|
禁用并行下载
|
tmBuilder.withDisableParallelDownloads(...);
tmBuilder.setDisableParallelDownloads(...);
|
通过将禁用分段功能(默认)的基于 Java 的标准 S3 客户端传递给传输管理器,禁用并行下载。S3AsyncClient s3 =
S3AsyncClient.builder().build();
tmBuilder.s3Client(s3);
|
始终计算多分段 md5
|
tmBuilder.withAlwaysCalculateMultipartMd5(...);
tmBuilder.setAlwaysCalculateMultipartMd5(...);
|
不支持。 |
行为更改
并行传输要求
在 SDK Java 2.x 版中,自动并行传输功能(分段上传/下载)可通过Amazon CRT基于的 S3 客户端和基于 Java 的 S3 异步客户端获得。要使用 Amazon CRT基于的 S3 客户端,必须显式添加Amazon
通用运行时 (CRT) 库依赖项以最大限度地提高性能。要使用启用了多部分功能的基于 Java 的 S3 异步客户端,必须使用 at 版本 SDK 2.25.X <TODO>
或更高。
仅使用 Amazon CRT基于 S3 的客户端(不使用S3TransferManager
)即可最大限度地提高并行传输性能。 S3TransferManager
v2 提供了其他功能APIs,可以更轻松地传输文件和目录。
通过字节范围提取进行并行下载
启用自动并行传输功能后,S3 Transfer Manager v2 使用字节范围提取来并行检索对象的特定部分(分段下载)。使用 v2 下载对象的方式不取决于对象最初的上传方式。所有下载都可以从高吞吐量和并发性中受益。
相比之下,在 S3 Transfer Manager v1 中,对象最初的上传方式确实很重要。S3 Transfer Manager v1 检索对象各个分段的方式与上传分段的方式相同。如果对象最初是作为单个对象上传的,则 S3 Transfer Manager v1 无法通过使用子请求来加速下载过程。
失败行为
在 S3 Transfer Manager v1 中,如果任何子请求失败,则目录传输请求将失败。与 v1 不同,即使某些子请求失败,从 S3 Transfer Manager v2 返回的 future 也会成功完成。
因此,即使 future 成功完成,也应使用 CompletedDirectoryDownload.failedTransfers()
方法或 CompletedDirectoryUpload.failedTransfers()
方法检查响应中是否存在错误。