https://spark.apache.org/docs/latest/cluster-overview.htmlの画像をご覧ください。kubernetesからsparkアプリケーションを提出する方法
外部kubernetesを実行におけるスパーククラスタ。しかし、私はkubernetesの中にドライバプログラムを実行するつもりです。問題は、スパーククラスタにドライバプログラムがあるかどうかを知らせる方法です。
マイkubernetesの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
エラーは次のとおりです。
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
スパーククラスタは、IPは172.17.0.8であるドライバプログラムに到達しようとしています。 172.17.0.8はkubernetes内の内部ipかもしれません。
この問題を解決するにはどうすればよいですか?私のyamlファイルを修正するには? spark.driver.host =」、 "--conf"、 "spark.driver.bindAddress = 192.168.42.8"、 "--conf":ありがとう
UPDATE
は、私は、次の2つのパラメータを追加しました0.0.0.0 "となります。
しかし、ログから、まだ172.17.0.8に到達しようとしています。これはkubernetes内部ポッドipです。
UPDATE
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
別のエラー:
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」は、spark-clusterにアプリケーションドライバがどこにあるかを通知するために使用されますか? – BAE
実際、 'spark.driver.host'はより有望です。 '0.0.0.0'でバインドしたいが、それ自体をホスト名として提示する。 – kichik
私の更新を見てください – BAE