如何解决如何通过spark-submit访问Spark Kubernetes集群上的kubectl转发端口?
我有一个在内部Kubernetes集群(由Rancher管理)上运行的spark集群。我们公司和群集的配置不允许从以下位置访问服务:
spark://SERVICE_NAME.namespace.svc.domain.....
我们使用欧洲大数据的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
因此,简而言之, submit命令不会连接到从我的CLI部署的Spark集群。
我可以使用BDE文档中指定的kubectl
命令运行spark提交,但是出于某些原因,我们的要求是通过CLI连接。
在这方面的帮助将不胜感激。
我的令牌和其他内容在k8s
模式下是正确的,我能够轻松ping通群集(使用url)
EDIT:
我假设spark-master进程创建了一个套接字,该套接字不会显式绑定到地址0.0.0.0,而不会绑定到其主地址。由于端口转发将使用Pod中的环回地址,因此连接将失败。 而且我需要重新配置spark-master进程以显式绑定到0.0.0.0。 如果是问题所在,有人知道这样做的方法吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。