当前位置: 首页 > 知识库问答 >
问题:

机群作业调度算法

周越泽
2023-03-14

我正在寻找适合以下问题的算法:

  1. 类似Hadoop的公平调度程序。这里的问题是:当集群大小未知时,我可以在哪里获得最小的共享?
  2. 将一些惩罚与每个用户相关联。当用户的作业被安排时,增量惩罚。使用将作业调度给用户的概率为1-(规范化惩罚)。这类似于步幅调度,但我找不到任何好的解释。

共有1个答案

徐秋月
2023-03-14

当我实现一个非常相似的作业运行器(用于生产系统)时,我不再让每个服务器随机选择作业类型。这是我的理由--

>

  • 来自一个用户的作业过多不应影响其他用户运行作业的机会(用户-用户公平性)

    一个作业类型的过剩不应该影响其他作业类型运行的机会(用户-作业和作业-作业公平性)

    调度器知道等待作业、作业类型和用户元数据,但不知道作业数据(即用户名、作业名和计数,但不知道有效载荷)

    我还希望每个服务器都是独立的,可以自主地安排自己的工作,而不必了解其他服务器

    我确定的解决方案是通过{user,jobtype}属性元组跟踪等待作业,并让每个调度步骤随机选择5个元组,从每个元组中最多选择10个作业接下来运行。选定的作业将由下一个可用的运行者运行。只要有足够的容量来运行更多的作业(可能是因为作业已经完成,或者是因为次要限制它们无法运行),就运行另一个调度步骤来获取更多的工作。

    一个特定工作类型的大量工作需要很长时间才能全部完成,但情况总是如此。通过从多个用户中挑选作业类型,作业处理的响应性不会受到不利影响。

    可以添加许多次要限制(例如,每秒对linkedin的调用不超过5次),但以上是系统的核心。

  •  类似资料:
    • 我的we应用程序A将扫描业务相关的数据库表,并在启动期间和之后每10分钟安排石英作业。如果我在两个不同的tomcat实例上部署两个A应用程序,那么将有两组通过Quartz调度的重复作业。 我该如何解决这个问题?我是否需要将调度作业的部分代码提取到单独的应用程序中,并确保只部署了1个实例,从而只调度了1组作业?但是问题变成了--如果这个实例失败了怎么办?在这种情况下,如何实现故障转移?

    • 我有一个使用Quartz1.6.6的Java应用程序。它被部署到Weblogic上,Weblogic的体系结构包括两个应用服务器。 令人困惑的是,我有另一个Java应用程序,其中包含了Quartz调度,它似乎运行得非常愉快。另一个应用程序有一个相同的机制,每分钟触发一个触发器,从日志中我可以看到该作业每60秒只运行一次。 昨天下午作业已运行的次数示例: 15:10:46,984 15:10:49,

    • 我熟悉最短进程下一个调度算法(SJF),它是一种非抢先算法。但是,该算法一次只能处理一个突发时间最小的进程。是否可以一次修改为“下一个最短流程2”? 所以对于这里提到的例子: 第一行表示进程总数。随后的行表示进程ID、到达时间、突发时间。 一次有两个流程的SJF计划将按如下方式工作: 这里 Idle表示当前有多少处理器空闲。在这种情况下,有2个处理器。可以观察到,在时间< code>t=4,有2个

    • 我有一个有两个节点的集群,它连接到同一个数据库,还有一个调度作业,由Quartz调度程序每10分钟启动一次。在quartz.properties中设置。 我感兴趣的是,调度程序是否会为同一节点发出作业,直到每隔10分钟可到达该节点为止,或者它使用某种算法来确定哪个节点将执行该作业。 我在文档(http://www.quartz-scheduler.org/documentation/quartz-

    • 我已经创建了一个C程序来模拟非抢占式最短作业优先算法,但它在某些输入上有缺陷。最短作业优先算法程序接受所需数量的过程的到达和突发时间的输入,并将过程安排在两个阶段中。第一阶段涉及根据到达时间来安排节目,第二阶段根据突发时间来安排节目,假设它们的到达时间低于前一过程完成的时间。这一切最终都会被编译并显示出来。 这些是预期的结果: 这些是我通过我的程序获得的结果: 任何帮助都将不胜感激。谢谢!

    • 现在我需要实现作业队列,因为有些作业不能并行启动。问题是某些作业的状态()是从客户机传递的,为了排队的目的,应该保持这些状态。另一方面,我不能根据用户请求调度作业,因为我不知道什么时候应该执行它!(应该在上一个作业之后立即执行)