首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将档案提取到S3

将档案提取到S3
EN

Stack Overflow用户
提问于 2017-12-04 06:06:16
回答 2查看 34关注 0票数 0

我需要下载压缩档案,解压缩它们并加载到S3。我考虑过使用Lambda来处理下载和未存档,但它有磁盘大小限制。

做这件事最好的服务是什么?我不能使用我的本地机器,因为我希望这项工作能运行几天。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-04 21:36:17

您是正确的,AWS Lambda不适合此任务。500 to的磁盘大小限制将不允许您展开zip文件。

无论如何,您还需要编写一个“管理层”来生成Lambda任务,这实际上是更复杂的任务。

操作中最困难的部分将是跟踪进度,以确保所有文件都已被转换和上传,同时考虑到沿途可能发生的随机故障。

我推荐一些类似这样的东西:

1.获取源文件列表

不知何故,您需要一个要转换的源文件列表。这可能是复杂的,如果更多的文件总是出现(例如,如果它是一个活的系统)。对于出现的其他文件,以后始终可以执行第二次运行。

2.创建工作跟踪器

您需要以某种方式跟踪工作,以便系统知道哪些文件已被处理,哪些文件正在进行中(特别是在并行工作时)。虽然您没有说明输入文件的数量,但它似乎有数万个。

一个非常可靠的方法是为要处理的每个文件创建一个Amazon消息。然后,工人们将从这个队列中撤出(参见下一步)。或者,使用一个简单的数据库来存储信息。

3.工作

最简单的方法是使用以下脚本启动Amazon实例:

  • 确定要处理的下一个文件(从SQS中提取消息或查阅数据库)
  • 做的工作(下载,解压缩,上传)
  • 标记已完成的工作(或将其标记为错误,稍后在单独的传递中重新尝试)

从一个小的文件列表开始,以确认这个过程是否正常,然后增加数量。

为了充分利用带宽和CPU,您可以在实例上运行多个进程。每个人都是一个独立的工人。

使用 EC2 Spot实例来降低处理成本。尝试各种实例类型以找到最佳组合--有些实例存储提供非常快速的本地存储(特别是那些带有SSD的实例存储)。拥有某种形式的日志记录将帮助您跟踪进度,并确定哪些实例类型的性能最好,以及在每个工作人员上运行的并行进程的最佳数量。

通过跟踪SQS或数据库中的工作,可以在不丢失进度的情况下停止/启动进程。它还可以跨多个实例进行缩放,每个实例有多个工作人员。

4.处理错误

会出现问题(糟糕的压缩文件、网络故障、随机错误),因此您需要再试一次,并调查特定的错误。您的系统需要跟踪这些问题,以便重新处理它们。

5.审计结果

假设您希望处理所有文件,则应该进行最后一次传递,将源文件列表与上传文件的最终列表进行比较。

该方法将取决于您如何将文件上载到S3 --如果S3对象是根据其源命名的(例如A01.zip的源文件将扩展到A01/file1A01/file2等),那么这项工作就容易得多。

的底线是:你正在做的工作非常简单。跟踪这项工作要比实际工作花费更多的精力。

票数 1
EN

Stack Overflow用户

发布于 2017-12-04 08:30:11

一个可能的解决方案是:获得一个EC2纳米实例(非常便宜)。附上EBS卷。编写一个使用wget/curl下载文件并使用AWS上传到S3的bash脚本

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47627409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档