序列化的dask.distributed.Queue()对象中的ip错误:无法反序列化

时间:2019-03-21 13:22:56

标签: docker-compose distributed dask

我正在使用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

0 个答案:

没有答案