我是DASK的新手,想测试一下如何在集群上运行DASK。该集群有一个主服务器和其他几个节点。登录主服务器后,我可以通过不带密码的简单ssh进入其他节点。 我想运行一个简单的函数来遍历大型数组。该功能定义如下。它将dt64转换为numpy datetime对象。
import xarray as xr
import numpy as np
from dask import compute, delayed
import dask.multiprocessing
from datetime import datetime, timedelta
def converdt64(dt64):
ts = (dt64 - np.datetime64('1970-01-01T00:00:00Z')) / np.timedelta64(1, 's')
return datetime.utcfromtimestamp(ts)
然后在终端上,通过应用此函数对大小为N的数组1D进行迭代。
values = [delayed(convertdt64)(x) for x in arraydata]
results1 = compute(*values,scheduler='processes’)
这在头服务器上使用了一些核心,并且运行缓慢,但是很有效。然后,我尝试通过使用Client如下所示在群集的多个节点上启动该功能:
from dask.distributed import Client
client = Client("10.140.251.254:8786 »)
results = compute(*values, scheduler='distributed’)
它根本不起作用。如下有一些警告和一条错误消息。
distributed.comm.tcp - WARNING - Could not set timeout on TCP stream: [Errno 92] Protocol not available
distributed.comm.tcp - WARNING - Closing dangling stream in <TCP local=tcp://10.140.251.254:57257 remote=tcp://10.140.251.254:8786>
CancelledError: convertdt64-0205ad5e-214b-4683-b5c4-b6a2a6d8e52f
我也尝试了dask.bag,并且得到了相同的错误消息。集群上的并行计算不起作用的原因可能是什么?是由于某些服务器/网络配置,还是我对DASK客户端的使用不正确?预先感谢您的帮助!
最美好的祝愿
香农X
答案 0 :(得分:0)
...然后,我尝试使用如下所示的Client在群集的多个节点上启动该功能:
我在尝试在调度程序上运行任务时遇到了类似的问题。节点连接很好。但是,尝试提交任务会导致取消。
记录的示例在本地或与调度程序位于同一节点。当我将客户端移动到调度程序节点时,问题就消失了。