日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

分布式实时计算—Storm—基础介绍

發布時間:2024/4/15 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分布式实时计算—Storm—基础介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

一、概念

二、編程模型(spout->tuple->bolt)

三、Topology?運行

四、Storm Streaming Grouping


一、概念

Storm?是一個免費并開源的分布式實時計算系統。利用?Storm?可以很容易做到可靠地處理無限的 數據流,像?Hadoop?批量處理大數據一樣,Storm?可以實時處理數據。

1)Nimbus(master節點:代碼分發給?Supervisor)

Storm?集群的?Master?節點,負責分發用戶代碼,指派給具體的?Supervisor?節點上的?Worker?節點,去運行?Topology?對應的組件(Spout/Bolt)的?Task。

2)Supervisor(slave節點:管理?Worker?進程的啟動和終止)

Storm?集群的從節點,負責管理運行在?Supervisor?節點上的每一個?Worker?進程的啟動和終止。 通過?Storm?的配置文件中的?supervisor.slots.ports?配置項,可以指定在一個?Supervisor?上最大允許多少個?Slot,每個?Slot?通過端口號來唯一標識,一個端口號對應一個?Worker?進程(如果該?Worker?進程被啟動)。

3)Worker(具體處理組件邏輯的進程)?

運行具體處理組件邏輯的進程。Worker?運行的任務類型只有兩種,一種是?Spout?任務,一種是Bolt?任務。

4)Task

worker?中每一個?spout/bolt?的線程稱為一個?task.?在?storm0.8?之后,task?不再與物理線程對應, 不同?spout/bolt?的?task?可能會共享一個物理線程,該線程稱為?executor。

5)ZooKeeper

用來協調?Nimbus?和?Supervisor,如果?Supervisor?因故障出現問題而無法運行?Topology,?Nimbus?會第一時間感知到,并重新分配?Topology?到其它可用的?Supervisor?上運行

二、編程模型(spout->tuple->bolt)

strom?在運行中可分為?spout?與?bolt?兩個組件,其中,數據源從?spout?開始,數據以?tuple?的方式發送到?bolt,多個?bolt?可以串連起來,一個?bolt?也可以接入多個?spot/bolt.運行時原理如下圖:

1)Topology

Storm?中運行的一個實時應用程序的名稱。將?Spout、?Bolt?整合起來的拓撲圖。定義了?Spout?和?Bolt?的結合關系、并發數量、配置等等

2)Spout

在一個?topology?中獲取源數據流的組件。通常情況下?spout?會從外部數據源中讀取數據,然后轉 換為?topology?內部的源數據。

3)Bolt

接受數據然后執行處理的組件,用戶可以在其中執行自己想要的操作。

4)Tuple

一次消息傳遞的基本單元,理解為一組消息就是一個?Tuple。

5)Stream

Tuple?的集合。表示數據的流向。

三、Topology?運行

在?Storm?中,一個實時應用的計算任務被打包作為?Topology?發布,這同?Hadoop MapReduce?任務相似。但是有一點不同的是:在?Hadoop?中,MapReduce?任務最終會執行完成后結束;而在?Storm?中,Topology?任務一旦提交后永遠不會結束,除非你顯示去停止任務。計算任務?Topology?是由不同的?Spouts?和?Bolts,通過數據流(Stream)連接起來圖。一個?Storm?在集群上運行一個?Topology?時,主要通過以下?3?個實體來完成?Topology?的執行工作:

(1)Worker(進程) ? (2)Executor(線程) ? (3)Task

1)Worker(1?個?worker?進程執行的是?1?個?topology?的子集)

1?個?worker?進程執行的是?1?個?topology?的子集(注:不會出現?1?個?worker?為多個?topology?服務)。1?個?worker?進程會啟動?1?個或多個?executor?線程來執行?1?個?topology?的?component(spout?或?bolt)。因此,1?個運行中的?topology?就是由集群中多臺物理機上的多個?worker?進程組成的。

2)Executor(executor?是?1?個被?worker?進程啟動的單獨線程)

executor?是?1?個被?worker?進程啟動的單獨線程。每個?executor?只會運行?1?個?topology?的?1?個?component(spout?或?bolt)的?task(注:task?可以是?1?個或多個,storm?默認是?1?個?component?只生成?1?個?task,executor?線程里會在每次循環里順序調用所有?task?實例)。

3)Task(最終運行?spout?或?bolt?中代碼的單元)

是最終運行?spout?或?bolt?中代碼的單元(注:1?個?task?即為?spout?或?bolt?的?1?個實例,?executor?線程在執行期間會調用該?task?的?nextTuple?或?execute?方法)。topology?啟動后,1?個?component(spout?或?bolt)的?task?數目是固定不變的,但該?component?使用的?executor?線 程數可以動態調整(例如:1?個?executor?線程可以執行該?component?的?1?個或多個?task?實 例)。這意味著,對于?1?個?component?存在這樣的條件:#threads<=#tasks(即:線程數小于 等于?task?數目)。默認情況下?task?的數目等于?executor?線程數目,即?1?個?executor?線程只運 行?1?個?task。

四、Storm Streaming Grouping

Storm?中最重要的抽象,應該就是?Stream grouping?了,它能夠控制?Spot/Bolt?對應的?Task?以什么樣的方式來分發?Tuple,將?Tuple?發射到目的?Spot/Bolt?對應的?Task.??

目前,Storm Streaming Grouping?支持如下幾種類型:

1)huffle Grouping

隨機分組,盡量均勻分布到下游?Bolt?中將流分組定義為混排。這種混排分組意味著來自?Spout?的 輸入將混排,或隨機分發給此?Bolt?中的任務。shuffle grouping?對各個?task?的?tuple?分配的比 較均勻。

2)Fields Grouping

按字段分組,按數據中?field?值進行分組;相同?field?值的?Tuple?被發送到相同的?Task?這種?grouping?機制保證相同?field?值的?tuple?會去同一個?task。

3)All grouping?:廣播

?廣播發送, 對于每一個 tuple 將會復制到每一個 bolt 中處理。

4)Global grouping

全局分組,Tuple?被分配到一個?Bolt?中的一個?Task,實現事務性的?Topology。Stream?中的所 有的?tuple?都會發送給同一個?bolt?任務處理,所有的?tuple?將會發送給擁有最小?task_id?的?bolt?任務處理。

5)None grouping?:不分組

不關注并行處理負載均衡策略時使用該方式,目前等同于?shuffle grouping,另外?storm?將會把?bolt?任務和他的上游提供數據的任務安排在同一個線程下。

6)Direct grouping?:直接分組 指定分組

由?tuple?的發射單元直接決定?tuple?將發射給那個?bolt,一般情況下是由接收?tuple?的?bolt?決定 接收哪個?bolt?發射的?Tuple。這是一種比較特別的分組方法,用這種分組意味著消息的發送者指 定由消息接收者的哪個?task?處理這個消息。 只有被聲明為?Direct Stream?的消息流可以聲明這種 分組方法。而且這種消息?tuple?必須使用?emitDirect?方法來發射。消息處理者可以通過?TopologyContext?來獲取處理它的消息的?taskid (OutputCollector.emit?方法也會返回?taskid)。

總結

以上是生活随笔為你收集整理的分布式实时计算—Storm—基础介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。