簡體   English   中英

本地Dask調度程序無法連接到遠程資源上的工作程序

[英]Local Dask scheduler failing to connect to workers on remote resource

如何在遠程資源上為本地運行的Dask調度程序指定Dask工作程序的正確地址?

情況

我有可以遠程登錄的遠程資源。 在那里,我有一個docker容器,該容器運行一個圖像,其中包含運行分布式Dask所需的所有依賴項。

運行時,容器執行以下操作:

dask-worker --nprocs 14 --nthreads 1 {inet_addr_local}:878

在同一個網絡中,但在我的筆記本電腦上,我運行了另一個具有相同圖像的容器。 在此容器中,我運行Dask調度程序,如下所示:

dask-scheduler --port 8786

當我啟動調度程序時,一切都很好。 當我啟動工作容器時,它似乎已連接到調度程序。 在狀態下,我看到以下內容:

Waiting to connect to: tcp://{this_matches_inet_address_of_local}:8786

在調度程序上,我看到以下內容在循環中不斷重復記錄,因為它不斷嘗試與每個工作人員聯系/響應:

distributed.scheduler - INFO - Remove worker tcp://172.18.0.10:41508
distributed.scheduler - INFO - Removed worker tcp://172.18.0.10:41508
distributed.scheduler - ERROR - Failed to connect to worker 'tcp://172.18.0.10:44590': Timed out trying to connect to 'tcp://172.18.0.10:44590' after 3 s: OSError: [Errno 113] No route to host

這個問題(我認為)可以在這里看到。 tcp://172.18.0.10不正確。 我可以通過me@db.foo.net進入資源db.foo.net上運行的工作me@db.foo.net

從調度程序容器中,可以看到我能夠成功ping db.foo.net 我認為工作人員假設他們的地址是他們所在容器的本地地址,而不是db.foo.net 我需要覆蓋此默認值,作為工作人員的某種配置。 我以為--host標簽可以做到,但是這導致Tornado拋出以下錯誤: OSError: [Errno 99] Cannot assign requested address

敏捷工作者需要能夠使用給他們的地址與調度程序聯系。 聽起來這不是您要發生的事情。 這可能是由於許多原因與您的網絡相關聯。 幾種可能性:

  1. 您輸入了錯誤的地址(例如,我注意到您在問題中的一個位置使用了端口878,在另一位置中使用了端口8786)
  2. 您的網絡不允許某些端口上的通信(請與系統管理員聯系)
  3. 您的Docker容器未設置為在外部發布端口(您可能需要做一些docker-wiring或顯式使用主機網絡)

不幸的是,Dask本身無法幫助您確定這些網絡問題。 您可以嘗試在相關端口上運行其他服務,並查看是否可以重新創建與pingpython -m http.serve --port 8786類的常用工具之間的連通性不足

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM