【发布时间】:2018-12-19 17:22:22
【问题描述】:
我想在 AWS 上使用 Java 应用程序处理一个大型 csv(数百万行),并将结果写入另一个 csv。
应用程序打包在一个 jar 中,可以使用一些 shell 命令java -jar myJar.jar -option1 -option2 运行。
可以随时调用应用程序,具体取决于用户上传 csv 并触发应用程序。
- 我首先想到的是在 s3 上上传 csv,并在每次上传时触发 lambda 函数。此 lambda 运行 jar(也存储在 s3 上),然后将结果写入 s3。
问题:它适用于小文件,但 lambda 函数在执行时间、RAM、CPU 和临时文件存储方面受到限制。它们实际上是为短流程而设计的。
- 另一种解决方案是运行 ec2 集群,其中应用等待触发。
问题:让集群运行,即使在空闲时,也意味着要为它付费。
有没有一种解决方案可以运行此 jar,而无需在自定义 AWS 技术中对其等效项进行编码?
编辑:回答cmets
- “实时”需求是由最终用户触发,他们将等待显示结果。几分钟就好了,我会尝试@stdunbar 建议的 ec2 解决方案,看看效果如何。
- 我知道 1M 很小,上面描述的 lambda/s3 解决方案在 5M 行的 csv 上运行良好。但是我正在寻找一些可以很好地扩展的解决方案,当在本地运行 jar 时将使用它,这将是几个小时的问题,而且我们再也负担不起在本地运行它了。 (我在这里仍处于试验阶段,是云解决方案的初学者)
【问题讨论】:
-
需要多“实时”?例如,没有理由让 Lambda 收到“源”csv 已准备就绪的通知,然后启动 EC2 来完成工作。 EC2 根据需要保存输出并关闭。这行得通吗?
-
你查看
AWS Data Pipeline了吗? docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/… 。您甚至可以将其配置为 CSV -> CSV 转换,因此不需要自定义代码。读/写到 S3 或其他地方。 -
新的 Lambda 限制允许它们运行更长时间。 1MM 行是小菜一碟,应该在几分钟内处理完,除非您在进行过程中进行昂贵的侧面查找。
-
编辑回答您的 cmets,我将尝试您建议的解决方案。