管理分布式集群?

5
假设您已经建立了一个Cassandra集群。您有一个10[TB]的数据库,均匀分布在10个节点之间,一切运行顺利等等。
假设您拥有100台计算机,每台计算机都尝试从cassandra集群中读取(不同的)数据。此外,您有许多作业需要不断运行,每个作业在不同的时间运行(显然,每个作业都需要在不同的计算机上运行)。
如何管理所有这些任务/工作?如何在计算机之间分发任务?如何在过程中跟踪作业/计算机?
在Linux环境中是否有任何开源工具(最好带有Python客户端),可帮助完成这些任务?
1个回答

3
你需要的是一个Grid/HPC框架来处理你的分布式基础架构和运行作业。
在Unix/Linux系统中,有两个系统可能对你有用。 可移植批处理系统(PBS)Condor 如何管理所有这些任务/作业?
Condor和PBS都需要一个主节点来接收每个作业/任务,对于每个作业/任务,您可以关联优先级和区分器。集群管理员根据这些区分器设置规则以调度作业。
如何在机器之间分配任务?
Condor或PBS会为您完成此操作,您只需要将作业提交到主节点并指定优先级、输入和输出等。
您可以定期检查作业是否完成,通过不同的机制订阅通知,或者进行类似于job.wait()的阻塞操作,直到作业完成。

如何跟踪进程中的作业/机器?

PBS和Condor都有类似于top的命令,可以列出等待、运行或取消的作业。它们还有工具可以停止或取消一个作业,如果该进程允许快照。

对于大型集群,我的建议是尝试使用Condor。它已经存在很长时间,可以解决您所面临的问题。这里有一些关于Condor+Python的示例

其他更近期的解决方案包括:

  • Celery:用于Python的分布式任务队列。
  • DiscoProject:基于MapReduce范例的分布式计算框架。

完美的答案——正是我在寻找的。condor真的是正确的选择吗?在一堆Ubuntu机器上安装和维护它有多难?(我知道一旦安装完成,作业提交就很容易)。我们如何处理这样一个事实:我们提交了一个作业,作业正在运行,然后运行它的机器死了?(在这种情况下,我们将希望将作业重新提交到另一台机器上)此外,例如'celery'可以进行比较吗?顺便说一句,我不仅限于基于python的解决方案,如果您有其他想法,欢迎列出。谢谢。 - user3262424
关于Celery,我不能说太多,我只用它进行玩具测试,它很酷,非常Python导向。关于Condor...我在4年前使用过它,我记得它可以处理节点故障情况并重新安排作业(请参见http://www.cs.wisc.edu/condor/manual/v7.2/2_10DAGMan_Applications.html#SECTION003106100000000000000)。Condor的安装和使用并不困难,但需要中等水平的Unix / Linux管理技能。 - Manuel Salvadores
谢谢。只有一个快速的问题,根据您的经验:condor是否需要节点之间无密码SSH?还是无所谓的? - user3262424
我确信你可以进行配置,无论是带有它还是没有它。 - Manuel Salvadores

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接