Storm 學習筆記 (二)菜鳥樂園

Storm計算模型

Topology DAG有向無環圖的實現

----對於storm實時計算邏輯的一種封裝

    由一系列通過   數據流   相互關聯的spout,Bolt組成的拓撲結構

生命週期:此拓撲只要啓動,一直會在集羣中運行直到手動kill(區別於MapReduce當中的job,job在計算完成後就會終止)

Tuple  元組

Storm中最小數據組成單元

Stream--數據流

從spout中不斷傳遞數據給Bolt,以及一個Bolt傳遞給下一個Bolt,所形成的這些數據通道叫作stream

stream 聲明時候需要給一個id,默認爲default

實際使用時候大多使用單一數據流,此時不需要單獨指定Stream1 id

Spout---數據源

  圖中數據源的來源,一般指定外部的數據源  讀取 元組 Tuple 發送到 Topology中

 一個Spout可以發送多個數據源

含有3個重要方法

1 OutputFieldsDeclarer中的declare方法聲明定義所發送數據流的類型,便於bolt接收

2 SpoutOutputCollector中的emit方法指定stream id 後 發送到bolt

3 Spout最核心的方法 nextTuple,這個方法會被storm線程不斷調用,主動從數據源拉取數據在通過emit方法生成Tuple發送給下一個Bolt計算

Bolt---數據流處理組件

所有的數據處理都由Bolt完成 ,一個到多個。一個Bolt也可以發送多個數據流stream。

Bolt裏最核心的方法是 execute 方法,這個方法負責接收到一個Tulp數據然後實現核心的業務邏輯

Stream Grouping ---數據流分組 (即數據分發策略)

一共8種,但是我一般就用過1和2,其他不太常用

1  Shuffle Grouping

    輪詢,平均分配

隨機派發Stream裏的tuple,保證每個bolt task 接收到的tuple數量大致相同

2   Fields Grouping  個人感覺非常有用,常用於ETL Extract-Transform-Load

按字段分組,比如。按照“user_id”字段分組,具有相同的user_id的Tuple會被分到同一個Bolt中處理

3 All Grouping

廣播發送,對於每一個tuple,所有的Bolts都會收到

4 Global Grouping

全局分組,把tuple分散給task id最低的task,其實可以實現間接的HA

5 None Grouping

不分組,目前看這個效果和shuffle grouping差不多,不同的一點是storm會把使用none grouping

的這個Bolt放到這個Bolt的訂閱者同一個線程裏去執行

6 Direct Grouping

指向性分組,使用這種分組意味着tuple的發送者指定消息的接受者,指定哪個task處理tuple。

只有被聲明爲Direct Stream的消息流可以聲明這種分組方法。

7 Local or shuffle grouping

  本地或者隨機分組。如果目標bolt有一個或者多個task與源bolt的task在同一個工作進程中,tuple

將會被隨機發送給這些同進程中的tasks。否則和普通的Shuffle Grouping一樣

8  CustomGrouping

    自定義,相當於MapReduce那裏自己去實現一個partition。



未完待續!!!!!!!












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