Dask不遵守工人指令/约束(工人=';…';,允许其他工人=False)

Dask不遵守工人指令/约束(工人=';…';,允许其他工人=False),dask,dask-distributed,Dask,Dask Distributed,我注意到,在提交作业并运行compute()时,尽管尝试将工作限制在dask分布式集群上的特定节点上(使用workers=“…”,allow_other_workers=False),但任务似乎仍然由多个worker完成 例如,让我们读入CSV,然后尝试汇总列的内容: import dask.dataframe as dd dfut1 = client.submit(dd.read_csv, 'https://s3.amazonaws.com/nyc-

我注意到,在提交作业并运行compute()时,尽管尝试将工作限制在dask分布式集群上的特定节点上(使用workers=“…”,allow_other_workers=False),但任务似乎仍然由多个worker完成

例如,让我们读入CSV,然后尝试汇总列的内容:

import dask.dataframe as dd
dfut1 = client.submit(dd.read_csv, 
                     'https://s3.amazonaws.com/nyc-tlc/trip+data/yellow_tripdata_2009-01.csv', 
                     workers='w1', allow_other_workers=False)
df1 = client.gather(dfut1)
df1.Passenger_Count.sum().compute(workers='w1', allow_other_workers=None)
当运行final like(…sum…compute)时,只要查看Dask仪表板上的“Status”选项卡,就可以清楚地看到,计算是由集群上的两个工作人员完成的,而不仅仅是w1按照指示完成的。(这由client.has_what()支持,它字面上显示了分布在集群中的任务。)

我还尝试了
allow_other_workers=False
并简单地省略了参数,但所有组合都会导致在集群中完成工作。我还尝试用ip:port替换工作者名称,并使用列表而不是字符串,但运气不好有没有办法真正强制机器/节点/工作者与任务执行的数据和任务保持密切关系?

作为背景,

我在第一台机器上启动了dask调度程序

我在第二台机器上启动了dask工人

dask工作者——名称w1
我在第三台机器上启动了另一个dask工人

dask工作者——名称w2

这是在Python3.6上使用dask==1.2.2和distributed==1.28.0。

看起来您正在提交调用中调用dask数据帧函数。这很奇怪。您正在提交Dask代码以在特定工作进程上运行。然后,该Dask代码将调用集群来运行这些操作。没有理由对dask函数调用submit


请参见独立验证。加载小数据文件时,加载(和存储)似乎发生在单个节点上,但在达到某个文件大小阈值后,无论“允许其他工作人员”设置如何,熊猫读取都会分散。
dask-scheduler
dask-worker <schedulerip:port> --name w1
dask-worker <schedulerip:port> --name w2