JAVA_HOME未设置,无法继续.(Linux下安装Apache Spark)



我是怎么来的

  1. 运行命令:opt/develop/spark-3.3.1$ sudo ./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显然,脚本(make-distribution.sh)没有读取变量的值,即$JAVA_HOME。
  • 运行命令:/opt/develop/spark-3.3.1$ echo $JAVA_HOME结果如下:/usr/lib/jvm/jdk-19.0.1
  • 尝试:添加到/opt/develop/spark-3.3.1/sbin/spark-config.sh文件中export JAVA_HOME="/usr/lib/jvm/jdk-19.0.1" export PATH=$PATH:$JAVA_HOME/bin似乎并没有改变运行命令的结果。注销和重新登录也是无效的。
  • 注1:我的JAVA_HOME也在/etc/profile中设置D/my- envars文件如下:export JAVA_HOME="/usr/lib/jvm/jdk-19.0.1" export PATH=$PATH:$JAVA_HOME/bin
  • 注释-2:命令java --versionjavac --version似乎工作正常。

文件:/opt/develop/dev/make-distribution.sh写着:'

set -o pipefail
set -e
set -x
# Figure out where the Spark framework is installed
SPARK_HOME="$(cd "`dirname "$0"`/.."; pwd)"
DISTDIR="$SPARK_HOME/dist"
MAKE_TGZ=false
MAKE_PIP=false
MAKE_R=false
NAME=none
MVN="$SPARK_HOME/build/mvn"
function exit_with_usage {
set +x
echo "make-distribution.sh - tool for making binary distributions of Spark"
echo ""
echo "usage:"
cl_options="[--name] [--tgz] [--pip] [--r] [--mvn <mvn-command>]"
echo "make-distribution.sh $cl_options <maven build options>"
echo "See Spark's "Building Spark" doc for correct Maven options."
echo ""
exit 1
}
# Parse arguments
while (( "$#" )); do
case $1 in
--tgz)
MAKE_TGZ=true
;;
--pip)
MAKE_PIP=true
;;
--r)
MAKE_R=true
;;
--mvn)
MVN="$2"
shift
;;
--name)
NAME="$2"
shift
;;
--help)
exit_with_usage
;;
--*)
echo "Error: $1 is not supported"
exit_with_usage
;;
-*)
break
;;
*)
echo "Error: $1 is not supported"
exit_with_usage
;;
esac
shift
done
if [ -z "$JAVA_HOME" ]; then      # THIS SHOULD EVALUATE FALSE.
# Fall back on JAVA_HOME from rpm, if found
if [ $(command -v  rpm) ]; then
RPM_JAVA_HOME="$(rpm -E %java_home 2>/dev/null)"
if [ "$RPM_JAVA_HOME" != "%java_home" ]; then
JAVA_HOME="$RPM_JAVA_HOME"
echo "No JAVA_HOME set, proceeding with '$JAVA_HOME' learned from rpm"
fi
fi
if [ -z "$JAVA_HOME" ]; then
if [ `command -v java` ]; then
# If java is in /usr/bin/java, we want /usr
JAVA_HOME="$(dirname $(dirname $(which java)))"
fi
fi
fi

if [ -z "$JAVA_HOME" ]; then    # This SHOULD EVALUATE FALSE. APPARENTLY, IT DOES NOT
echo "Error: JAVA_HOME is not set, cannot proceed."
# I Should not be here, but I am!
exit -1
fi

您的问题在于您正在使用sudo执行脚本,它在默认情况下不保留环境变量。

作为一个小示例,考虑以下内容:

someone@somewhere:~/my-path$ export SOMEVAR="testmyvar"
someone@somewhere:~/my-path$ echo $SOMEVAR
testmyvar
someone@somewhere:~/my-path$ sudo bash -c 'echo $SOMEVAR'

如您所见,当使用sudo执行命令时,您不会保留所有的环境变量。

幸运的是,有一个非常简单的解决方案:使用sudo -E(它确实保留环境变量,您可以在sudo的手册页中找到该选项)

那么在我们的小例子中稍微高一点:

someone@somewhere:~/my-path$ sudo -E bash -c 'echo $SOMEVAR'
testmyvar

您可以看到-E选项做了您想要它做的事情!

希望这能解决你的问题:)

最新更新