apache-spark - 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 不是这样设置的,就会有问题,是吗?
解决方案
推荐阅读
- python - 在 python 3 中安装 lalsuite 包时遇到问题
- javascript - 如何从字符串中拆分值并在javascript中推入数组
- c# - SignalR 从服务器流式传输到客户端
- sql-server - 从 XML 列中选择所有 XML 节点
- android - Android:垂直 ViewPager2 显示项目的下一个和之前
- asterisk - Asterisk 支持的最高和最低支持的音频文件是什么
- asp.net-core-mvc - 阻止验证 ASP.NET Core MVC 中的特定类型
- python - AttributeError:'Player' 对象在 python 中没有属性'player_xpos'
- dynamic - 为什么在 DAX 的过滤表表达式中似乎只有硬编码值有效?
- c# - 创建大小为 6000X4500 像素的位图时参数无效