我使用Helm创建了一个Dask集群。
NAME READY STATUS RESTARTS AGE
dask01-jupyter-aaa-aaaa 1/1 Running 0 3d19h
dask01-scheduler-bbb-bbbb 1/1 Running 0 3d19h
dask01-worker-ccc-cccc 1/1 Running 0 3d19h
dask01-worker-ddd-dddd 1/1 Running 0 3d19h
dask01-worker-eee-eeee 1/1 Running 0 3d19h
我可以运行基本的Dask工作负载。
import dask.array as da
array = da.ones((1000, 1000, 1000), chunks=(100, 100, 10))
现在,我想以某种方式将其连接到客户端:
from dask import distributed
cluster = None # TODO: configure KubeCluster somehow https://kubernetes.dask.org/en/latest/
client = distributed.Client(cluster)
如果我想launch a cluster可以使用:
from dask_kubernetes import KubeCluster
cluster = KubeCluster.from_yaml('worker-spec.yml')
但是如何连接到现有集群?
答案 0 :(得分:1)
Dask Helm Chart和ID LOCATION COUNTER1
1 3 1
2 3 1
3 2 2
4 2 2
5 3 3
6 1 4
7 3 5
8 3 5
9 3 5
是两个单独的项目,它们以不同的方式工作。它们不兼容。
如果您正在使用作为舵图的一部分创建的Jupyter笔记本,则已经为您配置了所有内容,您可以使用默认选项创建Dask客户端。
dask-kubernetes
如果要使用其他Python环境(例如本地计算机上的环境),则必须指定调度程序的远程地址。这将取决于您如何配置Helm Chart。
例如,如果您通过负载平衡器公开了调度程序,则需要将客户端指向它。
from distributed import Client
client = Client()
如果您获得Helm Chart部署的状态,它将在打印的注释中显示有关如何连接到调度程序的信息。
from distributed import Client
client = Client('tcp://<load balancer ip>:8786')
答案 1 :(得分:0)
如果您已经安装了Dask Helm软件包,则可以使用kubectl
检索TCP连接地址以传递给distributed.Client
。例如,如果您选择使用dask-abc
分布式的Helm发布名称。在helm install
中-请参见here-在设置集群时,可以遵循Dask Helm and Kubernetes docs并将kubectl get services
与jsonpath
一起使用以过滤此命令的输出并仅检索Dask调度程序服务的IP地址(将命名为dask-abc-scheduler
)。
Here是将kubectl get pods
与jsonpath
一起使用以获取容器名称的类似示例(请参阅以pods=$(
开头的行)。您必须使用--watch
标志等到服务的IP地址可用(请参阅here的 Note 部分)
$ export RELEASE_NAME=dask-abc
# wait until load balancer EXTERNAL_IP is available
$ kubectl get services --wait $RELEASE_NAME-scheduler
# get Dask scheduler address
$ dask_scheduler=$(kubectl get services \
$RELEASE_NAME-scheduler \
--output=jsonpath='{.status.loadBalancer.ingress[0].ip}')
$ echo $dask_scheduler
然后,上面打印的dask_scheduler
地址可以在您的Python代码传递给distributed.Client()
的网址中使用
> client_connection_url = "tcp://<dask-scheduler>:8786"
> client = distributed.client(client_connection_url)
> print(client)
.
.
.
.