Spark Streaming 妙用之實現工作流調度器

來自: http://www.jianshu.com/p/89b4f3bf27b2

之前有說過要設計一個工作流調度器。開發一個完善的工作流調度器應該并不是一件簡單的事情。但是通過Spark Streaming(基于Transfomer架構的理念),我們可能能簡化這些工作。我在這塊并沒有什么經驗,這只是一個存在于腦海中的東西。

</div>

一個典型的工作流調度器架構可能如下:

也就是說要搭建一個穩定可靠的Azkaban的工作流調度器,你可能需要

  • 兩臺 互為主備MySQL
  • 兩臺Executor Server
  • 一臺Web Server
  • 你需要做架構設計,考慮WebServer 和 Executor Server的通訊問題
  • 擴展性問題。Executor 能夠動態調整?
  • 穩定性問題。畢竟24小時運行的

然而,你完全可以不需要關注這么多,按照Transfomer架構的設計,我們應該可以找到一個Estimator ,簡化我們的編程,我們只要按照Estimator的規范,

  • 實現業務邏輯,也就是工作流的生成,解析,運行和存儲等操作。
  • 實現管理頁面邏輯
  • 指定需要的資源cpu/內存,就能Run起來這個Transformer

其他的事情應該都是Estimator 要去做的。我搜羅了一圈,發現Spark Streaming 是能夠滿足該需求的一個Estimator。

這得益于,Spark Streaming 從某個角度而言就是個定時任務調度系統,也就是我們說的微批處理。對于工作流調度器而言,無非就是每個周期(duration)在Driver端啟動線程掃描MySQL,實現任務的分發和執行。

那如果實現一個類似Azkaban 能夠的做的事情,前面我們提到,要做三件事情,分別對應為:

  1. 實現業務邏輯,也就是工作流的生成,解析,運行和存儲等操作。其中 生成 , 解析 , 存儲 三個環節可以放在Driver端,也可以都放在Executor 端。也就是說:Driver的設計可重可輕。重的設計可由Driver讀取MySQL 并且解析成工作流任務,然后發送給Executor 去執行。輕的設計Driver僅僅是讀取MySQL,然后就簡單將id分發給各個Executor,各個Executor 負責解析執行和反饋結果。

2.增強 Spark Streaming UI,添加管理頁面,實現Azkaban Web Server類似界面。

  1. 按標準的Spark Streaming 程序提交該實現到集群即可完成部署。

我們看到,我們真正做到了只關注核心業務邏輯的實現,所謂部署,安裝,運行等環節都實現了平臺化(其實Estimator完成了)。 而且實現了資源的細粒度(CPU/內存)劃分,而不再是以 服務器 為基本單元。

事實上,我們也可以將一個Spark Streaming當做一個crontab 任務,這樣就自然具有了一個分布式的crontab系統,并且提供更友好的管理,甚至能將任務本身融入到crontab中。

后話

Spark Streaming 不一定是最合適的Estimator,你可以自己實現一套類似的Estimator,最終形成所謂的 Azkaban On Yarn的程序。

</div>

 本文由用戶 jxjy1403 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!