管理分布式集群?
假设你已经搭建了一个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范式的分布式计算框架。