【发布时间】:2021-06-23 07:21:46
【问题描述】:
我按照说明在 https://spark.apache.org/docs/3.1.1/running-on-kubernetes.html#content 上运行 spark-on-k8s
提交以集群模式启动 Spark Pi 的示例后,pod 遇到错误,我不明白为什么会发生。
这是命令行:
./bin/spark-submit \
--master k8s://https://2-120:6443 \
--deploy-mode cluster \
--name spark-pi \
--class org.apache.spark.examples.SparkPi \
--conf spark.executor.instances=5 \
--conf spark.kubernetes.container.image=ethanzhang1997/spark:3.1.1 \
local:///path/to/examples.jar
这是错误: error information
我认为这个容器应该在镜像中使用 java env,但它试图从我当前的计算机上读取 JAVA_HOME。
任何帮助对我都很重要,非常感谢!
现在我暂时解决了这个问题。我把对应版本的jdk下载到spark目录下,在Dockerfile中加入下面几行,就是构建spark镜像:
RUN mkdir -p /home/deploy
ADD jdk-8u201-linux-x64.tar.gz /home/deploy/
ENV JAVA_HOME /home/deploy/jdk1.8.0_201
ENV JRE_HOME ${JAVA_HOME}/jre
ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib
ENV PATH ${JAVA_HOME}/bin:$PATH
这确保我在映像和主机中都有相同的 JAVA_HOME。
但还有一点我无法理解。hadoop 和 spark env 在我的主机和图像之间也有所不同。为什么这不会引起问题?我注意到有一个在图像上挂载 spark dir 的过程,但是它是如何工作的?
顺便说一句,spark-on-kubernetes 上的官方指南似乎将 openjdk11 设为默认值。但是如果用户的 JAVA_HOME 不是这样设置的,那就有问题了,是吗?
【问题讨论】:
-
嗨@EthanZhang,欢迎来到StackOverflow。我发现了非常相似的问题:stackoverflow.com/questions/43834670/…。这可以解决您的问题吗?
-
谢谢@Mikolaj Glodziak,但这不是同一个问题,他的 spark 安装在 os 中,但我的 spark 安装在 k8s pod 中。根据那个问题,我认为我的 JAVA_HOME 设置是正确的。
-
JAVA_HOME的路径设置不正确时会出现此错误。看起来您需要检查容器映像。见this question 或this -
感谢您的建议@Mikolaj Glodziak。我暂时解决了这个问题。我在我的问题描述下方添加了解决方案。但我并不完全了解这背后的机制。
-
在容器中运行某些东西使其与环境的其余部分分开。如果您需要容器中的任何变量 - 它们必须在容器映像中。 “我的主机和图像之间的 hadoop 和 spark env 也不同。”在您的情况下,您只对容器图像中的变量感兴趣。