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

Spark fair计划不工作

齐阳
2023-03-14

我正在调查使用spark作为REST API后端的适用性。其中的一个问题似乎是Spark的FIFO调度方法。这意味着,如果一个大任务正在执行中,那么在那个重任务完成之前,任何小任务都无法完成。根据https://spark.apache.org/docs/latest/job-scheduling.html,一个公平的调度程序应该可以解决这个问题。然而,我没有注意到这改变了什么。我配置的排定程序是否错误?

scheduler.xml:

<?xml version="1.0"?>
<allocations>
  <pool name="test">
    <schedulingMode>FAIR</schedulingMode>
    <weight>1</weight>
    <minShare>10</minShare>
  </pool>
</allocations>
$ pyspark --conf spark.scheduler.mode=FAIR --conf spark.scheduler.allocation.file=/home/hadoop/scheduler.xml
>>> import threading
>>> sc.setLocalProperty("spark.scheduler.pool", "test")
>>> def heavy_spark_job():
        # Do some heavy work
>>> 
>>> def smaller_spark_job():
        # Do something simple
>>> 
>>> threading.Thread(target=heavy_spark_job).start()
>>> smaller_spark_job()

只有当重型spark作业的第一个任务不需要所有可用的CPU核时,小型spark作业才能启动。

共有1个答案

竺国兴
2023-03-14

您只需要为您的任务设置不同的池:

默认情况下,每个池获得相同的集群份额(也等于默认池中的每个作业的份额),但在每个池中,作业按FIFO顺序运行。例如,如果您为每个用户创建一个池,这意味着每个用户将获得相同的集群份额,并且每个用户的查询将按顺序运行,而不是以后的查询从该用户的早期查询获取资源。

https://spark.apache.org/docs/latest/job-scheduling.html#default-behavior-of-pools

此外,在PySpark中,子线程不能继承父线程的本地属性,您必须在线程目标函数中设置池。

 类似资料:
  • 我正在尝试在我的应用程序中正确设置sentry软件包。 我可以登录一个用户进出和保护路由,但我似乎不能得到正常工作。我的理解是,用户在被引导到登录页面之前,会被带回到他们最初调用的路由。目前,它只是继续重定向到默认页面。 在我的路线上。php我已设置以下组: 在这个组中,我已经放置了所有受保护的路由。 在我的过滤器里。php我有以下过滤器: 路由::过滤器('sentryGuest',函数(){

  • 我用Spring Boot构建simpy web api services应用程序,并用Spring Boot中的计划任务创建了一些cron作业服务,但不起作用。我需要在每周的12:00(星期一至星期五)运行此服务。这是一个exmaple sheduling:

  • 我正在尝试创建一个在EST时区运行的调度程序。为此,我在Scheduled方法上添加了@Scheduled注释。方法如下所示。我希望这个方法在周一到周五的美国东部时间早上5:00运行,但它在美国东部时间凌晨3:30(美国东部时间下午6:00)运行。

  • 我正在使用@Scheduled annotation运行cron作业。调度工作了一段时间,然后停止工作。我将给出我的代码的简化片段: 这是调度程序: 这是由调度器执行的任务 “开始代理”和“结束代理”的记录次数相同。所以,每一个日程安排都会正确地结束。 “开始任务”和“结束任务”的记录次数相同。所以,毫无疑问,“任务”并不是阻止事情。 但是过了一段时间就停止记录了。有什么问题吗? 这里,TASK_

  • 我正在尝试通过Windows服务器2008 R2中的任务计划程序运行.cmd。我已从服务器计算机的管理员组中的用户登录到服务器。运行计划任务时,“上次运行时间”列在“状态”准备就绪时具有值 (0x1)。但没有任何反应。运行.cmd时,只需双击即可正常工作。这是服务器中的用户的问题还是其他问题?有谁知道这个问题的解决方案吗? 谢谢

  • 我正在使用下面的代码安排作业。 上述代码的问题是,调度器仅在服务器会话之前有效。一旦执行了这个方法,我想在提到的时间触发schedulerjob,即使在服务器重启之后也是如此。有没有办法在liferay中实现这一点?