JStorm使用問題

基本執(zhí)行流程

SequenceTopology為例,其加載流程為:

  • 用戶提交拓?fù)涞臅r(shí)候,會(huì)先將自己的代碼打成jar包,通過nimbus提交拓?fù)涞郊?/li>
  • nimbus執(zhí)行jar時(shí)調(diào)用StormSubmitter.submitTopology,通過TopologyBuilder來創(chuàng)建拓?fù)涞幕窘Y(jié)構(gòu)(即為spout和bolt創(chuàng)建了對(duì)象實(shí)例),并設(shè)置一些相關(guān)的conf
  • 接著將創(chuàng)建出來的拓?fù)鋵?duì)象進(jìn)行序列化,通過nimbus調(diào)度再提交到各個(gè)機(jī)器上
  • 執(zhí)行worker的時(shí)候,會(huì)再先將拓?fù)涞南嚓P(guān)對(duì)象反序列化并加載,然后執(zhí)行

component(spout/bolt)序列化和反序列化

由于整個(gè)拓?fù)湎嚓P(guān)的對(duì)象都要被序列化,這意味著,component實(shí)現(xiàn)類必須是可序列化的,進(jìn)一步意味著,spout/bolt的類屬性也必須是可序列化的。除非:

  • spout/bolt的成員變量設(shè)置了transient/static,這樣的變量將不會(huì)被序列化。
  • 屬性值為null,未被初始化。

否則提交后可能會(huì)出現(xiàn)對(duì)象不可反序列化的異常。

component(spout/bolt)構(gòu)造和執(zhí)行順序

  • component構(gòu)造方法的執(zhí)行時(shí)間,發(fā)生在創(chuàng)建對(duì)象的時(shí)候,即提交拓?fù)渲啊?/li>
  • 若component構(gòu)造方法初始化一些跟環(huán)境相關(guān)的變量(如連接DB),這時(shí)有可能是會(huì)有問題的。 因此,建議是放在spout.open/bolt.prepare方法中執(zhí)行這些動(dòng)作。
  • worker執(zhí)行的時(shí)候,僅純粹地執(zhí)行對(duì)象反序列化,這時(shí)不會(huì)再調(diào)用構(gòu)造函數(shù)。

spring場景下的初始化

  • 任何場景下,對(duì)環(huán)境相關(guān)的變量,都應(yīng)該在spout.open/bolt.prepare中來初始化
  • 建議上述方法中創(chuàng)建ApplicationContext,然后加載具體的beans
  • 若多個(gè)component對(duì)象共享bean,可以把ApplicationContext做成static的,然后使用原子的方式保證只被初始化一次

component(spout/bolt)屬性的訪問范圍及線程安全

  • 若component的屬性要被worker內(nèi)所有task共享,需要將這個(gè)變量定義為static
  • 由于靜態(tài)屬性不會(huì)被序列化,因此不能在構(gòu)造函數(shù)初始化,而是在spout#open/bolt#prepare來完成
  • 另外,對(duì)static變量的訪問,jstorm不負(fù)責(zé)線程同步及安全,需要用戶自行保證
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Date: Nov 17-24, 2017 1. 目的 積累Storm為主的流式大數(shù)據(jù)處理平臺(tái)對(duì)實(shí)時(shí)數(shù)據(jù)處理的相關(guān)...
    一只很努力爬樹的貓閱讀 2,327評(píng)論 0 4
  • 這是一個(gè)JStorm使用教程,不包含環(huán)境搭建教程,直接在公司現(xiàn)有集群上跑任務(wù),關(guān)于JStorm集群環(huán)境搭建,后續(xù)研...
    Coselding閱讀 6,720評(píng)論 1 9
  • JAVA序列化機(jī)制的深入研究 對(duì)象序列化的最主要的用處就是在傳遞,和保存對(duì)象(object)的時(shí)候,保證對(duì)象的完整...
    時(shí)待吾閱讀 11,186評(píng)論 0 24
  • Storm 系統(tǒng)中包含以下幾個(gè)基本概念:拓?fù)洌═opologies)流(Streams)數(shù)據(jù)源(Spouts)數(shù)據(jù)...
    發(fā)光的魚閱讀 884評(píng)論 0 0
  • 關(guān)于那磁場!所謂隱形能量源! 涉及感官及大腦意識(shí),盡量放空大腦,把意識(shí)集中到呼吸上,你能真切的感覺到宇宙間的濃稠抑...
    縱情嬉戲天地間閱讀 332評(píng)論 0 1

友情鏈接更多精彩內(nèi)容