Я замечаю, что при отправке заданий и выполнении 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 на моей 1-й машине
dask-scheduler
Я запустил рабочий на 2-й машине
dask-worker <schedulerip:port> --name w1
Я запустил другой рабочий на 3-й машине
dask-worker <schedulerip:port> --name w2
Это использует dask == 1.2.2 и распространяется == 1.28.0 на python 3.6.