我基于Dockerfile
创建了自己的经过稍微修改的the dask-docker
Dockerfile
,该dask-docker
安装了Dockerfile
并将我的自定义库之一复制到容器中,以使其可用于所有工作程序节点。我将容器部署到了Kubernetes集群,并通过本地计算机上的REPL连接到它,在本地创建了客户端和函数:
adlfs
但是当我运行>>> def add1(n): return n + 1
...
>>> client = Client(my_ip + ':8786')
时,出现client.submit
“未能反序列化b'...'”错误消息或期货卡在“待定”状态:
distributed.protocol.pickle
似乎当我提交第一个作业时,只会发生一次pickle协议错误,然后,所有内容都停留在>>> f = client.submit(add1, 2)
>>> distributed.protocol.pickle - INFO - Failed to deserialize b'\x80\x05\x95\xba\x03\x00\x00\x00\x00\x00\x00\x8c\x16tblib.pickling_support...'
...
ValueError: unsupported pickle protocol: 5
>>>
>>> f = client.submit(add1, 2)
>>> f
<Future: pending, key: add1-d5d2ff94399d4bb4e41150868f4c6da7>
中。
从pending
,我看到我有:
kubectl
的LoadBalancer
服务,dask-scheduler
和3x dask-scheduler
,dask-worker
和三个dask-scheduler-...
窗格什么会导致这种情况,我该如何调试?我打开了Dask调度程序的Web界面,它表明我有一个dask-worker-...
实例,该实例有错误,但没有提供任何详细信息。
对于它的价值,我对add1
所做的唯一更改是:
Dockerfile
Edit:我会注意到,如果我部署Dask映像(在我的K8s清单中为 # ...
&& find /opt/conda/lib/python*/site-packages/bokeh/server/static -type f,l -name '*.js' -not -name '*.min.js' -delete \
&& rm -rf /opt/conda/pkgs
RUN pip install adlfs==0.3.0 # new line
COPY prepare.sh /usr/bin/prepare.sh # existing line
COPY foobar.sh /usr/bin/foobar.sh # new line
COPY my_file.so /usr/bin/my_file.so # new line
),一切正常。因此,在尝试创建自定义的Docker映像时,Dask似乎配置错误。我注释了对image: "daskdev/dask:2.11.0"
的更改,在本地和Dockerfile
映像上运行了docker rmi
,拆除了已部署的服务和部署,然后重新构建了一个容器,将其推送并进行了部署,但是它still 失败。