Storm Bolt接口
? ? ? 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方法。
?
總結
以上是生活随笔為你收集整理的Storm Bolt接口的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于解决form表单记录上次保存填写记录
- 下一篇: Cimg代码初探