1. 程式人生 > >Storm基本原理概念及基本使用

Storm基本原理概念及基本使用

接受 jar hash 禁用 pan 1.4 等待 什麽 擴展

1. 背景介紹

1.1 離線計算是什麽

離線計算:批量獲取數據、批量傳輸數據、周期性批量計算數據、數據展示;

代表技術:Sqoop批量導入數據、HDFS批量存儲數據、MapReduce批量計算數據、Hive批量計算數據

1.2 流式計算是什麽

流式計算:數據實時產生、數據實時傳輸、數據實時計算、實時展示

代表技術:Flume實時獲取數據、Kafka/metaq實時數據存儲、Storm/JStorm實時數據計算、Redis實時結果緩存、持久化存儲(mysql)

一句話總結:將源源不斷產生的數據實時收集並實時計算,盡可能快的得到計算結果

1.3 Storm是什麽

Storm用來實時處理數據,特點:低延遲、高可用、分布式、可擴展、數據不丟失。提供簡單容易理解的接口,便於開發。

1.4 Storm與Hadoop的區別

1. Storm用於實時計算,Hadoop用於離線計算;

2. Storm處理的數據保存在內存中,源源不斷;Hadoop處理的數據保存在文件系統中,一批一批;

3. Storm的數據通過網絡傳輸進來;Hadoop的數據保存在磁盤中;

4. Storm與Hadoop的編程模型相似;

2. Storm核心組件

技術分享圖片

組件說明補充:

Nimbus:負責資源分配和任務調度。

Supervisor:負責接受nimbus分配的任務,啟動和停止屬於自己管理的worker進程。通過配置文件設置當前supervisor上啟動多少個worker。

Worker:運行具體處理組件邏輯的進程(其實就是一個JVM)。Worker運行的任務類型只用兩種,一種是Spout任務,一種是Bolt任務。

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

Zookeeper:保存任務分配信息、心跳信息、元數據信息。

並發度:用戶指定的一個任務,可以被多個線程執行,並發度的數量等於線程的數量。一個任務的多個線程,會被運行在多個Worker(JVM)上,有一種類似於平均算法的負載均衡策略。盡可能減少網絡IO,和Hadoop中的MapReduce中的本地計算的道理一樣。

3. Storm編程模型

技術分享圖片

組件說明補充

DataSource:外部數據源。

Spout:接收外部數據源的組件,將外部數據源轉化成Storm內部的數據,以Tuple為基本的傳輸單元下發給Bolt。

Bolt:接收Spout發送的數據,或上遊的Bolt發送的數據。根據業務邏輯進行處理。發送給下一個Bolt或者是存儲到某種介質上。介質可以是Redis,可以是Mysql,或者其他。

Tuple:Storm內部中數據傳輸的基本單元,裏面封裝了一個List對象,用來保存數據。

StreamGrouping:數據分組策略。7種,shuffleGrouping(Random函數)、Non Grouping(Random函數)、FieldGrouping(Hash取模)、Local or ShuffleGrouping、本地或隨機、優先本地。

Worker與Topology

一個worker只屬於一個topology,每個worker中運行的task只能屬於這個topology。反之,一個topology包含多個worker,其實就是這個topology運行在多個worker上。一個topology要求的worker數量如果不被滿足,集群在任務分配時,根據現有的worker先運行topology。如果當前集群中worker數量為0,那麽最新提交的topology將只會被標識active,不會運行。只有當集群有了空閑資源之後,才會被運行。

4. Storm常用操作命令

storm有許多簡單且有用的命令可以用來管理拓撲,它們可以提交、殺死、禁用、再平衡拓撲。

4.1 提交任務命令

storm jar 【jar路徑】【拓撲包名.拓撲類名】【拓撲名稱】

storm jar examples/storm-starter/storm-starter-topologies-0.9.6.jar storm.starter.WordCountTopology wordcount

4.2 殺死任務命令

storm kill 【拓撲名稱】 -w 10 (執行kill命令時可以通過-w [等待秒數] 指定拓撲停用以後的等待時間)

storm kill topology-name -w 10

4.3 停用任務命令

storm deactivte 【拓撲名稱】

storm deactivte topology-name

我們能夠掛起或停用運行中的拓撲。當停用拓撲時,所有已分發的元組都會得到處理,但是spouts的nextTuple方法不會被調用。銷毀一個拓撲,可以使用kill命令。它會以一種安全的方式銷毀一個拓撲,首先停用拓撲,在等待拓撲消息的時間段內允許拓撲完成當前的數據流。

4.4 啟用任務命令

storm activate 【拓撲名稱】

storm activate topology-name

4.5 重新部署任務命令

storm rebalance 【拓撲名稱】

storm rebalance topology-name

再平衡使你重新分配集群任務。這是個很強大的命令。比如,你向一個運行中的集群增加了節點。再平衡命令將會停用拓撲,然後在相應超時時間之後重新分配工人,並重啟拓撲。

Storm基本原理概念及基本使用