2

我有一个用 scala 编写的示例 spark 应用程序,可以使用 apache ignite 将数据推送到缓存。据我所知,我们必须启动 ignite.sh 才能运行应用程序。但是,如果未启动 ignite,则应用程序将永远挂起。我尝试更改默认的 ignite 配置,但没有用。

没有启动 ignite 节点时,有没有办法杀死应用程序?

4

2 回答 2

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>
于 2015-12-31T20:49:03.960 回答
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})

这解决了这两个问题。

于 2016-01-01T02:10:50.133 回答