StormBolt介面

鬆伯發表於2016-05-14

      Bolt是Topology中資料處理的基本單元,也是Storm針對處理過程的程式設計單元。Topology中所有的處理都是在這些bolt中完成的。 Bolt可以將資料項傳送至多個資料流(Stream)。程式設計人員首先可以使用OutputFieldsDeclarer類的declareStream()方法宣告多個流,指定資料將要傳送到的流,然後使用SpoutOutputCollector的emit方法將資料傳送(原生spout)。

Storm為Bolt提供的程式設計抽象,以介面的形式,面向介面的程式設計風格。其中IRichBolt是使用Java語言實現Bolt最主要的介面。事實上,IRichBolt本身並未提供更多屬性或方法,只是擴充套件了(extends)另外兩個介面IBolt和IComponent。

IRichBolt是使用Java語言實現Bolt最主要的介面,擴充了(extends)另外兩個介面IBolt和IComponent.。介面包含的方法有prepare(in stormConf,in context,in collector):void,execute(in tuple) :void,cleanup():void。最重要的方法是execute(),該方法接收一個資料項作為輸入。Bolt可以將處理後的結果作為新的Tuple,使用OutputCollector物件的emit()方法傳送。Bolt可以在OutputCollector中對每一個傳送資料項呼叫ack()方法,使得storm能夠追溯這個資料項是否被完整處理。

IBolt和IComponent介面

1、prepare()與cleanup()      void prepare(java.util.Map.stormConf,TopologyContext context,OutputCollector collector)

   prepare()用於例項化Bolt的一個執行時任務,被叢集中某一程式呼叫,提供Bolt執行的環境。prepare()方法三個引數:stormConf,context,collector.

    (1)sotrmConf物件維護Storm中針對該Bolt的配置資訊。這些配置資訊是Topology提供的,被叢集中執行該Bolt的機器使用。

    (2)context上下文物件,用於獲取該元件執行時任務的資訊。

    (3)collector物件用於從該Bolt傳送資料項。

2、execute()

    該方法用於Bolt從Topology中接收一個資料項(Tuple),並可以將處理的結果作為新的資料項傳送(emit),是Bolt需要實現的最重要的方法。這個方法的引數input是一個資料項物件,它包含了眾多的後設資料(metadata),包括它來自的元件、流、任務等。資料項中的值,可以通過Tuple類的getValue()方法獲得。處理結果的傳送是通過在prepare()方法中提供的OutputCollector物件,呼叫emit方法實現。

3、IBasicBolt和BaseBasicBolt

    在許多場景下Bolt的資料處理,都需要確認處理完成或認定失敗。需要程式碼emit資料和呼叫ack/fail。Storm提供了另一個用來實現Bolt的介面IBasicBolt,用於該介面的實現類,會在執行execute方法之後自動呼叫ack方法。

 

  


相關文章