假设已经设置了一个cassandra集群。您有一个10TB的数据库,它均匀地分布在10个节点上,一切都运行得很顺利。
假设您有100台机器可供使用,每台机器都试图从cassandra集群读取(不同的)数据。此外,您还需要经常运行许多作业,每个作业在不同的时间运行(显然,每个作业都需要在不同的计算机上运行)。
您如何管理所有这些任务/工作?如何在机器之间分配任务?如何跟踪进程中的作业/机器?
在Linux环境中,有什么开源工具(最好是带有Python客户端的)可以帮助你做到这一点吗?
发布于 2011-04-15 16:32:19
您需要的是一个网格/HPC框架来处理您的分布式基础设施和运行作业。
在unix/linux中,有两个系统可能对您有很好的帮助。Portable Batch Systems (PBS)或Condor
您如何管理所有这些任务/作业?
Condor和PBS都有一个主控需要充当每个作业/任务的受体,对于每个作业/任务,您可以将优先级和鉴别器关联起来。集群的管理员根据这些鉴别器设置规则来调度作业。
如何在机器之间分配任务?
Condor或PBS将为您完成此任务,您只需将作业提交到主节点并指定优先级、输入和输出等。
您可以定期检查作业何时完成,通过不同的机制订阅通知,或者执行某种job.wait()以阻止作业完成。
如何跟踪进程中的作业/机器?
PBS和Condor都有类似于top的命令来列出在等待、运行或取消中排队的作业。如果进程允许快照,它们还具有停止或取消作业的实用程序。
对于大型集群,我的建议是尝试使用Condor。它已经存在很长一段时间了,用来解决和你一样的问题。这里有用于Condor + Python的some examples
要考虑的其他较新的解决方案包括:
https://stackoverflow.com/questions/5671141
复制相似问题