我正在使用docker-compose(也已通过docker swarm测试)运行一个小的dask分布式集群,并从我的本地笔记本电脑连接到它。
我正在尝试使用dask.distributed.Queue()运行一个小的测试。那些在工作程序上无法正确反序列化,因为它们包含用于从我的本地笔记本电脑连接到群集(调度程序)的ip:port,而不是docker组成虚拟网络中可用的ip。
我应该如何连接到群集或设置群集,以便Queue()对象使用适当的调度程序地址序列化?
错误消息:
distributed.protocol.pickle - INFO - Failed to deserialize b'\x80\x04\x95\x9b\x00\x00\x00\x00\x00\x00\x00\x8c\x12distributed.queues\x94\x8c\x05Queue\x94\x93\x94)\x81\x94\x8c&queue-7f344bb49fac489e9b330c7ec5ebb736\x94\x8c\x14tcp://localhost:8786\x94\x86\x94bh\x02)\x81\x94\x8c&queue-896fde1ea60a426f98846735372b33c7\x94h\x05\x86\x94b\x86\x94.'
OSError: Timed out trying to connect to 'tcp://localhost:8786' after 10 s: in <distributed.comm.tcp.TCPConnector object at 0x7ffa5cc49588>: OSError: [Errno 99] Cannot assign requested address
测试代码:
import dask.distributed
import dask.bag as db
client = dask.distributed.Client('localhost:8786')
q = dask.distributed.Queue()
def foo(q1, q2):
while True:
d = q1.get()
print(d)
q2.put(d)
q1 = dask.distributed.Queue()
q2 = dask.distributed.Queue()
client.submit(foo, q1, q2)
docker-compose.yml
version: '3'
services:
scheduler:
hostname: scheduler
image: daskdev/dask
command: dask-scheduler
ports:
- "8786:8786"
- "8787:8787"
volumes:
- /:/host
worker-1:
hostname: worker-1
image: daskdev/dask
command: dask-worker scheduler:8786
depends_on:
- scheduler
volumes:
- /:/host