达斯克不尊重工人指令/约束(workers ='...',allow_other_workers = False)

时间:2019-05-16 21:01:12

标签: dask dask-distributed

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

例如,让我们读入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)

在运行最终的(... sum ... compute)时,仅查看Dask仪表板上的“状态”选项卡,很显然,计算是由集群中的两个工作人员完成的,而不仅仅是w1遵医嘱。 (这由client.has_what()支持,从字面上显示了分散在整个群集中的任务。)

我也尝试过allow_other_workers=False并只是省略了该参数,但是所有组合都会导致整个集群完成工作。我还尝试用ip:port替换工作人员名称,并使用列表而不是运气不好的字符串。 是否有办法真正使机器/节点/工人对任务执行的数据和任务具有亲和力?

作为背景

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

dask-scheduler

我在第二台计算机上开始了一个愚蠢的工作人员

dask-worker <schedulerip:port> --name w1

我在第三台机器上开始了另一位愚蠢的工人

dask-worker <schedulerip:port> --name w2

这在python 3.6上使用dask == 1.2.2和分布式== 1.28.0。

1 个答案:

答案 0 :(得分:1)

好像您在提交调用中正在调用dask dataframe函数。这很奇怪。您正在提交Dask代码以在特定工作程序上运行。然后,Dask代码将回调到集群以运行事物。没有理由在快捷功能上调用Submit。

请参见http://docs.dask.org/en/latest/delayed-best-practices.html#don-t-call-dask-delayed-on-other-dask-collections

相关问题