Storm教程3編程接口


Spouts

Spout是Stream的消息產生源,Spout組件的實現可以通過繼承BaseRichSpout類或者其他Spout類來完成,也可以通過實現IRichSpout接口來實現。



需要根據情況實現Spout類中重要的幾個方法有:

open方法

當一個Task被初始化的時候會調用此open方法。

一般都會在此方法中對發送Tuple的對象SpoutOutputCollector和配置對象TopologyContext初始化。


示例如下:

public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) {this._collector = collector; 
}


getComponentConfiguration方法

此方法用于聲明針對當前組件的特殊的Configuration配置。
示例如下:

public Map<String, Object> getComponentConfiguration() { if(!_isDistributed) {Map<String, Object> ret = new HashMap<String, Object>(); ret.put(Config.TOPOLOGY_MAX_TASK_PARALLELISM, 3); return ret;10 11 } else {return null;}
}
這里便是設置了Topology中當前Component的線程數量上限。

nextTuple方法

這是Spout類中最重要的一個方法。發射一個Tuple到Topology都是通過這個方法來實現的。
示例如下:

public void nextTuple() { Utils.sleep(100); final String[] words = new String[] {"twitter","facebook","google"}; final Random rand = new Random(); final String word = words[rand.nextInt(words.length)];collector.emit(new Values(word));
}
?這里便是從一個數組中隨機選取一個單詞作為Tuple,然后通過collector發送到Topology。


declareOutputFields方法

此方法用于聲明當前Spout的Tuple發送流。
Stream流的定義是通過OutputFieldsDeclare.declare方法完成的,其中的參數包括了發送的域Fields。
示例如下:

public void declareOutputFields(OutputFieldsDeclarer declarer) {declarer.declare(new Fields("word"));
}

另外,除了上述幾個方法之外,還有ack、fail和close方法等;
Storm在監測到一個Tuple被成功處理之后會調用ack方法,處理失敗會調用fail方法;
這兩個方法在BaseRichSpout等類中已經被隱式的實現了。


——————————————————————————————————————————————


Bolts

Bolt類接收由Spout或者其他上游Bolt類發來的Tuple,對其進行處理。

Bolt組件的實現可以通過繼承BasicRichBolt類或者IRichBolt接口來完成。



Bolt類需要實現的主要方法有:

prepare方法

此方法和Spout中的open方法類似,為Bolt提供了OutputCollector,用來從Bolt中發送Tuple。

Bolt中Tuple的發送可以在prepare方法中、execute方法中、cleanup等方法中進行,一般都是些在execute中。

示例如下:

public void prepare(Map conf, TopologyContext context, OutputCollector collector) {this._collector = collector;
}


getComponentConfiguration方法

和Spout類一樣,在Bolt中也可以有getComponentConfiguration方法。
?示例如下:

public Map<String, Object> getComponentConfiguration() {Map<String, Object> conf = new HashMap<String, Object>();conf.put(Config.TOPOLOGY_TICK_TUPLE_FREQ_SECS, emitFrequencyInSeconds);return conf;
} 
?此例定義了從系統組件“_system”的“_tick”流中發送Tuple到當前Bolt的頻率,當系統需要每隔一段時間執行特定的處理時,就可以利用這個系統的組件的特性來完成。


execute方法

這是Bolt中最關鍵的一個方法,對于Tuple的處理都可以放到此方法中進行。

具體的發送也是在execute中通過調用emit方法來完成的。

有兩種情況,一種是emit方法中有兩個參數,另一個種是有一個參數。

(1)emit有一個參數:此唯一的參數是發送到下游Bolt的Tuple,此時,由上游發來的舊的Tuple在此隔斷,新的Tuple和舊的Tuple不再屬于同一棵Tuple樹。新的Tuple另起一個新的Tuple樹。

(2)emit有兩個參數:第一個參數是舊的Tuple的輸入流,第二個參數是發往下游Bolt的新的Tuple流。此時,新的Tuple和舊的Tuple是仍然屬于同一棵Tuple樹,即,如果下游的Bolt處理Tuple失敗,則會向上傳遞到當前Bolt,當前Bolt根據舊的Tuple流繼續往上游傳遞,申請重發失敗的Tuple。保證Tuple處理的可靠性。


declareOutputFields方法

用于聲明當前Bolt發送的Tuple中包含的字段,和Spout中類似。
示例如下:

public void declareOutputFields(OutputFieldsDeclarer declarer) {declarer.declare(new Fields("obj","count","actualWindowLengthInSeconds"));
} 
此例說明當前Bolt類發送的Tuple包含了三個字段:"obj", "count", "actualWindowLengthInSeconds"。

——————————————————————————————————————————————


topology



——————————————————————————————————————————————


Topology運行機制

(1)Storm提交后,會把代碼首先存放到Nimbus節點的inbox目錄下,之后,會把當前Storm運行的配置生成一個stormconf.ser文件放到Nimbus節點的stormdist目錄中,在此目錄中同時還有序列化之后的Topology代碼文件;


(2)在設定Topology所關聯的Spouts和Bolts時,可以同時設置當前Spout和Bolt的executor數目和task數目,默認情況下,一個Topology的task的總和是和executor的總和一致的。之后,系統根據worker的數目,盡量平均的分配這些task的執行。worker在哪個supervisor節點上運行是由storm本身決定的;


(3)任務分配好之后,Nimbes節點會將任務的信息提交到zookeeper集群,同時在zookeeper集群中會有workerbeats節點,這里存儲了當前Topology的所有worker進程的心跳信息;


(4)Supervisor節點會不斷的輪詢zookeeper集群,在zookeeper的assignments節點中保存了所有Topology的任務分配信息、代碼存儲目錄、任務之間的關聯關系等,Supervisor通過輪詢此節點的內容,來領取自己的任務,啟動worker進程運行;


(5)一個Topology運行之后,就會不斷的通過Spouts來發送Stream流,通過Bolts來不斷的處理接收到的Stream流,Stream流是無界的。


最后一步會不間斷的執行,除非手動結束Topology。


Topology中的Stream處理時的方法調用過程如下:




有幾點需要說明的地方:

(1)每個組件(Spout或者Bolt)的構造方法和declareOutputFields方法都只被調用一次。

(2)open方法、prepare方法的調用是多次的。入口函數中設定的setSpout或者setBolt里的并行度參數指的是executor的數目,是負責運行組件中的task的線程的數目,此數目是多少,上述的兩個方法就會被調用多少次,在每個executor運行的時候調用一次。相當于一個線程的構造方法。

(3)nextTuple方法、execute方法是一直被運行的,nextTuple方法不斷的發射Tuple,Bolt的execute不斷的接收Tuple進行處理。只有這樣不斷地運行,才會產生無界的Tuple流,體現實時性。相當于線程的run方法。

(4)在提交了一個topology之后,Storm就會創建spout/bolt實例并進行序列化。之后,將序列化的component發送給所有的任務所在的機器(即Supervisor節 點),在每一個任務上反序列化component。

(5)Spout和Bolt之間、Bolt和Bolt之間的通信,是通過zeroMQ的消息隊列實現的。

(6)上圖沒有列出ack方法和fail方法,在一個Tuple被成功處理之后,需要調用ack方法來標記成功,否則調用fail方法標記失敗,重新處理這個Tuple。


終止Topology

通過在Nimbus節點利用如下命令來終止一個Topology的運行:

bin/storm kill topologyName


kill之后,可以通過UI界面查看topology狀態,會首先變成KILLED狀態,在清理完本地目錄和zookeeper集群中的和當前Topology相關的信息之后,此Topology就會徹底消失




本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/387278.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387278.shtml
英文地址,請注明出處:http://en.pswp.cn/news/387278.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

梳理操作系統概論

1、用一張圖總結操作系統的結構、功能特征、采用的技術和提供服務方式等。 2、用一張圖描述CPU的工作原理。 3、用一張圖描述系統程序與應用程序、特權指令與非特權指令、CPU狀態、PSW及中斷是如何協同工作的&#xff1f; 轉載于:https://www.cnblogs.com/ljgljg/p/10503190.ht…

機器學習01簡介

Machine Learning 是人工智能的核心&#xff0c;主要使用歸納、綜合而不是演繹。 讓計算機模擬人類行為&#xff0c;以獲取新的知識或技能 重新組織已有的知識結構使之不斷改善自身性能 一個程序能從經驗 E 中學習&#xff0c;解決任務 T&#xff0c;達到性能度量值P&#xf…

位置指紋法的實現(KNN)

基本原理 位置指紋法可以看作是分類或回歸問題&#xff08;特征是RSS向量&#xff0c;標簽是位置&#xff09;&#xff0c;監督式機器學習方法可以從數據中訓練出一個從特征到標簽的映射關系模型。kNN是一種很簡單的監督式機器學習算法&#xff0c;可以用來做分類或回歸。 對于…

室內定位系列 ——WiFi位置指紋(譯)

摘要 GPS難以解決室內環境下的一些定位問題&#xff0c;大部分室內環境下都存在WiFi&#xff0c;因此利用WiFi進行定位無需額外部署硬件設備&#xff0c;是一個非常節省成本的方法。然而WiFi并不是專門為定位而設計的&#xff0c;傳統的基于時間和角度的定位方法并不適用于WiFi…

機器學習02線性回歸、多項式回歸、正規方程

單變量線性回歸&#xff08;Linear Regression with One Variable&#xff09; 預測器表達式&#xff1a; 選擇合適的參數&#xff08;parameters&#xff09;θ0 和 θ1&#xff0c;其決定了直線相對于訓練集的準確程度。 建模誤差&#xff08;modeling error&#xff09;&a…

最大乘積

給定一個無序數組&#xff0c;包含正數、負數和0&#xff0c;要求從中找出3個數的乘積&#xff0c;使得乘積最大&#xff0c;要求時間復雜度&#xff1a;O(n)&#xff0c;空間復雜度&#xff1a;O(1) def solve():n input()a input().split()for i in range(len(a)):a[i] in…

機器學習03Logistic回歸

邏輯回歸 &#xff08;Logistic Regression&#xff09; 目前最流行&#xff0c;使用最廣泛的一種學習算法。 分類問題&#xff0c;要預測的變量 y 是離散的值。 邏輯回歸算法的性質是&#xff1a;它的輸出值永遠在 0 到 1 之間。 邏輯回歸模型的假設是&#xff1a; 其中&a…

基礎架構系列匯總

為了方便查找&#xff0c;把基礎架構系統文章按時間正序整理了一下&#xff0c;記錄如下&#xff1a; 1. 基礎架構之日志管理平臺搭建及java&net使用 2. 基礎架構之日志管理平臺及釘釘&郵件告警通知 3. 基礎架構之分布式配置中心 4. 基礎架構之分布式任務平臺 5. 基礎架…

CNN理解比較好的文章

什么是卷積神經網絡&#xff1f;為什么它們很重要&#xff1f; 卷積神經網絡&#xff08;ConvNets 或者 CNNs&#xff09;屬于神經網絡的范疇&#xff0c;已經在諸如圖像識別和分類的領域證明了其高效的能力。卷積神經網絡可以成功識別人臉、物體和交通信號&#xff0c;從而為機…

Windows 安裝Angular CLI

1、安裝nvm npm cnpm nrm&#xff08;onenote筆記上有記錄&#xff09; 參考&#xff1a;https://blog.csdn.net/tyro_java/article/details/51232458 提示&#xff1a;如果發現配置完后&#xff0c;出現類似“npm不是內部命令……”等信息。 可采取如下措施進行解決—— 檢查環…

機器學習04正則化

正則化&#xff08;Regularization&#xff09; 過擬合問題&#xff08;Overfitting&#xff09;&#xff1a; 如果有非常多的特征&#xff0c;通過學習得到的假設可能能夠非常好地適應訓練集 &#xff1a;代價函數可能幾乎為 0&#xff09;&#xff0c; 但是可能會不能推廣到…

Adaboost算法

概述 一句話概述Adaboost算法的話就是&#xff1a;把多個簡單的分類器結合起來形成個復雜的分類器。也就是“三個臭皮匠頂一個諸葛亮”的道理。 可能僅看上面這句話還沒什么概念&#xff0c;那下面我引用個例子。 如下圖所示&#xff1a; 在D1這個數據集中有兩類數據“”和“-”…

Codeforces 408D Long Path (DP)

題目&#xff1a; One day, little Vasya found himself in a maze consisting of (n??1) rooms, numbered from 1 to (n??1). Initially, Vasya is at the first room and to get out of the maze, he needs to get to the (n??1)-th one. The maze is organized as fol…

機器學習05神經網絡--表示

神經網絡&#xff1a;表示&#xff08;Neural Networks: Representation&#xff09; 如今的神經網絡對于許多應用來說是最先進的技術。 對于現代機器學習應用&#xff0c;它是最有效的技術方法。 神經網絡模型是許多邏輯單元按照不同層級組織起來的網絡&#xff0c; 每一層…

邏輯回歸(Logistic Regression, LR)又稱為邏輯回歸分析,是分類和預測算法中的一種。通過歷史數據的表現對未來結果發生的概率進行預測。例如,我們可以將購買的概率設置為因變量,將用戶的

邏輯回歸(Logistic Regression, LR)又稱為邏輯回歸分析&#xff0c;是分類和預測算法中的一種。通過歷史數據的表現對未來結果發生的概率進行預測。例如&#xff0c;我們可以將購買的概率設置為因變量&#xff0c;將用戶的特征屬性&#xff0c;例如性別&#xff0c;年齡&#x…

解決SecureCRT無法用非root賬號登錄ssh

鏈接失敗&#xff0c;提示這個&#xff1a; --------------------------- SecureCRT --------------------------- 連接到會話 192.168.1.100 失敗 : The server has disconnected with an error. Server message reads: A protocol error occurred. Change of username or se…

機器學習06神經網絡--學習

代價函數 標記方法&#xff1a; 神經網絡的訓練樣本有 m 個 每個包含一組輸入 x 和一組輸出信號 y L 表示神經網絡層數 Sl表示每層的 neuron 個數(SL 表示輸出層神經元個數) 將神經網絡的分類定義為兩種情況&#xff1a; 二類分類&#xff1a;SL1, y0 or 1 表示哪一類&…

Logistic Regression Classifier邏輯回歸

Logistic Regression Classifier邏輯回歸主要思想就是用最大似然概率方法構建出方程&#xff0c;為最大化方程&#xff0c;利用牛頓梯度上升求解方程參數。 優點&#xff1a;計算代價不高&#xff0c;易于理解和實現。缺點&#xff1a;容易欠擬合&#xff0c;分類精度可能不高…

機器學習07應用機器學習的建議

決定下一步做什么&#xff08;Deciding What to Try Next&#xff09; 確保在設計機器學習系統時&#xff0c;能夠選擇一條最合適、最正確的道路。 具體來講&#xff0c;將重點關注的問題是&#xff1a;假如你在開發一個機器學習系統&#xff0c;或者想試著改進一個機器學習…

CSS3--5.顏色屬性

HTML5中添加了一些新的顏色的表示方式 1.RGBA&#xff1a;說得簡單一點就是在RGB的基礎上加進了一個通道Alpha。RGBA在RGB的基礎上多了控制alpha透明度的參數。以上R、G、B三個參數&#xff0c;正整數值的取值范圍為&#xff1a;0 - 255。百分數值的取值范圍為&#xff1a;0.0%…