我正在尝试使用来自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,则相同配置没有问题。
答案 0 :(得分:0)
这似乎不是暴露HazelCast群集的正确方法。
您需要将所有三个pod放在service
spec.type
{K} LoadBalancer
后面。然后在setAddresses(..)
方法中,仅指定您创建的服务的负载均衡器IP。
请参阅here