在Amazon S3上解压缩大型ZIP文件

Ale*_*all 6 zip unzip amazon-s3 amazon-web-services

我在一家处理非常大的CSV文件的公司工作.客户端通过filepicker将文件上载到Amazon S3 .然后,多个服务器进程可以并行读取文件(即从不同点开始)以处理它并将其存储在数据库中.可选地,客户端可以在上载之前压缩文件.

  1. 我是否正确ZIP格式不允许并行解压缩单个文件?也就是说,没有办法让多个进程从不同的偏移量读取ZIP文件(可能在块之间有一些重叠)并从那里流出未压缩的数据?

如果我是正确的,那么我想要一种方法来获取S3上的ZIP文件并生成一个解压缩的CSV,也在S3上.

  1. 亚马逊是否提供可以执行此任务的任何服务?我希望Data Pipeline可以完成这项工作,但它似乎有局限性.例如"CopyActivity不支持复制多部分Amazon S3文件"(源代码)似乎暗示我无法使用它解压缩大于5GB的任何内容.我对数据管道的理解非常有限,所以我不知道它对于这个任务有多适合,或者我认为它的位置.
  2. 是否有任何SaaS可以完成这项工作?

我可以编写代码来下载,解压缩和分段上传文件回S3,但我希望有一个高效,易于扩展的解决方案.AWS Lambda非常适合运行代码(以避免配置不需要的资源),但执行时间限制为60秒.此外,用例看起来如此简单和通用我希望找到一个现有的解决方案.

E.J*_*nan 5

最好的选择可能是每次将 zip 文件上传到 S3 时都会向 SQS 队列发送 S3 事件通知,并让一个或多个 EC2 实例轮询队列等待文件解压缩。

您可能只需要运行实例来执行此操作,但您也可以有一个自动缩放策略,如果 SQS 队列的大小对于单个实例来说太大而无法足够快地进行解压缩(如定义),则该策略会启动更多实例你)。


Dil*_*mar 5

@EJ Brennan 是对的,我与 AWS 支持人员聊天,他们告诉我们不能使用 Lambda 来执行此操作。以下是我从支持部门获得的指导。

  • 每当在 S3 中删除文件时。

  • 触发对 SQS 的通知。

  • 让 EC2 听 SQS。

  • 做Un ZIP。

  • 向 SQS 添加另一个通知,下一个 lambda 函数可以进行进一步处理。

希望它可以帮助某人。我浪费了很多时间来解决这个问题,

解决方案/变通!!

经过更长时间的斗争,我从我的技术负责人那里得到了解决方案。我们可以使用AWS Glue来解决这个问题。那有更多的内存可以使用。它完成了工作。

希望它可以帮助某人。