首页 > 解决方案 > Spark-on-k8s:/opt/spark/bin/spark-class: line 71: /home/deploy/jdk1.8.0_201/bin/java: 没有这样的文件或目录

问题描述

我按照说明在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

这是错误: 错误信息

我认为这个容器应该在图像中使用 java env,但它试图从我当前的计算机上读取 JAVA_HOME。

任何帮助对我都很重要,非常感谢!


现在我暂时解决了这个问题。我将对应版本的jdk下载到spark dir中,并在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 不是这样设置的,就会有问题,是吗?

标签: apache-sparkkubernetes

解决方案


推荐阅读