我正在kubernetes的端口之一上运行pyspark。我正在尝试移植到我的本地计算机。执行我的python文件时出现此错误。
Forwarding from 127.0.0.1:7077 -> 7077
Forwarding from [::1]:7077 -> 7077
Handling connection for 7077
E0401 01:08:11.964798 20399 portforward.go:400] an error occurred forwarding 7077 -> 7077: error forwarding port 7077 to pod 68ced395bd081247d1ee6b431776ac2bd3fbfda4d516da156959b6271c2ad90c, uid : exit status 1: 2019/03/31 19:38:11 socat[1748104] E connect(5, AF=2 127.0.0.1:7077, 16): Connection refused
这是我的python文件的几行。在定义conf的行中出现错误。
from pyspark import SparkContext, SparkConf
from pyspark.sql import SQLContext
conf = SparkConf().setMaster("spark://localhost:7077").setAppName("Stand Alone Python Script")
我已经尝试在kubernetes上安装socat
。我正在本地使用Spark版本2.4.0。我什至尝试在YAML文件中公开端口7077。没有解决。
这是用于部署的YAML文件。
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
creationTimestamp: 2018-10-07T15:23:35Z
generation: 16
labels:
chart: spark-0.2.1
component: m3-zeppelin
heritage: Tiller
release: m3
name: m3-zeppelin
namespace: default
resourceVersion: "55461362"
selfLink: /apis/apps/v1beta1/namespaces/default/statefulsets/m3-zeppelin
uid: f56e86fa-ca44-11e8-af6c-42010a8a00f2
spec:
podManagementPolicy: OrderedReady
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
component: m3-zeppelin
serviceName: m3-zeppelin
template:
metadata:
creationTimestamp: null
labels:
chart: spark-0.2.1
component: m3-zeppelin
heritage: Tiller
release: m3
spec:
containers:
- args:
- bash
- -c
- wget -qO- https://archive.apache.org/dist/spark/spark-2.2.2/spark-2.2.2-bin-hadoop2.7.tgz
| tar xz; mv spark-2.2.2-bin-hadoop2.7 spark; curl -sSLO https://storage.googleapis.com/hadoop-lib/gcs/gcs-connector-latest-hadoop2.jar;
mv gcs-connector-latest-hadoop2.jar lib; ./bin/zeppelin.sh
env:
- name: SPARK_MASTER
value: spark://m3-master:7077
image: apache/zeppelin:0.8.0
imagePullPolicy: IfNotPresent
name: m3-zeppelin
ports:
- containerPort: 8080
name: http
protocol: TCP
resources:
requests:
cpu: 100m
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /zeppelin/conf
name: m3-zeppelin-config
- mountPath: /zeppelin/notebook
name: m3-zeppelin-notebook
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
updateStrategy:
rollingUpdate:
partition: 0
type: RollingUpdate
volumeClaimTemplates:
- metadata:
creationTimestamp: null
name: m3-zeppelin-config
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10G
storageClassName: standard
status:
phase: Pending
- metadata:
creationTimestamp: null
name: m3-zeppelin-notebook
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10G
storageClassName: standard
status:
phase: Pending
status:
collisionCount: 0
currentReplicas: 1
currentRevision: m3-zeppelin-5779b84d99
observedGeneration: 16
readyReplicas: 1
replicas: 1
updateRevision: m3-zeppelin-5779b84d99
updatedReplicas: 1
答案 0 :(得分:1)
从 Kubernetes 的角度专门关注可能与之相关的错误:
NGINX
上的 port
实例发送请求:1234
)Pod
未收听所需的 port
。我已经通过使用 kubespray
创建的 Kubernetes 集群成功重现了此错误。
假设您已运行以下步骤:
$ kubectl create deployment nginx --image=nginx
$ kubectl port-forward deployment/nginx 8080:80
一切都应该是正确的,运行时应该会出现 NGINX
欢迎页面:$ curl localhost:8080
。
如果我们对 port-forward
命令进行如下更改(注意 1234
端口):
$ kubectl port-forward deployment/nginx 8080:1234
你会得到以下错误:
Forwarding from 127.0.0.1:8080 -> 1234
Forwarding from [::1]:8080 -> 1234
Handling connection for 8080
E0303 22:37:30.698827 625081 portforward.go:400] an error occurred forwarding 8080 -> 1234: error forwarding port 1234 to pod e535674b2c8fbf66252692b083f89e40f22e48b7a29dbb98495d8a15326cd4c4, uid : exit status 1: 2021/03/23 11:44:38 socat[674028] E connect(5, AF=2 127.0.0.1:1234, 16): Connection refused
这也适用于应用程序尚未绑定到端口和/或未侦听的 Pod
。
附注!
您可以通过运行 Ubuntu
Pod
来模拟它,在那里您尝试卷曲其端口 80。它会失败,因为没有任何东西侦听其端口。尝试进入 exec
并运行 $ apt update && apt install -y nginx
并再次尝试卷曲(配置 kubectl port-forward
)。它将起作用并且不会产生提到的错误 (socat
)。
解决问题的一部分:
<块引用>我什至尝试在 YAML 文件中公开端口 7077。没有成功。
如果您的意思是已包含 - containerPort: 8080
。该字段纯粹是信息性的,不携带任何要进行的配置。您可以在此处阅读更多相关信息:
(除此之外,我认为您使用的端口不正确:7077
)
至于$ kubectl port-forward --address 0.0.0.0
。这是一种公开端口转发的方法,以便它可以侦听所有接口(在主机上)。它可能允许从 port-forward
访问您的 LAN
:
$ kubectl port-forward --help
(部分): # Listen on port 8888 on localhost and selected IP, forwarding to 5000 in the pod
kubectl port-forward --address localhost,10.19.21.23 pod/mypod 8888:5000
其他资源: