Kubernetes 上的 Dask worker 找不到 csv 文件
Dask workers on Kubernetes cannot find csv file
我在 Dask 文档的帮助下使用 Helm 在 Kubernetes 集群上设置了 Dask 和 JupyterHub:http://docs.dask.org/en/latest/setup/kubernetes.html。
部署一切正常,我可以访问 JupyterLab。然后我创建了一个笔记本并从 Google 云存储桶下载了一个 csv 文件:
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()
到目前为止一切顺利,直到我尝试与数据框进行交互。 F.e。当我尝试执行 df.head()
时出现错误:
[Errno 2] No such file or directory: '/home/jovyan/data/test-file.csv'
为什么其他worker找不到DataFrame?我以为DataFrame是所有worker内存共享的
注意:起初我在没有 Dask Client 的情况下使用 df.head()
并且可以正常工作,但我没有看到任何诊断信息,所以我添加了 client = Client()
。
您已将文件下载到您的客户端 运行 所在的节点,但 kubernetes 中其他节点上的工作人员无法访问该文件系统,因此无法加载该文件。
这里最简单的解决方案是使用 Dask 的本机能力与 GCS 对话。你根本不需要数据的本地副本。您应该安装 gcsfs
,然后尝试:
df = dd.read_csv("gcs://<BUCKET>/test-file.csv", storage_options={'token': CREDENTIALS})
(或者您可能希望通过其他更安全的方式向您的员工分发凭据)。
如果您确实想要数据的本地副本(例如,某些加载程序无法利用远程文件系统),那么您将需要一个共享文件系统在您的 Dask 集群的客户端和工作人员之间,这需要一些 kubernetes-foo 来实现。
更多信息:http://docs.dask.org/en/latest/remote-data-services.html
我在 Dask 文档的帮助下使用 Helm 在 Kubernetes 集群上设置了 Dask 和 JupyterHub:http://docs.dask.org/en/latest/setup/kubernetes.html。
部署一切正常,我可以访问 JupyterLab。然后我创建了一个笔记本并从 Google 云存储桶下载了一个 csv 文件:
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()
到目前为止一切顺利,直到我尝试与数据框进行交互。 F.e。当我尝试执行 df.head()
时出现错误:
[Errno 2] No such file or directory: '/home/jovyan/data/test-file.csv'
为什么其他worker找不到DataFrame?我以为DataFrame是所有worker内存共享的
注意:起初我在没有 Dask Client 的情况下使用 df.head()
并且可以正常工作,但我没有看到任何诊断信息,所以我添加了 client = Client()
。
您已将文件下载到您的客户端 运行 所在的节点,但 kubernetes 中其他节点上的工作人员无法访问该文件系统,因此无法加载该文件。
这里最简单的解决方案是使用 Dask 的本机能力与 GCS 对话。你根本不需要数据的本地副本。您应该安装 gcsfs
,然后尝试:
df = dd.read_csv("gcs://<BUCKET>/test-file.csv", storage_options={'token': CREDENTIALS})
(或者您可能希望通过其他更安全的方式向您的员工分发凭据)。
如果您确实想要数据的本地副本(例如,某些加载程序无法利用远程文件系统),那么您将需要一个共享文件系统在您的 Dask 集群的客户端和工作人员之间,这需要一些 kubernetes-foo 来实现。
更多信息:http://docs.dask.org/en/latest/remote-data-services.html