1. 程式人生 > >storm 原理簡介及單機版安裝指南

storm 原理簡介及單機版安裝指南

Storm是一個分散式的、高容錯的實時計算系統。
Storm對於實時計算的的意義相當於Hadoop對於批處理的意義。Hadoop為我們提供了Map和Reduce原語,使我們對資料進行批處理變的非常的簡單和優美。同樣,Storm也對資料的實時計算提供了簡單Spout和Bolt原語。
Storm適用的場景:
1、流資料處理:Storm可以用來用來處理源源不斷的訊息,並將處理之後的結果儲存到持久化介質中。
2、分散式RPC:由於Storm的處理元件都是分散式的,而且處理延遲都極低,所以可以Storm可以做為一個通用的分散式RPC框架來使用。

在這個教程裡面我們將學習如何建立Topologies, 並且把topologies部署到storm的叢集裡面去。Java將是我們主要的示範語言, 個別例子會使用python以演示storm的多語言特性。

1、準備工作

這個教程使用storm-starter專案裡面的例子。我推薦你們下載這個專案的程式碼並且跟著教程一起做。先讀一下:配置storm開發環境新建一個strom專案這兩篇文章把你的機器設定好。

2、一個Storm叢集的基本元件

storm的叢集表面上看和hadoop的叢集非常像。但是在Hadoop上面你執行的是MapReduce的Job, 而在Storm上面你執行的是Topology。它們是非常不一樣的 — 一個關鍵的區別是: 一個MapReduce Job最終會結束, 而一個Topology運永遠執行(除非你顯式的殺掉他)

在Storm的叢集裡面有兩種節點: 控制節點(master node)和工作節點(worker node)。控制節點上面執行一個後臺程式: Nimbus

, 它的作用類似Hadoop裡面的JobTracker。Nimbus負責在叢集裡面分佈程式碼,分配工作給機器, 並且監控狀態。

每一個工作節點上面執行一個叫做Supervisor的節點(類似 TaskTracker)。Supervisor會監聽分配給它那臺機器的工作,根據需要 啟動/關閉工作程序。每一個工作程序執行一個Topology(類似 Job)的一個子集;一個執行的Topology由執行在很多機器上的很多工作程序 Worker(類似 Child)組成。

                                                  storm topology結構


                          Storm VS MapReduce

Nimbus和Supervisor之間的所有協調工作都是通過一個Zookeeper叢集來完成。並且,nimbus程序和supervisor都是快速失敗(fail-fast)和無狀態的。所有的狀態要麼在Zookeeper裡面, 要麼在本地磁碟上。這也就意味著你可以用kill -9來殺死nimbus和supervisor程序, 然後再重啟它們,它們可以繼續工作, 就好像什麼都沒有發生過似的。這個設計使得storm不可思議的穩定。

3、Topologies

為了在storm上面做實時計算, 你要去建立一些topologies。一個topology就是一個計算節點所組成的圖。Topology裡面的每個處理節點都包含處理邏輯, 而節點之間的連線則表示資料流動的方向。

執行一個Topology是很簡單的。首先,把你所有的程式碼以及所依賴的jar打進一個jar包。然後執行類似下面的這個命令。

1 strom jar all-your-code.jar backtype.storm.MyTopology arg1 arg2

這個命令會執行主類: backtype.strom.MyTopology, 引數是arg1, arg2。這個類的main函式定義這個topology並且把它提交給Nimbus。storm jar負責連線到nimbus並且上傳jar檔案。

因為topology的定義其實就是一個Thrift結構並且nimbus就是一個Thrift服務, 有可以用任何語言建立並且提交topology。上面的方面是用JVM
-based語言提交的最簡單的方法, 看一下文章: 在生產叢集上執行topology去看看怎麼啟動以及停止topologies。

4、Stream

Stream是storm裡面的關鍵抽象。一個stream是一個沒有邊界的tuple序列。storm提供一些原語來分散式地、可靠地把一個stream傳輸進一個新的stream。比如: 你可以把一個tweets流傳輸到熱門話題的流。

storm提供的最基本的處理stream的原語是spout和bolt。你可以實現Spout和Bolt對應的介面以處理你的應用的邏輯。

spout的流的源頭。比如一個spout可能從Kestrel佇列裡面讀取訊息並且把這些訊息發射成一個流。又比如一個spout可以呼叫twitter的一個api並且把返回的tweets發射成一個流。

通常Spout會從外部資料來源(佇列、資料庫等)讀取資料,然後封裝成Tuple形式,之後傳送到Stream中。Spout是一個主動的角色,在介面內部有個nextTuple函式,Storm框架會不停的呼叫該函式。

bolt可以接收任意多個輸入stream, 作一些處理, 有些bolt可能還會發射一些新的stream。一些複雜的流轉換, 比如從一些tweet裡面計算出熱門話題, 需要多個步驟, 從而也就需要多個bolt。 Bolt可以做任何事情: 執行函式, 過濾tuple, 做一些聚合, 做一些合併以及訪問資料庫等等。

Bolt處理輸入的Stream,併產生新的輸出Stream。Bolt可以執行過濾、函式操作、Join、操作資料庫等任何操作。Bolt是一個被動的角色,其介面中有一個execute(Tuple input)方法,在接收到訊息之後會呼叫此函式,使用者可以在此方法中執行自己的處理邏輯。

spout和bolt所組成一個網路會被打包成topology, topology是storm裡面最高一級的抽象(類似 Job), 你可以把topology提交給storm的叢集來執行。topology的結構在Topology那一段已經說過了,這裡就不再贅述了。

topology結構

topology結構

topology裡面的每一個節點都是並行執行的。 在你的topology裡面, 你可以指定每個節點的並行度, storm則會在叢集裡面分配那麼多執行緒來同時計算。

一個topology會一直執行直到你顯式停止它。storm自動重新分配一些執行失敗的任務, 並且storm保證你不會有資料丟失, 即使在一些機器意外停機並且訊息被丟掉的情況下。

5、資料模型(Data Model)

storm使用tuple來作為它的資料模型。每個tuple是一堆值,每個值有一個名字,並且每個值可以是任何型別, 在我的理解裡面一個tuple可以看作一個沒有方法的java物件。總體來看,storm支援所有的基本型別、字串以及位元組陣列作為tuple的值型別。你也可以使用你自己定義的型別來作為值型別, 只要你實現對應的序列化器(serializer)。

一個Tuple代表資料流中的一個基本的處理單元,例如一條cookie日誌,它可以包含多個Field,每個Field表示一個屬性。

Tuple本來應該是一個Key-Value的Map,由於各個元件間傳遞的tuple的欄位名稱已經事先定義好了,所以Tuple只需要按序填入各個Value,所以就是一個Value List。

一個沒有邊界的、源源不斷的、連續的Tuple序列就組成了Stream。

topology裡面的每個節點必須定義它要發射的tuple的每個欄位。 比如下面這個bolt定義它所發射的tuple包含兩個欄位,型別分別是: double和triple。

01 publicclassDoubleAndTripleBoltimplementsIRichBolt {
02 privateOutputCollectorBase _collector;
03
04 @Override
05 publicvoidprepare(Map conf, TopologyContext context, OutputCollectorBase collector) {
06 _collector = collector;
07 }
08
09 @Override
10 publicvoidexecute(Tuple input) {
11 intval = input.getInteger(

相關推薦

storm 原理簡介單機安裝指南

Storm是一個分散式的、高容錯的實時計算系統。 Storm對於實時計算的的意義相當於Hadoop對於批處理的意義。Hadoop為我們提供了Map和Reduce原語,使我們對資料進行批處理變的非常的簡單和優美。同樣,Storm也對資料的實時計算提供了簡單Spout和Bolt原語。 Storm適

hadoop單機安裝基本功能演示

lis fs基本操作 map jdk1 linu logs tput open etc 本文所使用的Linux發行版本為:CentOS Linux release 7.4.1708 (Core) hadoop單機版安裝 準備工作 創建用戶 useradd -m hado

轉載mongodb單機安裝叢集安裝

一,mongodb單機版安裝 1,下載linux版本的mongodb https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.4.6.tgz 2,通過ftp上傳,我這邊是傳到/data/program/soft

hadoop2.7.5單機安裝wordCount執行

hadoop2.7.5單機版安裝 簡介 Hadoop主要完成兩件事,分散式儲存和分散式計算。 Hadoop主要由兩個核心部分組成: 1.HDFS:分散式檔案系統,用來儲存海量資料。 2.MapReduce:並行處理框架,實現任務分解和排程。 HDFS 是一個分散

redis單機安裝生產環境啟動方案

安裝單機版redis 首先需要去官網下載最新的redis壓縮包,編譯的過程需要安裝tcl,安裝tcl: wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz tar -xzvf t

mongodb單機安裝叢集安裝

一,mongodb單機版安裝1,下載linux版本的mongodbhttps://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.4.6.tgz2,通過ftp上傳,我這邊是傳到/data/program/software這個目錄

centos7 單機安裝Redis4.0.11開機自啟(超級簡單)

[root@localhost local]# tar -xvf redis-4.0.11.tar.gz 3、將目錄切換到redis的目錄下,直接編譯redis. [root@localhost local]# cd redis-4.0.11/

windows上安裝Storm必定(之單機

一、安裝四樣必須的東西        1、jdk     // storm1以上版本應該必須要jdk1.7以上,本人嘗試了1.6+storm1.0.2啟動失敗,但是jdk1.7+storm0.9.3啟動成功(不然啟動會報錯找不到main方法那是jdk版本不一致造成的)  

RocketMQ-單機安裝遠端連線測試

安裝需要 jdk 1.8 centos 7 rocketmq 4.2.0 因為我是在阿里雲ECS上安裝的,所以centos就不用說了,jdk的安裝,如果沒有安裝可以看這篇文章:CentOS配置JAVA_HOME,下面就開始正式的安裝過程了。 安

zooKeeper單機安裝設定

我下載的是3.4.10 建立 一個資料夾 把zookeeper 下載的檔案放到資料夾下 解壓並安裝zookeeper 複製並重命名配置檔案 zoo.cfg 修改zoo

html標簽簡介軟件安裝

http https baidu aid 隨筆 uil pan 鏈接 str html標簽:     <br></br>  換行標簽     <p></p>   段落標簽     <b></b>  

Redis單機安裝

比較 -c 修改配置 all href 上傳文件 www p s 修改配置文件 1.工具簡單介紹 1.博主使用的是Xshell工具 ps:需要設置端口和連接名稱,端口一般默認為22,需要的童鞋可以自行百度 2.Redis單機版安裝 第一步:安裝gcc編譯環境 yum in

Hadoop單機安裝配置

大數據 Hadoop [toc] Hadoop單機版安裝配置 前言 Hadoop單機版本的環境搭建比較簡單,這裏總結一下。 Centos基本配置 網絡配置 IPADDR=192.168.43.101 NETMASK=255.255.255.0 GATEWAY=192.168.43.2 DNS1=202

zookeeper單機安裝

zookeeper ZooKeeper是一個分布式的,開放源碼的分布式應用程序協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要組件。它是一個為分布式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分布式同步、組服務等。ZooKeeper的目標就是封裝好復雜易

FastDFS單機安裝

kilo 依次 文件的 統計 安裝目錄 enc [1] 架構圖 tst FastDFS分布式文件系統1 目標了解項目中使用FastDFS的原因和意義。掌握FastDFS的架構組成部分,能說出tracker和storage的作用。了解FastDFS+nginx上傳和下載的執行

Kubernetes(k8s)入門、單機安裝、kuberctl指令、k8s服務實例

單機版 nbsp href Kubernete net 實例 http itl 安裝 https://blog.csdn.net/qq_34701586/article/details/78732470Kubernetes(k8s)入門、

Druid單機環境安裝指南

schema 麻煩 mon hub shell 路徑 creat cli port 1、下載單機環境必備工具 下載druid-0.10.1-bin.tar.gz和tranquility-distribution-0.8.2.tgz插件 http://druid.io/do

熱部署簡介在eclipse安裝插件JRebel進行熱部署

ready tps ebe 變化 project bsp connect art nbsp 一、熱部署簡介 1、熱部署與熱加載在應用運行的時候升級軟件,無需重新啟動的方式有兩種,熱部署和熱加載。它們之間的區別是:(1)、部署方式: 熱部署在服務器運行時重新部署項目。熱加載在

Windows環境下HBase單機安裝全部過程

下載 HBase: http://hbase.apache.org/downloads.html Hadoop: https://hadoop.apache.org/releases.html 下載後會得到兩個壓縮檔案hadoop-common-[版本號]-bin-master.zi

kafka2.11單機安裝教程

下載目錄: /export/server/kafka/ kafka安裝需要有zookeeper註冊中心 其中 zookeeper的安裝 見centos7安裝偽分散式zookeeper 1.下載 [[email protected]_0_2_centos kafka]#