Storm基本原理概念及基本使用
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基本原理概念及基本使用