TiSpark 中 pd peer UNAVAILABLE: Unable to resolve host

tispark 示例程序中需要 pd server 的地址。我的 tidb 集群是用 k8s 部署的。 spark 集群是用 cm 部署的。

我试了下直接转发这个服务,也还是不行。相关代码如下:

val sparkConf = new SparkConf()
      .setIfMissing("spark.tispark.write.allow_spark_sql", "true")
      .setIfMissing("spark.master", "local[4]")
      .setIfMissing("spark.app.name", getClass.getName)
      .setIfMissing("spark.sql.extensions", "org.apache.spark.sql.TiExtensions")
      .setIfMissing("spark.tispark.tidb.addr", "172.16.1.130")
      .setIfMissing("spark.tispark.tidb.password", "example")
      .setIfMissing("spark.tispark.tidb.port", "30438")
      .setIfMissing("spark.tispark.tidb.user", "root")
      .setIfMissing("spark.tispark.pd.addresses", "172.16.1.130:3379")

报错: Caused by: java.net.UnknownHostException: tidb-cluster-001-pd-1.tidb-cluster-001-pd-peer.tidb-system.svc

完整的报错信息:https://paste.ubuntu.com/p/trpjk3X6Qh/

如果是要访问 TiDB , 因为 tidb sevice 在 k8s 里面有通过 nodePort service 给暴露出来了,因此如果是在 k8s 集群外的话可以使用 nodeIP:30438 访问,如果你这个程序也是跑在 k8s 集群里面则建议使用 clusterIP 访问,在你这就是通过 10.106.250.56:4000 访问,目前 tidb cluster 集群里面 pd 服务没有暴露到集群外,因此只能在集群内部使用 10.105.107.126:2379 访问,k8s 集群外部无法访问到 pd 集群

因为我的 spark 集群不是用 k8s 部署的,所以现在的话就没法连接 pd 服务了吗?

需要把你的 pd service 像 tidb 一样把端口暴露出去

我试了下,将 pd service 改为 NodePort 暴露出去了,但结果还是报同样的错。

  • 尝试在 spark 集群 telnet 下 pd 端口,是否通?

pd 没问题, 但是 pd-peer 仍然无法暴露外部端口。也没找到地方可以配置

配置是这样的么?

是的。还是报这个错: UNAVAILABLE: Unable to resolve host tidb-cluster-001-pd-2.tidb-cluster-001-pd-peer.tidb-system.svc

查看了部署集群的 helm 脚本,发现了下面这几行。不知道怎么覆盖这个配置。

kubectl port-forward -n <namespace> svc/<cluster-name>-pd 2379:2379 &>/tmp/portforward-pd.log &
```使用 port-forward

之前就试过了,一样的错。