管理分布式集群?

5 投票
1 回答
3118 浏览
提问于 2025-04-16 15:46

假设你已经搭建了一个Cassandra集群。你有一个10TB的数据库,这个数据库均匀分布在10台机器上,一切运行得很顺利。

现在假设你有100台机器,每台机器都在尝试从Cassandra集群中读取不同的数据。此外,你还有很多工作需要不断地运行,每个工作在不同的时间(显然,每个工作需要在不同的机器上运行)。

那么,你该如何管理这些任务呢?你怎么把任务分配给这些机器?在这个过程中,你又如何跟踪这些工作和机器的状态呢?

有没有什么开源工具(最好是有Python客户端的)可以帮助你在Linux环境中完成这些工作?

1 个回答

3

你需要一个网格/HPC框架来管理你的分布式基础设施并运行任务。

在Unix/Linux系统中,有两个系统可能对你很有帮助。一个是可移植批处理系统(PBS),另一个是Condor

你是怎么管理这些任务的?

Condor和PBS都有一个主节点,负责接收每个任务。对于每个任务,你可以设置优先级和一些区分条件。集群的管理员会根据这些条件来安排任务的执行。

你是怎么在机器之间分配任务的?

Condor或PBS会帮你处理这些事情,你只需要把任务提交给主节点,并指定优先级、输入和输出等信息。

你可以定期检查任务是否完成,或者通过不同的方式订阅通知,或者使用类似job.wait()的方式来等待任务完成。

你是怎么跟踪任务和机器的状态的?

PBS和Condor都有类似top的命令,可以列出正在等待、运行或取消的任务。如果进程允许快照,它们也有工具可以停止或取消任务。

对于大型集群,我建议你试试Condor。它已经存在很久,专门解决像你这样的问题。这里有一些Condor与Python的示例

还有一些比较新的解决方案可以考虑:

  • Celery,这是一个用于Python的分布式任务队列。
  • DiscoProject,这是一个基于MapReduce范式的分布式计算框架。

撰写回答