首页 > 解决方案 > 从具有数千个 s3 对象的 s3 存储桶中读取

问题描述

我有一个包含 12,000 个 s3 对象的 s3 存储桶。我想分批阅读这些 s3 对象(比如 50 个)。我已将最大连接数设置为 1000(但我们有 12,000 个,通常一次打开这么多连接通常不是一个好习惯,因为我最终一次只能读取几个)我有多线程 Java 代码,它读取从这些 s3 对象中,每个 s3 对象都分配给一个线程。这是问题 1. 我想批量读取 s3 对象,一次说 50 个,但是由于我们只从存储桶中读取 50 个对象并将 S3ObjectInputStream 分配给一个线程,所以我收到所有其他输入流的连接重置错误一直在等待真正开始从 s3 对象读取

java.net.SocketException:连接重置

解决此类问题的最佳方法是什么。

我已将最大连接数增加到 1000,虽然我有 12k,但我怎样才能自动执行此操作,这样我就不必在最后将 s3 存储桶拆分为 1000 个对象。

标签: javaamazon-s3aws-sdkinputstream

解决方案


我怀疑问题在于您正在尝试使用 S3 Batch 执行它不支持的操作。文档说:

要创建作业,您需要为 Amazon S3 批处理操作提供对象列表并指定要对这些对象执行的操作。Amazon S3 批处理操作支持以下操作:

  • PUT 复制对象

  • PUT 对象标记

  • PUT 对象 ACL

  • 启动冰川恢复

  • 调用 AWS Lambda 函数

对象 GET 不在该列表中。

(但是,如果您向我们展示了一个最小的可重现示例,我们可以理解您真正在做什么!)


推荐阅读