溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

storm java的編程思路是什么

發(fā)布時間:2021-11-20 17:27:54 來源:億速云 閱讀:145 作者:柒染 欄目:云計算

這期內(nèi)容當中小編將會給大家?guī)碛嘘P(guān)storm java的編程思路是什么,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

總體思路

storm編程和hadoop的mapreduce的編程很類似,hadoop的mapreduce需要自己實現(xiàn)map函數(shù),reduce函數(shù),還有一個主類驅(qū)動;storm需要自己實現(xiàn)spout,bolt和一個主函數(shù)。storm編程為以下三步:

創(chuàng)建一個Spout讀取數(shù)據(jù)
創(chuàng)建bolt處理數(shù)據(jù)
創(chuàng)建一個主類,在主類中創(chuàng)建拓撲和一個集群對象,將拓撲提交到集群

Topology運行方式
Topology的運行可以分為本地模式和分布式模式,模式的設(shè)置可以在配置文件中設(shè)定,也可以在代碼中設(shè)置。本地模式其實什么都不需要安裝,有storm jar包就夠了 

(1)本地運行的提交方式:
LocalCluster cluster = new LocalCluster();
cluster.submitTopology(topologyName, conf, topology);
cluster.killTopology(topologyName);
cluster.shutdown();
 
(2)分布式提交方式:
StormSubmitter.submitTopology(topologyName, topologyConfig, builder.createTopology());
需要注意的是,在Storm代碼編寫完成之后,需要打包成jar包放到Nimbus中運行,打包的時候,不需要把依賴的jar都打進去,否則如果把依賴的storm.jar包打進去的話,運行時會出現(xiàn)重復(fù)的配置文件錯誤導(dǎo)致Topology無法運行。因為Topology運行之前,會加載本地的storm.yaml配置文件。
在Nimbus運行的命令如下:
storm jar StormTopology.jar maincalss args
Topology運行流程
  有幾點需要說明的地方:
(1)Storm提交后,會把代碼首先存放到Nimbus節(jié)點的inbox目錄下,之后,會把當前Storm運行的配置生成一個stormconf.ser文件放到Nimbus節(jié)點的stormdist目錄中,在此目錄中同時還有序列化之后的Topology代碼文件;
(2)在設(shè)定Topology所關(guān)聯(lián)的Spouts和Bolts時,可以同時設(shè)置當前Spout和Bolt的executor數(shù)目和task數(shù)目,默認情況下,一個Topology的task的總和是和executor的總和一致的。之后,系統(tǒng)根據(jù)worker的數(shù)目,盡量平均的分配這些task的執(zhí)行。worker在哪個supervisor節(jié)點上運行是由storm本身決定的;
(3)任務(wù)分配好之后,Nimbes節(jié)點會將任務(wù)的信息提交到zookeeper集群,同時在zookeeper集群中會有workerbeats節(jié)點,這里存儲了當前Topology的所有worker進程的心跳信息;
(4)Supervisor節(jié)點會不斷的輪詢zookeeper集群,在zookeeper的assignments節(jié)點中保存了所有Topology的任務(wù)分配信息、代碼存儲目錄、任務(wù)之間的關(guān)聯(lián)關(guān)系等,Supervisor通過輪詢此節(jié)點的內(nèi)容,來領(lǐng)取自己的任務(wù),啟動worker進程運行;
(5)一個Topology運行之后,就會不斷的通過Spouts來發(fā)送Stream流,通過Bolts來不斷的處理接收到的Stream流,Stream流是無界的。
最后一步會不間斷的執(zhí)行,除非手動結(jié)束Topology。
Topology方法調(diào)用流程
Topology中的Stream處理時的方法調(diào)用過程如下:

 storm java的編程思路是什么有幾點需要說明的地方:
   (1)每個組件(Spout或者Bolt)的構(gòu)造方法和declareOutputFields方法都只被調(diào)用一次。
   (2)open方法、prepare方法的調(diào)用是多次的。入口函數(shù)中設(shè)定的setSpout或者setBolt里的并行度參數(shù)指的是executor的數(shù)目,是負責(zé)運行組件中的task的線程         的數(shù)目,此數(shù)目是多少,上述的兩個方法就會被調(diào)用多少次,在每個executor運行的時候調(diào)用一次。相當于一個線程的構(gòu)造方法。
   (3)nextTuple方法、execute方法是一直被運行的,nextTuple方法不斷的發(fā)射Tuple,Bolt的execute不斷的接收Tuple進行處理。只有這樣不斷地運行,才會產(chǎn)生無界的Tuple流,體現(xiàn)實時性。相當于線程的run方法。
   (4)在提交了一個topology之后,Storm就會創(chuàng)建spout/bolt實例并進行序列化。之后,將序列化的component發(fā)送給所有的任務(wù)所在的機器(即Supervisor節(jié)點),在每一個任務(wù)上反序列化component。
   (5)Spout和Bolt之間、Bolt和Bolt之間的通信,是通過zeroMQ的消息隊列實現(xiàn)的。
   (6)上圖沒有列出ack方法和fail方法,在一個Tuple被成功處理之后,需要調(diào)用ack方法來標記成功,否則調(diào)用fail方法標記失敗,重新處理這個Tuple。
Topology并行度
    在Topology的執(zhí)行單元里,有幾個和并行度相關(guān)的概念。
(1)worker:每個worker都屬于一個特定的Topology,每個Supervisor節(jié)點的worker可以有多個,每個worker使用一個單獨的端口,它對Topology中的每個component運行一個或者多個executor線程來提供task的運行服務(wù)。
(2)executor:executor是產(chǎn)生于worker進程內(nèi)部的線程,會執(zhí)行同一個component的一個或者多個task。
(3)task:實際的數(shù)據(jù)處理由task完成,在Topology的生命周期中,每個組件的task數(shù)目是不會發(fā)生變化的,而executor的數(shù)目卻不一定。executor數(shù)目小于等于task的數(shù)目,默認情況下,二者是相等的。
    在運行一個Topology時,可以根據(jù)具體的情況來設(shè)置不同數(shù)量的worker、task、executor,而設(shè)置的位置也可以在多個地方。
(1)worker設(shè)置:
(1.1)可以通過設(shè)置yaml中的topology.workers屬性
(1.2)在代碼中通過Config的setNumWorkers方法設(shè)定
(2)executor設(shè)置:
    通過在Topology的入口類中setBolt、setSpout方法的最后一個參數(shù)指定,不指定的話,默認為1;
(3)task設(shè)置:
    (3.1) 默認情況下,和executor數(shù)目一致;
    (3.2)在代碼中通過TopologyBuilder的setNumTasks方法設(shè)定具體某個組件的task數(shù)目;
終止Topology
    通過在Nimbus節(jié)點利用如下命令來終止一個Topology的運行:
storm kill topologyName
    kill之后,可以通過UI界面查看topology狀態(tài),會首先變成KILLED狀態(tài),在清理完本地目錄和zookeeper集群中的和當前Topology相關(guān)的信息之后,此Topology就會徹底消失了。
Topology跟蹤

    Topology提交后,可以在Nimbus節(jié)點的web界面查看,默認的地址是http://NimbusIp:8080。

上述就是小編為大家分享的storm java的編程思路是什么了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI