Regardez l'image de https://spark.apache.org/docs/latest/cluster-overview.html.comment soumettre l'application d'étincelle de kubernetes
Le groupe d'allumage en cours d'exécution en dehors Kubernetes. Mais je vais exécuter le programme pilote à l'intérieur des kubernetes. Le problème est de savoir comment laisser le cluster spark savoir si le programme du pilote est.
Mon Kubernetes fichier YAML:
kind: List
apiVersion: v1
items:
- kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: counter-uat
spec:
replicas: 1
selector:
matchLabels:
name: spark-driver
template:
metadata:
labels:
name: spark-driver
spec:
containers:
- name: counter-uat
image: counter:0.1.0
command: ["/opt/spark/bin/spark-submit", "--class", "Counter", "--master", "spark://spark.uat:7077", "/usr/src/counter.jar"]
- kind: Service
apiVersion: v1
metadata:
name: spark-driver
labels:
name: spark-driver
spec:
type: NodePort
ports:
- name: port
port: 4040
targetPort: 4040
selector:
name: spark-driver
L'erreur est:
Caused by: java.io.IOException: Failed to connect to /172.17.0.8:44117
at org.apache.spark.network.client.TransportClientFactory.createClient(TransportClientFactory.java:228)
at org.apache.spark.network.client.TransportClientFactory.createClient(TransportClientFactory.java:179)
at org.apache.spark.rpc.netty.NettyRpcEnv.createClient(NettyRpcEnv.scala:197)
at org.apache.spark.rpc.netty.Outbox$$anon$1.call(Outbox.scala:191)
at org.apache.spark.rpc.netty.Outbox$$anon$1.call(Outbox.scala:187)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: io.netty.channel.AbstractChannel$AnnotatedNoRouteToHostException: Host is unreachable: /172.17.0.8:44117
Le groupe d'étincelle tente d'atteindre le programme pilote qui IP est 172.17.0.8. 172.17.0.8 peut être une adresse IP interne à l'intérieur de kubernetes.
Comment réparer le problème? Comment réparer mon fichier yaml? Merci
MISE À JOUR
J'ai ajouté les deux paramètres suivants: "--conf", "spark.driver.bindAddress = 192.168.42.8", "--conf", « spark.driver.host = 0.0.0.0 ".
Mais à partir du journal, essayant toujours d'atteindre 172.17.0.8, qui est le pod interne de kubernetes ip.
MISE À JOUR
kind: List
apiVersion: v1
items:
- kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: counter-uat
spec:
replicas: 1
selector:
matchLabels:
name: counter-driver
template:
metadata:
labels:
name: counter-driver
spec:
containers:
- name: counter-uat
image: counter:0.1.0
command: ["/opt/spark/bin/spark-submit", "--class", "Counter", "--master", "spark://spark.uat:7077", "--conf", "spark.driver.bindAddress=192.168.42.8","/usr/src/counter.jar"]
kind: Service
apiVersion: v1
metadata:
name: counter-driver
labels:
name: counter-driver
spec:
type: NodePort
ports:
- name: driverport
port: 42761
targetPort: 42761
nodePort: 30002
selector:
name: counter-driver
Une autre erreur:
2017-06-23T20:00:07.487656154Z Exception in thread "main" java.net.BindException: Cannot assign requested address: Service 'sparkDriver' failed after 16 retries (starting from 31319)! Consider explicitly setting the appropriate port for the service 'sparkDriver' (for example spark.ui.port for SparkUI) to an available port or increasing spark.port.maxRetries.
'spark.driver.bindAddress' est utilisé pour avertir le cluster d'étincelles où se trouve le pilote d'application? – BAE
En fait 'spark.driver.host' semble plus prometteur. Vous voulez toujours qu'il se lie sur '0.0.0.0', mais se présente comme le nom d'hôte. – kichik
s'il vous plaît jeter un oeil à ma mise à jour – BAE