我想找到一个用户空间工具(最好在Python中 - 禁止在任何我可以轻易修改的东西中,如果它尚未完成我所需的工作)来替换很短的剧本我一直在使用,做以下两件事情:负载,可用内存用于作业调度的Python库,ssh
- 投票少于100台计算机(Fedora 13的,所以发生),如果它看起来像有人使用他们
- 为作业选择好的主机,通过ssh运行这些作业。这些作业是执行任意命令行程序,读写共享文件系统 - 通常是图像处理脚本或类似的 - CPU,有时是内存密集型任务。
例如,使用我的当前脚本,我可以在一个python提示
>>> import hosts
>>> hosts.run_commands(['users']*5)
或从命令行
% hosts.py "users" "users" "users" "users" "users"
运行命令users
5倍(发现5后通过从配置文件检查至少5台计算机上的CPU负载和可用内存来运行命令的计算机)。除了刚刚运行的脚本之外,不应该有任何作业服务器,并且在运行这些命令的计算机上不需要工作守护进程或进程。
我还希望能够跟踪作业,在失败时再次运行作业等,但这些是额外的功能(在真正的作业调度程序中非常标准),我实际上并不需要。
我发现很好的Python ssh库,例如classh和PuSSH,它们没有我想要的(非常简单的)负载平衡功能。另一方面,我想要的是Condor或Slurm,正如Crispamares在我澄清之前所建议的,我希望更轻一些。那些人会以正确的方式做事,但是从阅读他们的信息来看,他们听起来像是在我需要的时候在用户空间中旋转它们会令人讨厌是不可能的。这不是一个专用的群集,我没有在这些主机上的root访问权限。
我目前正计划围绕classh使用一些基本轮询计算机的包装,每当我需要知道他们有多忙时,如果我找不到别的东西。
什么样的工作? [fabric](http://docs.fabfile.org/en/1.0.1/index.html)(ssh wrapper,没有作业调度),[jenkins](https://wiki.jenkins-ci.org/display/JENKINS/Meet + Jenkins)(CI工具:可重复任务,零设置,简单负载均衡),[disco](http://discoproject.org/)(MapReduce,erlang + python,只有python jobs?),hadoop (大,需要root?),PBS(转矩 - 传统工作负载管理系统)。 – jfs 2011-04-12 16:37:46
谢谢J.F.编辑的问题,说作业正在运行处理图像,读写共享文件系统的命令行程序。 – Thomas 2011-04-12 17:11:58
这种用法可能是合理的,但是直到平行执行代码才是特征。 – Thomas 2011-04-12 17:31:43