Linux下安装Apache Spark时JAVA_HOME未识别问题求助
解决Spark编译脚本sudo执行时无法识别JAVA_HOME的问题
核心原因
sudo默认会重置环境变量(出于安全机制),当前用户的JAVA_HOME不会被传递到sudo执行的脚本环境中,所以脚本检测不到该变量。可执行sudo echo $JAVA_HOME验证,输出为空即可确认这一点。
解决方案
方法1:执行sudo命令时直接传递JAVA_HOME
在sudo命令前显式指定JAVA_HOME变量:
sudo JAVA_HOME=/usr/lib/jvm/jdk-19.0.1 ./dev/make-distribution.sh -pHADOOP-3 Dhadoop.version=3.2.4 -Pyarn --name custom-spark --pip --r --tgz -Psparkr -Phive -Phive-thriftserver -Pmesos -Pyarn -Pkubernetes
方法2:修改sudoers配置,让sudo继承JAVA_HOME
使用visudo编辑sudoers文件(必须用该命令,避免语法错误导致sudo功能失效):
sudo visudo
在文件中添加一行配置:
Defaults env_keep += "JAVA_HOME"
保存退出后,重新执行原sudo编译命令即可。
方法3:直接在编译脚本中硬编码JAVA_HOME
编辑./dev/make-distribution.sh,在脚本开头(set -x语句之后)添加:
export JAVA_HOME="/usr/lib/jvm/jdk-19.0.1"
保存修改后再执行sudo编译命令。
为什么之前的配置无效
/etc/profile.d/my-envvars和spark-config.sh的配置仅对普通用户会话生效,sudo执行时不会加载这些用户级环境配置。- sudo默认会清理大部分用户环境变量,即使普通用户下已设置JAVA_HOME,sudo启动的进程也无法获取到该变量。
内容的提问来源于stack exchange,提问作者Himu R
相关产品推荐
相关产品推荐

