我有一个用 scala 编写的示例 spark 应用程序,可以使用 apache ignite 将数据推送到缓存。据我所知,我们必须启动 ignite.sh 才能运行应用程序。但是,如果未启动 ignite,则应用程序将永远挂起。我尝试更改默认的 ignite 配置,但没有用。
没有启动 ignite 节点时,有没有办法杀死应用程序?
我有一个用 scala 编写的示例 spark 应用程序,可以使用 apache ignite 将数据推送到缓存。据我所知,我们必须启动 ignite.sh 才能运行应用程序。但是,如果未启动 ignite,则应用程序将永远挂起。我尝试更改默认的 ignite 配置,但没有用。
没有启动 ignite 节点时,有没有办法杀死应用程序?
默认情况下,客户端节点将无限期地等待至少一个服务器节点启动。如果没有服务器,您可以将其配置为在某个超时后失败:
<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>
加入超时属性需要设置为 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})
这解决了这两个问题。