我正在尝试关注this,但我遇到了错误。
特别是,当我跑步时:
spark-submit.cmd --master k8s://https://192.168.1.40:8443 --deploy-mode cluster --name spark-pi --class org.apache.spark.examples.SparkPi --conf spark.executor.instances=1 --conf spark.kubernetes.container.image=spark:spark --conf spark.kubernetes.driver.pod.name=spark-pi-driver local:///opt/spark/examples/jars/spark-examples_2.11-2.3.0.jar
我明白了:
2018-03-17 02:09:00 INFO LoggingPodStatusWatcherImpl:54 - State changed, new state:
pod name: spark-pi-driver
namespace: default
labels: spark-app-selector -> spark-798e78e46c5c4a11870354b4b89602c0, spark-role -> driver
pod uid: c6de9eb7-297f-11e8-b458-00155d735103
creation time: 2018-03-17T01:09:00Z
service account name: default
volumes: default-token-m4k7h
node name: minikube
start time: 2018-03-17T01:09:00Z
container images: spark:spark
phase: Failed
status: [ContainerStatus(containerID=docker://5c3a1c81333b9ee42a4e41ef5c83003cc110b37b4e0b064b0edffbfcd3d823b8, image=spark:spark, imageID=docker://sha256:92e664ebc1612a34d3b0cc7522615522805581ae10b60ebf8c144854f4207c06, lastState=ContainerState(running=null, terminated=null, waiting=null, additionalProperties={}), name=spark-kubernetes-driver, ready=false, restartCount=0, state=ContainerState(running=null, terminated=ContainerStateTerminated(containerID=docker://5c3a1c81333b9ee42a4e41ef5c83003cc110b37b4e0b064b0edffbfcd3d823b8, exitCode=1, finishedAt=Time(time=2018-03-17T01:09:01Z, additionalProperties={}), message=null, reason=Error, signal=null, startedAt=Time(time=2018-03-17T01:09:01Z, additionalProperties={}), additionalProperties={}), waiting=null, additionalProperties={}), additionalProperties={})]
kubectl logs -f spark-pi-driver
告诉我:
C:\spark-2.3.0-bin-hadoop2.7>kubectl logs -f spark-pi-driver
++ id -u
+ myuid=0
++ id -g
+ mygid=0
++ getent passwd 0
+ uidentry=root:x:0:0:root:/root:/bin/ash
+ '[' -z root:x:0:0:root:/root:/bin/ash ']'
+ SPARK_K8S_CMD=driver
+ '[' -z driver ']'
+ shift 1
+ SPARK_CLASSPATH=':/opt/spark/jars/*'
+ env
+ grep SPARK_JAVA_OPT_
+ sed 's/[^=]*=\(.*\)/\1/g'
+ readarray -t SPARK_JAVA_OPTS
+ '[' -n '/opt/spark/examples/jars/spark-examples_2.11-2.3.0.jar;/opt/spark/examples/jars/spark-examples_2.11-2.3.0.jar' ']'
+ SPARK_CLASSPATH=':/opt/spark/jars/*:/opt/spark/examples/jars/spark-examples_2.11-2.3.0.jar;/opt/spark/examples/jars/spark-examples_2.11-2.3.0.jar'
+ '[' -n '' ']'
+ case "$SPARK_K8S_CMD" in
+ CMD=(${JAVA_HOME}/bin/java "${SPARK_JAVA_OPTS[@]}" -cp "$SPARK_CLASSPATH" -Xms$SPARK_DRIVER_MEMORY -Xmx$SPARK_DRIVER_MEMORY -Dspark.driver.bindAddress=$SPARK_DRIVER_BIND_ADDRESS $SPARK_DRIVER_CLASS $SPARK_DRIVER_ARGS)
+ exec /sbin/tini -s -- /usr/lib/jvm/java-1.8-openjdk/bin/java -Dspark.executor.instances=1 -Dspark.driver.port=7078 -Dspark.driver.blockManager.port=7079 -Dspark.submit.deployMode=cluster -Dspark.jars=/opt/spark/examples/jars/spark-examples_2.11-2.3.0.jar,/opt/spark/examples/jars/spark-examples_2.11-2.3.0.jar -Dspark.app.id=spark-798e78e46c5c4a11870354b4b89602c0 -Dspark.kubernetes.container.image=spark:spark -Dspark.master=k8s://https://192.168.1.40:8443 -Dspark.kubernetes.executor.podNamePrefix=spark-pi-fb36460b4e853cc78f4f7ec4d9ec8d0a -Dspark.app.name=spark-pi -Dspark.driver.host=spark-pi-fb36460b4e853cc78f4f7ec4d9ec8d0a-driver-svc.default.svc -Dspark.kubernetes.driver.pod.name=spark-pi-driver -cp ':/opt/spark/jars/*:/opt/spark/examples/jars/spark-examples_2.11-2.3.0.jar;/opt/spark/examples/jars/spark-examples_2.11-2.3.0.jar' -Xms1g -Xmx1g -Dspark.driver.bindAddress=172.17.0.4 org.apache.spark.examples.SparkPi
Error: Could not find or load main class org.apache.spark.examples.SparkPi
找不到SparkPi类。然而,当我探索spark:spark
容器时,JAR就在里面:
\opt\spark\examples\jars:
spark-examples_2.11-2.3.0.jar
所以图像构建正确......
任何想法有什么不对?
帮助!!!
修改的
我一直在做更多测试。我确实在Azure中设置了一个AKS并启动了相同的Docker镜像获得相同的错误。我正在遵循this指令,但使用与本地通过ACR相同的Docker镜像。
此外,.JAR上传到Blob存储,并且用于AKS的URL。我仍然得到完全相同的错误。
这让我觉得错误可能是我构建图像本身的方式,也可能是我构建.JAR的方式,而不是集群本身的某些配置。
然而,没有雪茄。
任何想法 - 甚至是获得Spark 2.3图像的URL - 都会受到欢迎。 我在Windows中构建图像。我将很快尝试在Linux中构建它,也许这就是问题一直......
THX
答案 0 :(得分:0)
我找到了一个解决方案,我试图从WSL(WSL的Linux子系统)运行示例,它可以工作。
它看起来像Spark 2.3版本中的一个错误,它无法在Windows环境中正确设置路径。Spark-on-k8s没有行为并且无法正常工作。 所以我找到了安排Spark 2.3的解决方法:
./spark-submit --master k8s://https://192.168.1.40:8443 --deploy-mode cluster --name spark-pi --class org.apache.spark.examples.SparkPi --conf spark.executor.instances=1 --conf spark.kubernetes.container.image=spark:spark --conf spark.kubernetes.driver.pod.name=spark-pi-driver local:///opt/spark/examples/jars/spark-examples_2.11-2.3.0.jar
答案 1 :(得分:0)
我知道这个话题已经有3个月了,但由于我遇到了类似的问题,并且没有找到任何有效的答案,我会发布我的,也许它会为其他人提供帮助:
正如此处http://mail-archives.apache.org/mod_mbox/spark-user/201804.mbox/%3cCAAOnQ7v-oeWeW-VMtV5fuonjPau8vafzQPheypzjv+2M8aEp=Q@mail.gmail.com%3e所指出的,问题可能来自不同的类路径分隔符。为了测试,我最终修改了官方Spark-Hadoop包中的/ kubernetes / dockerfiles / spark / Dockerfile。我在ENV SPARK_HOME /opt/spark
之前直接添加了这两行,我的工作可以开始了:
COPY examples/jars/spark-examples_2.11-2.3.0.jar /opt/spark/jars
COPY examples/jars/scopt_2.11-3.7.0.jar /opt/spark/jars
这是一种解决方法而不是正确的解决方案,但至少它可以让我们进行测试。
spark-submit
命令如下:
./bin/spark-submit.cmd --master k8s://localhost:6445 --deploy-mode cluster --name spark-pi --class org.apache.spark.examples.SparkPi --conf spark.executor.instances=2 --conf spark.kubernetes.container.image=spark:latest --conf spark.app.name=spark-pi local:///opt/spark/jars/spark-examples_2.11-2.3.0.jar
我构建了Docker图像:docker build -t spark:latest -f kubernetes/dockerfiles/spark/Dockerfile .