用于运行批处理作业的AWS产品?

时间:2016-01-21 22:23:19

标签: amazon-ec2

我有一个用C ++ 11编写的程序。在当前输入上运行需要很长时间。幸运的是,数据可以安全地分成块进行并行处理,这使得它成为Map / Reduce服务的理想选择。

AWS EMR可能是一种可行的解决方案。但是,由于我的代码使用了许多现代库,因此在为Apache Hadoop集群分配的实例上编译它会非常痛苦。例如,我想使用soci(根本不可用),boost 1.58+(1.53就在那里)等等。我还需要一个现代的C ++编译器。

显然,所有库和编译器都可以手动升级(并且脚本编写过程),但这听起来像很多手动工作。奴隶节点怎么样 - 他们会获得所有的库吗?不知怎的,我不确定。现在,整个环境的整个过程可能需要很长时间 - 从而扼杀了许多性能优势,分配工作应该从一开始就引入。

另一方面,我并不真正需要Apache Hadoop提供的所有高级功能。而且我不想用自己安装的Hadoop或类似的设置个人永久集群,因为我只需要定期运行任务,大部分时间服务器都会空闲,浪费钱。

那么,可以做到以下几点的最佳产品(或整体策略)是什么:

  • 抓取给定的二进制文件+输入文件集
  • 使用最新的Linux(最好是Ubuntu 15.10)在预定义数量的实例上运行二进制文件
  • 将生成的文件放在预定义的位置(S3存储桶?)
  • 关闭所有内容

我确信我可以使用aws工具编写一些脚本来手动实现,但我真的不想重新发明轮子。有什么想法吗?

提前致谢!

2 个答案:

答案 0 :(得分:0)

老实说,编写脚本非常简单,并且您可能需要使用脚本来在服务器启动时获取最新代码。我建议考虑使用计划的扩展策略定义AutoScaling组。或者,您可以安排Lambda函数运行并发出API命令来创建实例。

您可以在服务器AMI上安装启动脚本,或者在创建实例时简单地传递用户数据脚本,从而下拉二进制文件并输入文件并运行命令。脚本的最后一步可能是将结果复制到S3并关闭服务器。

答案 1 :(得分:0)

(相对较新的)AWS Batch专门用于此目的。