簡體   English   中英

Spark 2.3-Minikube-Kubernetes-Windows-演示-未找到SparkPi

[英]Spark 2.3 - Minikube - Kubernetes - Windows - Demo - SparkPi not found

我正在嘗試遵循此操作,但是遇到錯誤。

特別是當我運行時:

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映像,並得到了相同的錯誤。 我正在按照說明進行操作,但使用與通過ACR在本地相同的Docker映像。

此外,.JAR已上傳到Blob存儲,URL用於AKS。 仍然我有完全相同的錯誤。

某種程度上,這使我認為錯誤可能出在構建映像本身的方式上,還是在構建.JAR的方式上,而不是群集本身的某些配置中。

但是,沒有雪茄。

任何想法-甚至是獲取有效Spark 2.3圖像的URL-都將受到歡迎。 我在Windows中構建映像。 我會盡快嘗試在Linux中構建它,也許一直以來就是問題所在...

謝謝

我找到了一個解決方案,我嘗試從WSL(適用於WSL的Linux子系統)運行示例,並且它可以工作。

看起來像Spark 2.3版本中的錯誤,無法在Windows環境中正確設置路徑。 Spark-on-k8s沒有行為,可以直接使用。 所以我找到了解決方案來安排Spark 2.3:

  1. 設置WSL
  2. 為Linux子系統設置Spark環境
  3. 在bash中運行./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

我知道這個主題已有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 .

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM