从运行在spark cluster

时间:2016-09-16 11:33:48

标签: scala apache-spark kubernetes spark-streaming hazelcast

我正在尝试使用来自spark集群中运行的spark作业的Hazel Cast Java客户端进行Hazel强制转换连接。 Hazelcast在kubernetes集群中作为pod运行,我已经使用节点端口从kubernetes集群外部访问了Hazelcast服务。

当在不同的Kubernetes群集节点中运行多个Hazel cast pod时会遇到问题,这些群集在内部获得一些私有IP。

以下是我正在使用的Java Hazel强制转换客户端配置:

cc = new ClientConfig()

var networkConfig:ClientNetworkConfig = cc.getNetworkConfig()

networkConfig.addAddress(kube_node1_IP,kube_node2_IP,kube_node3_IP)

networkConfig.setConnectionAttemptLimit(500)

cc.getSerializationConfig().addSerializerConfig(new SerializerConfig()
      .setImplementation(new EventSerializer()).setTypeClass(EventClass))
      .addPortableFactoryClass(1, keyFactoryClass)

异常后退跟踪如下:

  

org.apache.spark.SparkException:作业因阶段失败而中止:   阶段1.0中的任务0失败4次,最近失败:丢失任务0.3   在阶段1.0

     

com.hazelcast.core.HazelcastException:java.io.IOException:否   地址[10.2.36.5]:5701 的可用连接           在com.hazelcast.util.ExceptionUtil.peel(ExceptionUtil.java:73)           在com.hazelcast.util.ExceptionUtil.peel(ExceptionUtil.java:63)           在com.hazelcast.util.ExceptionUtil.peel(ExceptionUtil.java:52)           at com.hazelcast.util.ExceptionUtil.rethrow(ExceptionUtil.java:83)           在com.hazelcast.client.spi.ClientProxy.invokeOnPartition(ClientProxy.java:128)           在com.hazelcast.client.spi.ClientProxy.invoke(ClientProxy.java:120)           在com.hazelcast.client.proxy.ClientMapProxy.getInternal(ClientMapProxy.java:225)           在com.hazelcast.client.proxy.ClientMapProxy.get(ClientMapProxy.java:220)

此处10.2.36.5是其中一个淡褐色投射吊舱的私有IP。

P.S。 :如果只有一个pod,则相同配置没有问题。

1 个答案:

答案 0 :(得分:0)

这似乎不是暴露HazelCast群集的正确方法。

您需要将所有三个pod放在service spec.type {K} LoadBalancer后面。然后在setAddresses(..)方法中,仅指定您创建的服务的负载均衡器IP。

请参阅here