[dask]分布式集群搭建(多台机器)

1,919 阅读2分钟

参考网址

zhuanlan.zhihu.com/p/72981916

优势:dask内部自动实现了分布式调度、无需用户自行编写复杂的调度逻辑和程序;
     通过调用简单的方法就可以进行分布式计算、并支持部分模型的并行化处理;
     内部实现的分布式算法:xgboost、LR、sklearn的部分方法等

*用一句话说:dask就是python版本的spark,是一个用Python 语言实现的分布式计算框架*

1/dask安装(分布式版安装)

pip install dask --upgrade pip install distributed --upgrade

或者同时安装

pip install dask distributed --upgrade

2/dask集群搭建

因为在dask集群中,有多种角色,client,scheduler,worker
client:客户端,用于客户与集群之间的交互。
scheduler:主节点(也是注册中心),可以理解为集群的大管家,
           主要把client提交的任务task,按照一定的策略分发给不同的worker节点去执行。
  
worker:具体工作的节点,时时刻刻受到scheduler的监视。

因此,我们需要准备多台服务器,或者虚拟机。

<1>启动主节点scheduler

从上图可以看到,主节点已经启动,在tcp://192.168.1.42:8786上。
也就是说,scheduler的ip是192.168.1.42,开启的服务端口是8786.

<2>启动worker节点

在其他每台linux机器命令行输入:
$ dask-worker 192.168.1.42:8786
注意:后面跟的ip和端口是主节点scheduler的ip和对应服务的端口

启动worker节点之后,我们不仅可以在work服务器上看到相关的信息,
同时,我们也会在scheduler节点上看到相关的信息。
这也就是为什么说:worker节点时时刻刻受到scheduler节点的监视。

3/dask集群的使用

另外再找一台服务器,作为客户端
"""分布式dask"""
import time
from dask.distributed import Client

# 连接dask集群,注意这里的ip和端口是scheduler服务器的,而不是worker节点服务器的。
client = Client('192.168.1.42:8786' ,asynchronous=True)

ts = time.time()
A = client.map(square, range(10000))
B = client.map(neg, A)
total = client.submit(sum, B)
print(total.result())
print('cost time :%s'%(time.time()-ts))
cost time :3.793848991394043