Работники Dask в Kubernetes не могут найти файл CSV - PullRequest
0 голосов
/ 01 февраля 2019

Я настроил Dask и JupyterHub на кластере Kubernetes, используя Helm с помощью документации Dask: http://docs.dask.org/en/latest/setup/kubernetes.html.

Все развернуто нормально, и я могу получить доступ к JupyterLab.Затем я создал блокнот и загрузил файл CSV из корзины Google Cloud Storage:

storage_client = storage.Client.from_service_account_json(CREDENTIALS)
bucket = storage_client.get_bucket(BUCKET)
download_blob(bucket, file="test-file", destination_dir="data/")

Я прочитал в файле CSV:

import dask.dataframe as dd
df = dd.read_csv("/home/jovyan/data/*.csv")

Я инициализирую Dask Client так, чтобыЯ могу отслеживать аналитику вычислений:

from dask.distributed import Client, config
client = Client()

Пока все хорошо, пока я не попытаюсь взаимодействовать с фреймом данных.Например, когда я пытаюсь сделать df.head(), я получаю сообщение об ошибке:

[Errno 2] Нет такого файла или каталога: '/home/jovyan/data/test-file.csv'

Почему другие работники не могут найти DataFrame? Я думал, что DataFrame был распределен среди памяти всех работников.

Примечание: Сначала я использовалdf.head() без Dask Client, и это сработало, но я не видел никакой диагностики, поэтому я добавил client = Client().

1 Ответ

0 голосов
/ 01 февраля 2019

Вы загрузили файл на узел, на котором работает ваш клиент, но рабочие на других узлах в kubernetes не имеют доступа к этой файловой системе и поэтому не могут загрузить файл.

самое простое решение здесь - использовать нативную способность Dask общаться с GCS.Вам вообще не нужна локальная копия ваших данных.Вам следует установить gcsfs, а затем попробовать:

df = dd.read_csv("gcs://<BUCKET>/test-file.csv", storage_options={'token': CREDENTIALS})

(или вы можете распространять учетные данные среди своих работников другими более безопасными способами).

Если вы сделали если вам нужна локальная копия ваших данных (например, некоторые загрузчики не могут использовать преимущества удаленных файловых систем), тогда вам понадобится общая файловая система между клиентом и работниками вашего кластера Dask, что потребует некоторого количества kubernetes-фу для достижения.

Дополнительная информация: http://docs.dask.org/en/latest/remote-data-services.html

...