Spark Streaming 妙用之實(shí)現(xiàn)工作流調(diào)度器
之前有說(shuō)過(guò)要設(shè)計(jì)一個(gè)工作流調(diào)度器。開(kāi)發(fā)一個(gè)完善的工作流調(diào)度器應(yīng)該并不是一件簡(jiǎn)單的事情。但是通過(guò)Spark Streaming(基于Transfomer架構(gòu)的理念),我們可能能簡(jiǎn)化這些工作。我在這塊并沒(méi)有什么經(jīng)驗(yàn),這只是一個(gè)存在于腦海中的東西。
下面是Azkaban的架構(gòu)圖:
也就是說(shuō)要搭建一個(gè)穩(wěn)定可靠的Azkaban的工作流調(diào)度器,你可能需要
- 兩臺(tái) 互為主備MySQL
- 兩臺(tái)Executor Server
- 一臺(tái)Web Server
你需要做架構(gòu)設(shè)計(jì),考慮WebServer 和 Executor Server的通訊問(wèn)題
擴(kuò)展性問(wèn)題。Executor 能夠動(dòng)態(tài)調(diào)整?
穩(wěn)定性問(wèn)題。畢竟24小時(shí)運(yùn)行的
然而,我們其實(shí)是不需要關(guān)注這么多東西的。我們真正關(guān)注的是:
- Web UI
- 工作流的生成,解析,運(yùn)行和存儲(chǔ)
其他的都是基礎(chǔ)設(shè)施。按照Transfomer架構(gòu)的設(shè)計(jì)理念,我們應(yīng)該可以找到一個(gè)Estimator ,作為我們的基礎(chǔ)設(shè)施,我們只要關(guān)注上面兩點(diǎn)即可,不需要為部署,高可用,穩(wěn)定等發(fā)愁。同時(shí)我們也希望譬如WebUI等工作不是從頭開(kāi)始,而是按部就班添加新功即可。所以有了Estimator,我們只要做三點(diǎn):
- 實(shí)現(xiàn)業(yè)務(wù)邏輯,也就是工作流的生成,解析,運(yùn)行和存儲(chǔ)等操作。
- 實(shí)現(xiàn)管理頁(yè)面邏輯
- 指定需要的資源cpu/內(nèi)存,就能Run起來(lái)這個(gè)Transformer
我搜羅了一圈,發(fā)現(xiàn)Spark Streaming 是能夠滿(mǎn)足該需求的一個(gè)Estimator。
這得益于,Spark Streaming 從某個(gè)角度而言就是個(gè)定時(shí)任務(wù)調(diào)度系統(tǒng),也就是我們說(shuō)的微批處理。對(duì)于工作流調(diào)度器而言,無(wú)非就是每個(gè)周期(duration)在Driver端啟動(dòng)線(xiàn)程掃描MySQL,實(shí)現(xiàn)任務(wù)的分發(fā)和執(zhí)行。
那如果實(shí)現(xiàn)一個(gè)類(lèi)似Azkaban 能夠的做的事情,前面我們提到,要做三件事情,分別對(duì)應(yīng)為:
1.實(shí)現(xiàn)業(yè)務(wù)邏輯,也就是工作流的生成,解析,運(yùn)行和存儲(chǔ)等操作。其中生成,解析,存儲(chǔ) 三個(gè)環(huán)節(jié)可以放在Driver端,也可以都放在Executor 端。也就是說(shuō):Driver的設(shè)計(jì)可重可輕。重的設(shè)計(jì)可由Driver讀取MySQL 并且解析成工作流任務(wù),然后發(fā)送給Executor 去執(zhí)行。輕的設(shè)計(jì)Driver僅僅是讀取MySQL,然后就簡(jiǎn)單將id分發(fā)給各個(gè)Executor,各個(gè)Executor 負(fù)責(zé)解析執(zhí)行和反饋結(jié)果。
2.增強(qiáng) Spark Streaming UI,添加管理頁(yè)面,實(shí)現(xiàn)Azkaban Web Server類(lèi)似界面。
3.按標(biāo)準(zhǔn)的Spark Streaming 程序提交該實(shí)現(xiàn)到集群即可完成部署。
我們看到,我們真正做到了只關(guān)注核心業(yè)務(wù)邏輯的實(shí)現(xiàn),所謂部署,安裝,運(yùn)行等環(huán)節(jié)都實(shí)現(xiàn)了平臺(tái)化(其實(shí)Estimator完成了)。 而且實(shí)現(xiàn)了資源的細(xì)粒度(CPU/內(nèi)存)劃分,而不再是以服務(wù)器為基本單元。
事實(shí)上,我們也可以將一個(gè)Spark Streaming當(dāng)做一個(gè)crontab 任務(wù),這樣就自然具有了一個(gè)分布式的crontab系統(tǒng),并且提供更友好的管理,甚至能將任務(wù)本身融入到crontab中。
后話(huà)
Spark Streaming 不一定是最合適的Estimator,你可以自己實(shí)現(xiàn)一套類(lèi)似的Estimator,最終形成所謂的 Azkaban On Yarn的程序。