我有一个用scala编写的示例spark应用程序,用于使用apache ignite将数据推送到缓存。据我所知,我们必须启动ignite.sh才能运行应用程序。但如果没有启动点火,应用程序将永远挂起。我尝试更改默认的点火配置,但没有用。
有没有办法在没有启动点火节点时终止应用程序?
答案 0 :(得分: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>
答案 1 :(得分:1)
加入超时属性需要设置为TCPDiscoverSPI,但我们不能使用配置或配置xml的发现api对象集,因为它会抛出任务不可序列化的异常。下面是适用于这种情况的代码,因为它在分布式模式下工作,SPI不是可在序列化模式下共享的可序列化类,而spark需要每个函数。
val ic = new IgniteContext[String, String](sc,() => {
val cfg = new IgniteConfiguration();
val tc = new TcpDiscoverySpi();
tc.setJoinTimeout(60000);
cfg.setDiscoverySpi(tc);
cfg})
这清除了两个问题。