【干货】Dask快速搭建分布式集群(大数据0基础可以理解,并使用!)
非常開(kāi)心,解決了很久都沒(méi)有解決的問(wèn)題
使用的語(yǔ)言: Python3.5
分布式機(jī)器: windows7
注意到,其實(shí),通過(guò)這工具搭建分布式不需要管使用的電腦是什么系統(tǒng)。
分布式使用流程
Created with Rapha?l 2.1.2使用分布式系統(tǒng)用戶(hù)用戶(hù)分布式Scheduler分布式Scheduler分布式worker1分布式worker1分布式worker2分布式worker2分布式worker3分布式worker3分布式worker...分布式worker...發(fā)送任務(wù)計(jì)算任務(wù)一計(jì)算任務(wù)二計(jì)算任務(wù)三計(jì)算任務(wù)...計(jì)算任務(wù)一結(jié)果計(jì)算任務(wù)二結(jié)果計(jì)算任務(wù)三結(jié)果計(jì)算任務(wù)...結(jié)果計(jì)算結(jié)果分布式結(jié)構(gòu)
- 由Scheduler跟Worker1,Worker2…構(gòu)成了整個(gè)分布式系統(tǒng)的結(jié)構(gòu)
- 用戶(hù)可以變,用戶(hù)的任務(wù)也可以變。但只要分布式集群的結(jié)構(gòu)搭建起來(lái)之后,要做的事情就可以用很多了。
- 關(guān)鍵的一點(diǎn):,使用的時(shí)候不要去改變分布式系統(tǒng)。
- 用戶(hù)將任務(wù)發(fā)出來(lái),也就是說(shuō),用戶(hù)自己?jiǎn)为?dú)在一臺(tái)電腦上運(yùn)行代碼就好了。 交給搭建好的分布式集群系統(tǒng)!
上面是關(guān)于分布式系統(tǒng)的基本概念(或者必要知識(shí)。
下面開(kāi)始講述搭建過(guò)程
搭建分布式
- 這里使用的是Python的分布式庫(kù)Dask。
- 先安裝這個(gè)庫(kù)。具體方法:在命令行下輸入pip install dask[complete] (如果已經(jīng)安裝好這個(gè)庫(kù)了就會(huì)提示已經(jīng)安裝好了)
庫(kù)是一定要安裝的。而且這個(gè)庫(kù)特別小。1MB左右???大膽下吧
- 之前流程圖中每一個(gè)單位,其實(shí)都是一臺(tái)電腦來(lái)的。(當(dāng)然,你開(kāi)多個(gè)窗口,在一臺(tái)電腦上,其實(shí)也是可以的。
首先,在一臺(tái)電腦上(命令行條件下, 輸入dask-scheduler。就會(huì)爆出一堆的信息。其中有個(gè)地方很關(guān)鍵
在我這,就是使用那個(gè)tcp://,后面的那個(gè)地址,加上端口號(hào)。
- 而這個(gè)地址,就是未來(lái)要給,用戶(hù)使用的地址
- 在 多臺(tái)電腦上,同樣打開(kāi)電腦。打開(kāi)命令行模式, 輸入:dask-worker 192.168.0.199:8786。注意到,這里的這個(gè)地址其實(shí)就是剛剛說(shuō)到的那個(gè)地址,每個(gè)人的結(jié)果都會(huì)是不一樣的。大家根據(jù)自己的情況來(lái)決定。
- 每個(gè)電腦根據(jù)自己的身份輸入上面的代碼,之后。 在scheduler電腦,上的信息出現(xiàn)了別的信息之后。就連接成功了。
- 如果不成功,請(qǐng)?jiān)佥斎胍淮沃暗拇a。你肯定是哪里輸入錯(cuò)了!!!
到這里,分布式系統(tǒng),其實(shí)已經(jīng)搭建好了。下面,模擬用戶(hù)來(lái)使用
用戶(hù)是一臺(tái)新的電腦(當(dāng)然,也可以是任何的一臺(tái)電腦。但是必須要跟這些電腦都在同樣的一個(gè)局域網(wǎng)下。在這樣的條件下,開(kāi)始使用,我們之前搭建好的服務(wù)器。
下面是我在一個(gè)一臺(tái)電腦上運(yùn)行的寫(xiě)的代碼
記得!,要把client上的IP地址跟端口號(hào)都寫(xiě)成之前Scheduler的IP地址跟端口號(hào)。
- 可以理解,Scheduler是整個(gè)分布式系統(tǒng)的給用戶(hù)的接口。
下面是我用代碼:
from dask.distributed import Client from time import timedef square(x):return x ** 2if __name__ == '__main__':MAX = 1000st = time()client = Client('192.168.0.199:8786') # 這里的地址記得根據(jù)我上面說(shuō)的修改掉。A = client.map(square, range(MAX))total = client.submit(sum, A)print(total.result())et = time()print(et - st)這是輸出的結(jié)果:
332833500
0.6459999084472656
后記
這個(gè)框架搭建好,以后,我們以后就只需要通過(guò)修改函數(shù)的本質(zhì),就可以實(shí)現(xiàn)關(guān)于分布式了。
有人可能會(huì)說(shuō),這么簡(jiǎn)單的分布式,為什么工資會(huì)高?
我想給有這樣想法的朋友說(shuō)一下。
首先,要知道這個(gè)工具的開(kāi)發(fā)者將這個(gè)工具開(kāi)發(fā)的已經(jīng)非常好了,接口分裝的特別不錯(cuò)。他們的付出是值得大家認(rèn)可的。
其次,理解,并使用這個(gè)框架也不是很容易的(請(qǐng)給我鼓勵(lì)
再來(lái),這只是一個(gè)非常簡(jiǎn)單的Demo。其中還有很多的細(xì)節(jié)需要注意的,都沒(méi)有。很多算法需要解決的,也沒(méi)有。
可以說(shuō),這里的坑還有很多!
最后,我想肯定還是有我不知道的東西的!所以…
…
最后,老套路,宣傳一波自己的公眾號(hào)!(求關(guān)注哇!)
本人中大一肥宅,歡迎大家關(guān)注,請(qǐng)掃下面的二維碼(〃’▽’〃)
如果覺(jué)得有幫助的話(huà),可以?huà)叽a,贊賞鼓勵(lì)一下!謝謝!
總結(jié)
以上是生活随笔為你收集整理的【干货】Dask快速搭建分布式集群(大数据0基础可以理解,并使用!)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【干货】eval函数用法解释及对开发者的
- 下一篇: 爬取小说1--高并发