我有 7 台运行 Gentoo Linux 且配备四核处理器的计算机,我希望能够将程序的执行分发到所有这些计算机上。我有一些多线程程序,我想使用集群上所有可用的 28 个 CPU,而不是在每个节点上运行该程序的 7 个副本。
这就像分布式distcc
:我有我的 C/C++ 项目,如果我用而不是 来编译源代码gcc
,它会将编译过程分发到多台计算机上,而且我甚至不需要在 Makefile 中更改任何内容。
对于集群,如果我不需要更改程序源代码中的任何内容就更好了(尽管我认为这是不可能的)。但如果需要,我可以更改程序以使用外部 API。
答案1
有几种方法可以做到这一点,但我怀疑其中任何一种都不能让你按原样运行你的代码。
Hadoop对于某些类型的工作负载来说,它似乎是个不错的选择,并且被雅虎和其他公司广泛使用和维护。
贝奥武甫集群更像是传统的集群。如果你看看贝奥武甫维基百科页面这里有指向替代方案以及专注于集群的 Linux 发行版的链接,例如岩石。
答案2
答案3
答案是高度特定于应用程序。3dinfluence 已经提到了 Hadoop 的可能性,如果您的应用程序分解为 Map-Reduce 执行模型,那么 Hadoop 就非常有用。
如果您计划将工作负载分配到多个节点,但仍希望在类似线程的执行模型中只拥有一个应用程序实例,那么您需要研究某种形式的 MPI。
MPI 是一个具有通用接口的标准,但它有多种实现,例如OpenMPI和骨髓间充质干细胞。本质上,您设计应用程序是为了生成多个副本,这些副本在彼此之间传递消息。然后,MPI 抽象出实际的通信方法。相反,它提供了一系列原始函数,例如发送、接收和广播,您可以在应用程序设计中使用它们。然后,实际通信由您选择的 MPI 堆栈中的模块处理。
OpenMPI 包含许多传输方式,包括共享内存、TCP/IP、InfiniBand、Myrinet Express 等等。您使用其中哪一个以及如何配置它们同样高度依赖于应用程序。
通常,你的 MPI 任务将使用某种批处理排队系统在集群上分配节点,例如扭矩或者太阳网格引擎。如果您在多个用户之间共享集群并且需要调度集群资源,这些会变得更加有用。
我建议你看看Gentoo 集群项目网站并浏览一些链接的资源。这些资源将帮助您更好地了解在集群环境中运行应用程序,并帮助您缩小需要更多帮助的领域的范围。
答案4
你可以考虑用 LiveCD 发行版来测试这个想法,比如集群 Knoppix。