在业务中的另一个流程完成后,我们目前正在为一些繁重的工作 (ETL) 设置服务器,目前我们正在通过预定的 cron 作业或远程执行(通过 ssh)启动作业。本周早些时候,我们遇到了一个问题,即系统上并行运行的作业过多,这导致所有作业在争夺 CPU 时间时速度缓慢。
我一直在寻找一个批处理调度器,一个我们可以将作业插入运行队列的系统,系统会一个一个地处理它们。任何人都可以建议一个程序/系统来做到这一点吗?由于该项目的鞋带性质,低成本/ FOSS 将受到赞赏。
在业务中的另一个流程完成后,我们目前正在为一些繁重的工作 (ETL) 设置服务器,目前我们正在通过预定的 cron 作业或远程执行(通过 ssh)启动作业。本周早些时候,我们遇到了一个问题,即系统上并行运行的作业过多,这导致所有作业在争夺 CPU 时间时速度缓慢。
我一直在寻找一个批处理调度器,一个我们可以将作业插入运行队列的系统,系统会一个一个地处理它们。任何人都可以建议一个程序/系统来做到这一点吗?由于该项目的鞋带性质,低成本/ FOSS 将受到赞赏。
我会设置某种排队服务。一个关于“准备使用”的快速谷歌显示:
根据您的需要,您可以简单地
实际上还有更多,您可能有实现优先级队列的要求,这会带来诸如饥饿作业或类似问题之类的问题,但是让某些东西快速启动并运行并不是那么糟糕。
如果 LDP 按照womble的建议,我会接受。由更大的社区维护这样一个系统当然比为其他人已经解决的问题创建自己的错误更好:)
此外,排队服务具有将资源与实际数字运算解耦的优势。通过通过某些网络连接使作业可用,您可以简单地将硬件置于(可能的)扩展问题上,并具有几乎无限的可扩展性。
我想到了两个解决方案:
xargs -P
控制一次最大并行进程。make -j
.它们实际上都在这个SO 线程中进行了更详细的总结。
这些可能不适用于您的脚本结构。
您的问题的一个重量级解决方案是使用类似Sun Grid Engine的东西。
太阳网格引擎 (SGE)。SGE是一个分布式资源管理软件,它允许集群/机器内的资源(cpu时间、软件、许可证等)得到有效利用。
这是一个关于如何使用 SGE 的小教程。
您可以查看一些用于在集群上调度作业的批处理系统,它可以选择监控资源使用情况并声明系统负载过大而无法向其分派更多工作负载。您也可以轻松地将它们配置为一次只运行一项作业,但为此,您最好使用比完整的批处理调度程序更简单的东西(本着保持简单的精神)。
至于免费提供的批处理/调度系统,我想到的两个是 OpenPBS/Torque 和 SGE。
编辑补充:如果您将来要以更多盒子的形式添加更多处理能力,那么像 Torque/OpenPBS/SGE 这样的批处理/调度系统可能是不错的选择,因为它们基本上是为管理计算资源而构建的并将工作负载分配给他们。
你总是可以使用 lpd——是的,老派,但它实际上是一个伪装成打印服务器的通用批处理控制系统。
来自
man batch
:我想这可能是你正在寻找的。它是 Debian 软件包的一部分
at
。wava
:一个内存感知调度程序,当系统中有足够的物理内存 (RSS) 可用时,它允许将批处理作业(以最大物理内存使用承诺提交)排队执行。出于这个确切原因,我们将Control M用于 ETL 等(但在几年前)。当然它不是免费或开源的,但它在批处理方面具有非常好的灵活性(la if-this-then-that 类型的执行流程)
由 cron 调用的 shell 脚本可以很容易地做到这一点,它会逐行处理它。
我会使用 Torque,它是 FOSS OpenPBS 的更新版本。