【问题标题】:What is the easiest way to launch parallel jobs on AWS?在 AWS 上启动并行作业的最简单方法是什么?
【发布时间】:2019-11-09 12:00:13
【问题描述】:

我的用例如下:

我有一个 python 脚本:

1. reads a file from S3
2. processes the file and outputs a new file
3. saves the output file to S3 (or maybe a database)

python 脚本有一些通过 virtualenv 管理的依赖项。

在 AWS 上并行运行这些脚本的推荐/最简单的方法是什么?

我看到以下选项:

  1. AWS Batch:看起来很复杂 - 我必须构建自己的 Docker 容器,设置 3 个不同的用户,调试起来并不容易。
  2. AWS Lambda:设置起来稍微容易一些,但我仍然需要将我的脚本打包成一个 Lambda 函数。调试似乎不太简单
  3. Slurm 手动启动 EC2 实例 - 从用户的角度来看,这是理想的 - 我所要做的只是创建一个加载 virtualenv 并运行脚本的 jobs.sbatch 文件。主要缺点是我必须安装和配置 slurm。

处理此工作流程的推荐方法是什么?

【问题讨论】:

  • 与“并行运行脚本”相比,您是否考虑过在新文件上传到 S3 时触发脚本?这意味着数据将在数据到达时进行处理,而不是稍后分批处理。
  • 处理每个文件需要多长时间?您需要在什么时间段内处理多少文件,多久处理一次?

标签: amazon-web-services aws-lambda aws-batch


【解决方案1】:

我认为您可以通过使用包含要处理的对象键的 SQS 队列来使用发布/订阅机制。然后,您可以让一组 EC2 实例或 ECS 每个订阅队列并执行单个操作。使用队列,您可以确保每个进程处理问题的单个实例。我认为可以创建一个 auto scaling group in ECS,您可能可以更改机器数量来调整性能/成本。

【讨论】:

  • 来自 10 岁孩子的中肯建议。更严重的是,这意味着我必须手动配置 EC2 实例(这并不可怕)——我可以自动扩展容量吗?
  • @HenryHenrinson 我认为您可以使用 ECS 自动缩放docs.aws.amazon.com/AmazonECS/latest/developerguide/…
  • @HenryHenrinson 您可以根据 SQS 队列中等待的消息数量自动扩展 ECS 或 EC2 实例。如果您可以在 AWS Lambda 中运行您的代码,那么即使是自动缩放也会为您处理,您所需要做的就是将 Lambda 函数与 SQS 队列相关联。
【解决方案2】:

Lambda 将适合您,因为您无需考虑扩展,也无需进行所有设置。关于调试,您可以使用sls wsgi serve轻松完成

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-07
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多