我设置了一个由 1 master and 3 workers
.
在正常情况下,如我们所知,如果用户提交一些作业,作业将被分配给三个工人执行。
但是,如果我想分配 job id_1
至 worker 1
以及 worker 2
,但不是
worker 3 job id_2
至 worker 1
, worker 2
以及
worker 3 job id_3
至 worker 2
以及 worker 3
,但不是 worker 1
spark可以通过一些配置设置、调度或编写代码来将作业分配给指定的worker吗?
任何想法或方法都可以推荐。
1条答案
按热度按时间cwdobuhd1#
你不应该这样做,因为这将使你的工作缓慢,会产生不必要的问题。
设置位置首选项!如果您知道所有工作机的名称,那么可以使用parallelize版本创建,在该版本中可以设置每个分区的首选位置。这将确保将每个分区发送到相应的工作进程的确定性行为(假设推测执行和延迟调度被关闭)。
要在没有硬编码的情况下找出工作节点的名称,可以运行一个包含许多分区的虚拟spark作业,该作业将返回所有工作节点的主机名。这并不是为了确保(但不是保证)每个活动辅助进程上至少有一个分区被调度。事实上,如果系统中有其他作业在运行,那么这些虚拟任务可能不会安排在所有的worker上。如果没有外部机制来了解集群中的所有工作人员,就很难绕过这个问题。
我从来没有像你提交这份工作那样尝试过这件事。
可能这是一个可能的解决办法提示你的问题回答
进入群集模式