【问题标题】:Running application on a cluster在集群上运行应用程序
【发布时间】:2015-06-23 18:47:45
【问题描述】:

摘要

我使用两个控制台应用程序(Stage-estimateStage-step)完成了我的处理,每个应用程序都处理磁盘上的文件,文件被组织到文件夹中。每个文件夹代表一个处理步骤,当估计所有文件时,该步骤被认为已完成。

假设我们在Step 0 并且文件夹0 包含以下文件:

文件夹0 包含:

000.data
001.data
002.data
...
999.data

我们有data 文件,现在我们需要估计它们,我们运行Stage-estimate 应用程序1000 次,结果如下目录结构:

文件夹0 包含:

000.data
000.estimate
001.data
001.estimate
002.data
002.estimate
...
999.data
999.estimate

Step 0 现已完成,我们拥有所有 data/estimate 对。为了切换到Step 1,我们在每个data/estimate 对文件上运行Stage-step 应用程序1000 次,结果是新的一组1000 个*.data 文件进入文件夹1。在Stage-step 应用程序完成后,我们有一个文件夹1,其结构与我们在Step 0 上的结构相同:

文件夹1 包含:

000.data
001.data
002.data
...
999.data

从现在开始,这个过程会一直重复,直到被取消。

问题

Stage-step 应用程序相比,应用程序Stage-estimate 进行了一些非常繁重的计算,它消耗了99% 的整体处理能力。

我打算使用 AWS 来加快速度。我不想开始发明特殊的批处理文件来以上述方式调用我的应用程序,我知道有特殊的软件可以在调度进程和其他与集群相关的东西方面做一些高水平的工作。

问题

我从来没有处理过集群计算,在我的脑海中,我发现应用程序的并行化非常好,它适合 AWS 基础设施。另一方面,我在集群计算领域完全是新手,我不知道从哪里开始。我正在与 AWS 打交道,但是与集群计算无关,我不知道如何组织我所描述的流程以及如何使其高效运行,所以如果您指出我正确的方向或提供一些链接,我将不胜感激演示/最佳实践。

提前谢谢你!

【问题讨论】:

  • 您介意提供一些有关您的软件的信息吗?您使用什么语言?一个阶段的估算命令是否独立(那么您可以并行运行估算函数吗?)阶段 0 是否必须在阶段 1 开始之前完全准备好?或者如果 000.data 被处理并且 000.estimate 在阶段 0 准备好,您可以在阶段 1 创建 000.data 并估计它,不管任何其他数据文件?
  • 它是用 C++ 编写的,Stage-estimate 接受一个文件并输出另一个文件,因此它完全独立于其他文件,Stage-step 部分依赖于其他文件(实际上它可能需要几个文件作为输入)。当初始目录中有足够的估计值时,可以开始第 1 阶段。因此,这意味着您可以计算阶段 1 的 50%,而仅完成阶段 0 的 90%,但最终最好先完成 Stage 0 然后转到 Stage 1

标签: amazon-web-services cluster-computing


【解决方案1】:

__________编辑__________

根据您的评论,您可以将阶段 0 中的所有作业放入队列并开始处理它。您还可以有一个逻辑来检查您是否只剩下几个作业并尝试从第 1 阶段添加新作业。这将加快您的计算速度,为您提供更好的资源使用,但它是可选的,并使您的系统更复杂.

我建议您使用 SQS(或 SWF)来存储作业,使用 S3 来存储文件,并为工作节点使用一组自动缩放的 Spot 实例。

很遗憾,Lambda 目前不支持 C++。 (支持 Node.js 和 Java。)

________原文________

AWS 支持您可以考虑的几个概念:

解耦:您可以使用 SQS(简单队列服务) 进行作业队列,这为您提供了一个冗余和容错的作业队列。您可以拥有一组工作实例,它们从队列中请求作业,运行它们,如果它们完成,则从队列中删除作业。如果实例在作业执行期间挂起/崩溃,则在超时期限后,作业将返回队列,另一个实例将再次执行它。

其他服务是SWF(简单工作流服务)。此服务在内部使用 SQS 队列,使用此服务,您可能需要更少的脚本来将整个工作流程粘合在一起。

冗余存储:我肯定会使用 AWS S3 进行存储,因为它既便宜又冗余。在第一次阅读之后,我认为您不需要任何高级(类似文件系统)功能。 (例如锁定。)

Spot 实例:对于工作节点,我会使用便宜得多的 Spot 实例。如果您一直需要一个非常快速的答案来解决您的任务,他们唯一的问题是。 (如果您生成每日报告,现场实例是完美的解决方案。)

+1:您可以使用 AWS Lambda 函数来运行您的作业。您可以根据 S3 事件触发 lambda 函数。例如,您上传了一个新的 *.data 文件。但是 Lambda 函数不能运行太久。但是,如果您能够使用 lambda 函数,那么您的所有环境将只包含 S3 存储桶和 lambda 函数。它们都是 AWS 托管服务,因此您的系统将非常灵活、容错。我不能透露任何关于定价的确切细节,但我认为它会比运行 EC2 实例更便宜。

总结:如果您可以并行运行估算,AWS 将为您提供强大的功能和速度。 (为了一大笔钱)特别是如果您的负载在白天发生变化。

好消息来源:White Paper on ‘Cloud Architectures’ and Best Practices of Amazon S3, EC2, SimpleDB, SQS

【讨论】:

    猜你喜欢
    • 2021-11-30
    • 2018-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-12
    • 2017-01-09
    • 2011-03-04
    • 2023-03-11
    相关资源
    最近更新 更多