【发布时间】:2021-09-08 16:49:20
【问题描述】:
我有一个运行在内部 kubernetes 集群上的 spark 集群(由 Rancher 管理)。我们公司和集群的配置不允许从以下位置访问服务:
spark://SERVICE_NAME.namespace.svc.domain.....
我们使用 Big data Europe 的 yaml 文件创建了集群,并进行了一些明显的更改,例如资源。
链接到他们的 github:
https://github.com/big-data-europe/docker-spark#kubernetes-deployment
这种方法最好的一点是我们不必手动设置任何东西、部署、服务等。我们只需运行yaml 文件,一切都在几秒钟内为我们构建好了。
Yaml 文件: https://raw.githubusercontent.com/big-data-europe/docker-spark/master/k8s-spark-cluster.yaml
要访问 spark-ui,我只需创建一个入口对象,我们就可以从外部访问它。酷!
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: spark-master
labels:
app: spark-master
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/hsts: "false"
spec:
rules:
- host: RANDOM_NAME.NAMESPACE.svc.k8s.CLUSTER.DOMAIN.com
http:
paths:
- path: /
backend:
serviceName: spark-master
servicePort: 8080
我想做的是,通过我工作站上的 CLI 访问由 BDE 的给定 yaml 文件创建的 spark 集群。 因为我们还不支持服务方式(正确的方式)所以我尝试使用端口转发方法
一些见解:
- 火花大师在 7077 上
- spark UI 在 8080 上(可通过入口对象访问)
- 火花架在 6066 上
kubectl -n <NAMESPACE> port-forward pods/spark-master-64bbbd7877-6vt6w 12345:7077
我的kubectl 已配置为连接到集群(感谢 Rancher 准备使用的配置文件)
但是当我尝试通过以下方式向集群提交作业时:
spark-submit --class org.apache.spark.examples.SparkPi --master spark://localhost:12345 --deploy-mode cluster \
--conf spark.kubernetes.namespace=NAMESPACE \
--conf \spark.kubernetes.authenticate.submission.oauthToken=MY_TOKEN \
--conf spark.kubernetes.file.upload.path=/temp C:\opt\spark\spark-3.0.0-bin-hadoop2.7\examples\jars\spark-examples_2.12-3.0.0.jar 1000
我收到错误
Forwarding from 127.0.0.1:12345 -> 7077
Forwarding from [::1]:12345 -> 7077
Handling connection for 12345
E1014 13:17:45.039840 13148 portforward.go:400] an error occurred forwarding 12345 -> 7077: error forwarding port 7077 to pod f83c6b40d5af66589976bbaf69537febf79ee317288a42eee31cb307b03a954d, uid : exit status 1: 2020/10/14 11:17:45 socat[5658] E connect(5, AF=2 127.0.0.1:7077, 16): Connection refused
简而言之,提交命令没有连接到从我的 CLI 部署的 Spark 集群。
我可以使用 BDE 文档中指定的 kubectl 命令运行 spark 提交,但出于某些原因,我们的要求是通过 CLI 连接。
在这方面的帮助将不胜感激。
我的令牌和其他东西在 k8s 模式下是正确的,我可以轻松 ping 集群(使用 url)
EDIT:
我假设 spark-master 进程创建了一个明确不绑定到地址 0.0.0.0 的套接字,但只绑定到它的主地址。由于端口转发将使用 pod 内的环回地址,因此连接失败。 而且我需要重新配置 spark-master 进程以显式绑定到 0.0.0.0。 如果这是问题所在,有人知道这样做的方法吗?
【问题讨论】:
标签: apache-spark kubernetes kubectl spark-submit