运行 集群上的应用程序
Running application on a cluster
摘要
我使用两个控制台应用程序(Stage-estimate
、Stage-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
,我们 运行 Stage-step
在每个 data
/estimate
对文件上应用 1000 次,结果产生了新的 1000 组 *.data
文件放入文件夹 1
。 Stage-step
申请完成后,我们有一个文件夹 1
,其结构与我们在 Step 0
:
上的结构相同
文件夹 1
包含:
000.data
001.data
002.data
...
999.data
从现在开始重复该过程,直到它被取消。
问题
应用程序 Stage-estimate
进行了一些相当繁重的计算,与 Stage-step
应用程序相比,它消耗了 99% 的总处理能力。
我打算使用 AWS 来加快速度。我不想开始发明会以上述方式调用我的应用程序的特殊批处理文件,我知道有一些特殊的软件可以在调度进程和其他集群相关的东西上做一些高级工作。
问题
我从来没有处理过集群计算,我突然发现应用程序的并行化非常好,它适合 AWS 基础设施。另一方面,我是集群计算领域的新手,我不知道从哪里开始。我正在处理 AWS,但与集群计算无关,我不知道如何组织我描述的流程以及如何使其有效 运行,所以如果你指出正确的方向或我将不胜感激提供一些关于演示/最佳实践的链接。
提前致谢!
__________Edit__________
根据您的评论,您可以将阶段 0 中的所有作业放入队列中并开始处理它。您还可以有一个逻辑来检查您是否只剩下几个工作并尝试从阶段 1 添加新工作。这会加快您的计算速度,为您提供更好的资源使用,但它是可选的并且会使您的系统更复杂.
我建议您使用 SQS(或 SWF)来存储作业,使用 S3 来存储文件,并为工作节点使用自动缩放的 spot 实例组。
很遗憾,Lambda 目前不支持 C++。 (支持 Node.js 和 Java。)
________Original________
AWS 支持您可能会考虑的几个概念:
解耦:你可以使用SQS(Simple Queue Service)进行作业排队,它给你一个冗余和容错的作业队列.您可以拥有一组工作实例,它们从队列中请求作业,运行 将它们合并,如果它们完成,则从队列中删除该作业。如果在作业执行过程中实例hangs/crashes,超时后作业返回队列,另一个实例将再次执行它。
其他服务是 SWF(简单工作流服务)。此服务在内部使用 SQS 队列,使用此服务,您可能需要更少的脚本来将整个工作流程粘合在一起。
冗余存储: 我肯定会使用 AWS S3 进行存储,因为它既便宜又冗余。第一次阅读后,我认为您不需要任何高级(如文件系统)功能。 (例如锁定。)
Spot 实例: 对于工作节点,我会使用便宜得多的 Spot 实例。如果您始终需要真正快速的回答您的任务,那么他们唯一的问题。 (如果您生成每日报告,现货实例是完美的解决方案。)
+1: 您可以使用 AWS Lambda 函数来 运行 您的工作。您可以根据 S3 事件触发您的 lambda 函数。例如,您上传了一个新的 *.data 文件。但是 Lambda 函数不能 运行 太长。但是,如果您能够使用 lambda 函数,那么您的所有环境将只包含 S3 存储桶和 lambda 函数。它们都是 AWS 托管服务,因此您的系统将非常灵活、容错。我不能说出任何关于定价的确切细节,但我认为它会比 运行ning EC2 实例便宜。
总结: 如果您可以 运行 您的估计并行,AWS 会为您提供强大的功能和速度。 (为了赚大钱)尤其是当你的负载在白天变化时。
一个好的来源:White Paper on ‘Cloud Architectures’ and Best Practices of Amazon S3, EC2, SimpleDB, SQS
摘要
我使用两个控制台应用程序(Stage-estimate
、Stage-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
,我们 运行 Stage-step
在每个 data
/estimate
对文件上应用 1000 次,结果产生了新的 1000 组 *.data
文件放入文件夹 1
。 Stage-step
申请完成后,我们有一个文件夹 1
,其结构与我们在 Step 0
:
文件夹 1
包含:
000.data
001.data
002.data
...
999.data
从现在开始重复该过程,直到它被取消。
问题
应用程序 Stage-estimate
进行了一些相当繁重的计算,与 Stage-step
应用程序相比,它消耗了 99% 的总处理能力。
我打算使用 AWS 来加快速度。我不想开始发明会以上述方式调用我的应用程序的特殊批处理文件,我知道有一些特殊的软件可以在调度进程和其他集群相关的东西上做一些高级工作。
问题
我从来没有处理过集群计算,我突然发现应用程序的并行化非常好,它适合 AWS 基础设施。另一方面,我是集群计算领域的新手,我不知道从哪里开始。我正在处理 AWS,但与集群计算无关,我不知道如何组织我描述的流程以及如何使其有效 运行,所以如果你指出正确的方向或我将不胜感激提供一些关于演示/最佳实践的链接。
提前致谢!
__________Edit__________
根据您的评论,您可以将阶段 0 中的所有作业放入队列中并开始处理它。您还可以有一个逻辑来检查您是否只剩下几个工作并尝试从阶段 1 添加新工作。这会加快您的计算速度,为您提供更好的资源使用,但它是可选的并且会使您的系统更复杂.
我建议您使用 SQS(或 SWF)来存储作业,使用 S3 来存储文件,并为工作节点使用自动缩放的 spot 实例组。
很遗憾,Lambda 目前不支持 C++。 (支持 Node.js 和 Java。)
________Original________
AWS 支持您可能会考虑的几个概念:
解耦:你可以使用SQS(Simple Queue Service)进行作业排队,它给你一个冗余和容错的作业队列.您可以拥有一组工作实例,它们从队列中请求作业,运行 将它们合并,如果它们完成,则从队列中删除该作业。如果在作业执行过程中实例hangs/crashes,超时后作业返回队列,另一个实例将再次执行它。
其他服务是 SWF(简单工作流服务)。此服务在内部使用 SQS 队列,使用此服务,您可能需要更少的脚本来将整个工作流程粘合在一起。
冗余存储: 我肯定会使用 AWS S3 进行存储,因为它既便宜又冗余。第一次阅读后,我认为您不需要任何高级(如文件系统)功能。 (例如锁定。)
Spot 实例: 对于工作节点,我会使用便宜得多的 Spot 实例。如果您始终需要真正快速的回答您的任务,那么他们唯一的问题。 (如果您生成每日报告,现货实例是完美的解决方案。)
+1: 您可以使用 AWS Lambda 函数来 运行 您的工作。您可以根据 S3 事件触发您的 lambda 函数。例如,您上传了一个新的 *.data 文件。但是 Lambda 函数不能 运行 太长。但是,如果您能够使用 lambda 函数,那么您的所有环境将只包含 S3 存储桶和 lambda 函数。它们都是 AWS 托管服务,因此您的系统将非常灵活、容错。我不能说出任何关于定价的确切细节,但我认为它会比 运行ning EC2 实例便宜。
总结: 如果您可以 运行 您的估计并行,AWS 会为您提供强大的功能和速度。 (为了赚大钱)尤其是当你的负载在白天变化时。
一个好的来源:White Paper on ‘Cloud Architectures’ and Best Practices of Amazon S3, EC2, SimpleDB, SQS