2014-04-10 52 views
1

我有一個風暴拓撲和一個螺栓,它應該與ElasticSearch交互。stormsearch with elasticsearch,無法獲得始終爲空的客戶端

public static Client client; 
public static Settings settings; 
public SomeBolt(){ 
    settings = 
      ImmutableSettings.settingsBuilder().put("cluster.name", "elasticsearch").build(); 
    client = new TransportClient(settings) 
      .addTransportAddress(new InetSocketTransportAddress("someip", 9300)); 

} 

它的偉大工程,當我在本地模式下運行的拓撲結構,但是當我嘗試在集羣模式下運行此,該客戶端獲取空值,不能執行下一步。

我甚至試圖在本地模式下在supervisor機器上運行它,並且它工作正常。只有在集羣模式下它無法獲得TransportClient。

有什麼可能的原因嗎?

+0

向我們展示異常堆棧跟蹤。 – Chiron

回答

0

您必須記住所有的噴嘴和螺栓必須是可序列化的,因爲它們(可能)會在它們的建造和啓動之間圍繞網絡移動。

因此,在構造函數中,您不能(例如)打開任何網絡連接(如在您的案例中創建ES客戶端)。 您必須在準備螺栓的方法。

另外,我建議你宣佈客戶端爲瞬態(而不是靜態)。

相關問題