【发布时间】:2019-08-14 01:08:23
【问题描述】:
我在 S3 中有一个大的 JSON 文件(即 100MB 到 3GB)。如何处理这个?
今天我使用s3client.getObjectContent()获取输入流并尝试处理。
在流式传输时,我将 inputstream 传递给 Jackson jsonparser 并获取每个 JSON 对象并调用另一个微服务来处理从 s3 输入流中检索到的 JSON 对象。
问题:
当我处理 JSON 对象时,S3 流正在关闭,而不处理来自 S3 的整个有效负载。
我收到警告:
S3AbortableInputStream:并非所有字节都从 S3ObjectInputStream 中读取,正在中止 HTTP 连接
我正在寻找一种方法来处理大型 S3 有效负载,而无需 S3 客户端在我处理整个有效负载之前关闭流。任何最佳做法或见解都值得赞赏。
约束:我需要将其作为流处理或占用最少的内存。
【问题讨论】:
-
您是否考虑过先下载整个文件,然后在本地处理?
-
处理是否存在实际问题,或者您只是收到警告?在很多情况下,可以安全地忽略这个警告,它只是意味着一个 HTTP 连接不能被重用。有很多原因,流可能会在其中留下字节而关闭,例如获取对象以检查元数据以确定是否从缓存中提取它。分享您与流交互的代码可能会有所帮助。
-
为什么要在 JSON 文件中存储多达 3GB 的空间?这似乎是一个有问题的设计。我不知道您的数据的形状,但也许您最好将这些项目存储在实际数据库(例如 MongoDB 或 DynamoDB)中?
-
用比your previous 更少的信息问同样的问题不会给你更好的答案。 您需要调试为什么您没有读取整个流。
-
@jarmod,从成本优化的角度来看,在 s3 中存储不会更改且需要经常获取的大数据是最好的选择。难怪我们为什么不能做 Dynamodb。但只有当数据经常更改/更新并需要查询时,这才是更好的选择。
标签: amazon-web-services amazon-s3 aws-sdk aws-java-sdk