Storm問題——組件帶參數構造函數未被調用,拋出NullpointerException

問題描述

不知道大家有沒有遇到過這個問題,我實現了BaseRichBolt,重載一個帶參數的構造函數,new這個組件時傳入一個參數作爲該組件的成員變量,然後在declareOutputFields方法中調用該變量,local模式運行正常,分佈式模式運行就拋NPE。後來過了半小時,再提交,又OK了。(PS:其間檢查了很多遍代碼,沒有傳入NULL變量)


我在開發trident程序時,繼承mapState時也出現了這個問題


可能原因

1、跟storm本身的序列化機制有關係,storm本身對組件進行序列化和反序列化時,提供一個默認的無參構造函數,至於爲什麼會提供這個,請看可能原因2
2、猜想在分佈式環境,storm要根據集羣topology的工作來維護各個topology之間的狀態以及一些細節state之類的,突然有些時候state變化,就導致了上面的問題


這兩個可能原因目前還是自己的YY,沒有找到具體原因,後續繼續研究源碼,找到再補上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章