AWS EC2:如何使用100个并行EC2实例处理队列?

0 投票
2 回答
1734 浏览
提问于 2025-04-18 03:20

(ubuntu 12.04)。我想象一种队列,可以把成千上万的任务放进去,然后让100个EC2实例同时处理这些任务,每个实例处理队列中的一个任务。

另外,每个EC2实例都要使用我提供的镜像,这个镜像里已经安装好了我需要的程序和软件。

简单来说,我想在亚马逊的EC2上同时运行100个处理任务(这些任务是用Python编写的函数,依赖于我在镜像中安装的程序),持续一个小时或更短的时间,然后把它们全部关掉,之后在需要的时候再重复这个过程。

这样做可行吗?我正在使用Python的Boto库来实现这个。

2 个回答

3

这是可以实现的。你可以考虑使用SQS。工作任务会被放到一个队列里,工作实例会从队列中取出任务并完成相应的工作。当一个任务完成后,工作实例会把这个任务从队列中删除,这样就不会重复执行同一个任务。

你可以在启动时通过用户数据来配置你的实例,或者你可以制作一个包含所有软件的镜像(AMI)。我推荐使用Packer来制作镜像,因为它非常好用,并且可以通过脚本来操作,这样你的镜像在需要更改时可以一致地重新构建。

如果你需要同时开启和关闭很多实例,可以考虑使用AutoScaling。只需设置你想要运行的工作实例数量,系统会自动处理其他的事情。

2

这听起来用EMR会更简单一些。

你在评论中提到你在做计算机视觉。你可以通过准备一个文件来让你的工作更适合Hadoop,这个文件的每一行都是图像文件的base64编码。

你可以准备一个简单的启动脚本,确保集群中的每个节点都有你需要的软件。Hadoop流处理功能允许你直接使用现有的图像处理代码来完成工作,而不需要重新用Java编写。

当你的工作完成后,集群的实例会被关闭。你还可以指定将输出直接流式传输到S3存储桶,这些功能都是内置的。EMR的费用也很便宜,按照最新的定价,100个m1.medium的EC2实例运行一个小时大约只需2美元:http://aws.amazon.com/elasticmapreduce/pricing/

撰写回答