01Storm基礎

目錄

 

storm介紹

storm基本概念

元組 Tuple

流 Stream

龍捲 Spout

閃電 Bolt

拓撲 Topology

主控節點和工作節點

Nimbus進程和Supervisor進程

流分組

工作進程 Worker

任務 Task

配置拓撲的並行度(parallelism)


storm介紹

   storm是一個分佈式計算框架,主要使用Clojure和Java語言呢編寫,storm分佈式計算的特點,大量,實時,不間斷的處理數據。

   storm處理過程就像自來水一樣,從數據的源頭獲取數據,通過層層處理下向流,中間可能經過數據的篩選,加工,存儲,轉換等等操作。

  數據通過一個的處理層,可以分流成幾股不同數據流,也可以幾個數據流在一個處理層匯合成一個數據流。

  storm有很多的應用場景,比如一個很大流量的門戶網站,每時每刻有百萬千萬的用戶訪問,並使用。用戶使用過程中產生的數據量是非常大的,對於這些數據,需要實時處理,因爲每時每刻都有新的數據產生,所以storm就像一個流一樣,會一直實時的處理數據。

storm基本概念

元組 Tuple

        元組是構成流的基本數據單位,也是消息傳遞的基本單位,元組中的字段可以是任意類型的對象。在storm中元組作爲其數據模型,storm中的元組支持Java基本類型,字符串,字節數組,以及只要實現序列化接口的對象,都可以當做元組使用。元組本來應該是一個key-value的Map,由於各個組件間傳遞的字段已經事先定義好,所以只要按序把元組填入各個value即可,所以元組可以看做一個value的List

流 Stream

  Stream是storm的核心抽象,是一個無邊界的元組序列,源源不斷的傳遞這元組組成了流。

  流由元組組成,使用OutputFieldsDeclarer聲明流以及流的模式

龍捲 Spout

 Spout是流的源頭,產生數據的源頭,是拓撲的流的來源,Spout是一個主動的角色,在其接口中的nextTuple()方法中會源源不斷的產生Tuple,也就是數據。如果流中沒有數據,那nextTuple會簡單返回。

Spout可以發出超過一個流,使用OutputFieldsDeclarer類的declareStream方法可以聲明多個流。使用SpoutOutputStream類的emit方法可以提交流,把數據源頭的流提交到下個處理層Bolt

閃電 Bolt

 在一個拓撲中,所有的處理操作都在Bolt中進行處理,也就是我們項目中的業務邏輯部分。

 Bolt是流的處理節點。Spout是流的數據源節點,Bolt可以完成數據的過濾,業務處理,連接運算,連接與訪問數據庫等等。

 Bolt是一個被動的角色,會不斷的接受數據,進行處理,在Bolt接口中有一個execute()方法,在該方法中會獲取從上一個處理層傳來的數據,從而在這一層進行數據的再次處理。

拓撲 Topology

 拓撲是Strom中運行的一個實時應用程序,由各個組件之間的消息流動二形成的邏輯上的拓撲結構。

上面是有一個Spout和三個Bolt組成的一個拓撲,圖中箭頭代表着流,Spout可以發送多個流,Bolt可以發送多個,也可以多個流合併。數據就是從Spout發出,進過多個Bolt向下傳遞。

在Java中使用TopologyBuilder類來構建拓撲

主控節點和工作節點

在Storm集羣中有一個主控節點(Master Node)管理者整個拓撲,有多個工作節點(Work Node)處理者業務邏輯

Nimbus進程和Supervisor進程

主控節點運行這一個Nimbus進程,Nimbus負責集羣中分發代碼,對節點的分配任務,以及監視主機的故障。

每個工作節點運行着一個Supervisor進程,Supervisor監聽其主機上已經分配的主機的作業,啓動和停止Nimbus已經分配的工作進程。

流分組

 在拓撲中不同節點之間的流類型是可以不相同的,流分組爲每一個Bolt指定應該接受哪些流作爲輸入流,比如在一個Bolt節點上,希望接受特定標識的key的流,有些Bolt可能希望均勻的接受各個上層傳過來的流。

Storm內置8中分組流,(下一篇會詳細列出)

工作進程 Worker

工作進程是Spout/Bolt中運行的具體處理邏輯的進程。拓撲跨一個或者多個Worker進程執行。

每一個Worker進程是一個物理的JVM和拓撲執行所有任務的子集。

任務 Task

 Worker中的每一個Spout/Bolt的線程爲一個Task。每一個Spout/Bolt在集羣中執行多個任務,每一個任務對應一個線程。

通過TopologyBuilder類的setSpout和setBolt方法來設置每個Spout和Bolt的並行度(任務數量)

執行器 Executor

在Storm0.8以後 Task不在於物理線程對應。同一個Spout/Bolt的Task可能會共享一個物理線程,這就是Executor。

配置拓撲的並行度(parallelism)

注意,這裏所說的術語“並行度”主要是用於表示所謂的 parallelism_hint,它代表着一個組件的初始 executor (也是線程)數量。在這篇文章裏,我們使用這個“並行度”術語來說明在 Storm 拓撲中既可以配置 executor 的數量,也可以配置 worker 和 task 的數量

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章