2015-12-30 85 views
2

我有一個用scala編寫的示例spark應用程序,用apache點燃將數據推送到緩存。據我所知,我們必須啓動ignite.sh才能運行應用程序。但如果點火沒有啓動,應用程序將永遠掛起。我試着改變默認的點火配置,但沒用。如何在apache ignite未啓動時停止應用程序?

點火節點沒有啓動時,有沒有辦法殺死應用程序?

回答

1

的加入超時屬性需要被設置爲TCPDiscoverSPI,但我們不能使用配置或配置XML設置發現API對象,如它會拋出任務而不是可序列化的異常。下面是完美適用於這種情況的代碼,因爲它在分佈式模式下工作,並且SPI不是可串行化類以分佈式模式共享,這種情況引發了每個函數的期望。

val ic = new IgniteContext[String, String](sc,() => { 
     val cfg = new IgniteConfiguration(); 
     val tc = new TcpDiscoverySpi(); 
     tc.setJoinTimeout(60000); 
     cfg.setDiscoverySpi(tc); 
     cfg}) 

這清除了這兩個問題。

+0

以下,您在使用XML時看到了什麼樣的不可序列化異常?一般來說,XML只是一個Spring文件,用於構造一個IgniteConfiguration對象,然後用它來創建IgniteContext。所以它不應該有任何區別。 –

2

默認情況下,客戶端節點將無限期地等待至少一個服務器節點啓動。您可以配置它一定超時後失敗,如果沒有服務器:

<bean class="org.apache.ignite.configuration.IgniteConfiguration"> 
    <property name="discoverySpi"> 
     <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi"> 
      <property name="joinTimeout" value="60000"/> 
     </bean> 
    </property> 
</bean> 
+0

我認爲,這不會有火花。它可能與正常的應用程序一起工作。但是,沒有火花。因爲,配置和SPI會拋出任務而不是可序列化的異常。我發現了這個解決方案,並且我正在將代碼粘貼到 – srujana

相關問題