gpt4 book ai didi

python - Spark 公平调度不起作用

转载 作者:行者123 更新时间:2023-12-05 07:36:00 25 4
gpt4 key购买 nike

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

调度器.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 作业才能启动。

最佳答案

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

By default, each pool gets an equal share of the cluster (also equal in share to each job in the default pool), but inside each pool, jobs run in FIFO order. For example, if you create one pool per user, this means that each user will get an equal share of the cluster, and that each user’s queries will run in order instead of later queries taking resources from that user’s earlier ones.

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

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

关于python - Spark 公平调度不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49322578/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com