假设已经建立了一个cassandra集群。您有一个10TB的数据库,该数据库在10个节点之间平均分配,一切运行平稳等。

假设您有100台计算机可供使用,每台计算机都试图从cassandra集群读取(不同)数据。此外,您还有许多需要不断运行的作业,每个作业都在不同的时间运行(显然,每个作业都需要在不同的计算机上运行)。

您如何管理所有这些任务/工作?您如何在机器之间分配任务?您如何在此过程中跟踪作业/机器?

是否有任何开源工具(最好是带有Python客户端的工具)可以在Linux环境中帮助实现这一目标?

最佳答案

您需要一个Grid/HPC框架来处理您的分布式基础结构并运行作业。

在unix/linux中,有两个系统可能对您有用。 Portable Batch Systems (PBS)Condor



Condor和PBS都非常需要充当每个工作/任务的接受者,对于每个工作/任务,您都可以将优先级和区分级别相关联。群集的管理员根据这些标识符设置规则以安排作业。



Condor或PBS将为您完成此工作,您只需将作业提交到主节点并指定优先级,输入和输出等。

您可以定期检查作业的完成时间,通过不同的机制订阅通知或执行某种job.wait()进行阻止,直到完成为止。



PBS和Condor都具有类似top的命令,以列出在等待,运行或取消中排队的作业。如果该进程允许快照,它们还具有停止或取消作业的实用程序。

对于大型群集,我的建议是尝试Condor。像解决您遇到的问题一样,解决问题已经有很长时间了。这里有用于Condor + Python的some examples

其他最近要考虑的解决方案是:

  • Celery Python的分布式任务队列。
  • DiscoProject基于MapReduce范例的分布式计算框架。
  • 关于python - 管理分布式集群?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5671141/

    10-08 22:36