Linux 系统中,环境变量的配置文件目录是/etc/profile
。注意,每次修改完该文件后,需要使用source /etc/profile
命令使得更改的环境变量生效。很多同学都是同时安装了spark和Hadoop,那么环境变量配置文件就很可能如下所示:
export JAVA_HOME=/export/server/jdk1.8.0_311
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export SPARK_HOME=/export/server/spark-3.2.0-bin-hadoop3.2
export PATH=$SPARK_HOME/bin:$SPARK_HOME/sbin:$PATH
export MAVEN_HOME=/export/server/apache-maven-3.5.4
export MAVEN_OPTS="-Xms4096m -Xmx4096m"
export PATH=:$MAVEN_HOME/bin:$PATH
export PATH=$PATH:/usr/local/bin # 添加cmake的路径到环境变量
export HADOOP_HOME=/export/server/hadoop-3.1.4-src/hadoop-dist/target/hadoop-3.1.4
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
这里讲一下,在 Linux 中,环境变量是用来存储系统或用户定义的参数的一种机制。在我们上述配置的情况下,可以看到有两个环境变量 $SPARK_HOME
和 $HADOOP_HOME
,它们分别指向不同的文件路径。但是hadoop和spark软件中都有一个同名的脚本文件 start-all.sh
是我们启动需要的。
那么就会出现一种情况,当我们在命令行中输入 start-all.sh
时,系统会按照以下顺序搜索可执行文件的路径:
$PATH
环境变量中指定的目录因此,如果我们在这两个路径以外,输入命令 start-all
,那么系统将按照上述顺序搜索文件并运行第一个找到的.sh
脚本文件,也就是只启动了spark,而不会启动hadoop。要避免这种情况,除了跳转到脚本所在目录外,也可以使用 $SPARK_HOME
或 $HADOOP_HOME
环境变量来明确指定要运行的文件的路径。例如,如果想运行 $SPARK_HOME
文件夹中的 start-all.sh
文件,可以在命令行中输入命令:$SPARK_HOME/sbin/start- all.sh
。
下面提供一种更为简便的方式,首先在配置文件的最顶行写入export PATH=/usr/local/bin:$PATH
,然后在我们的/usr/local/bin
目录下新建一个.sh
脚本文件,内容如下:
#!/bin/bash
# Prompt the user to select a script to run
echo "Please select a script to run:"
echo "1. start-all script in $SPARK_HOME"
echo "2. start-all script in $HADOOP_HOME"
read choice
case $choice in
1)
$SPARK_HOME/sbin/start-all.sh
;;
2)
$HADOOP_HOME/sbin/start-all.sh
;;
*)
echo "Invalid choice. Please enter 1 or 2."
;;
esac
更新环境变量,这样,当我们下次输入start-all.sh
时,就能够手动进行选择想要启动的脚本了。
spark配置中一些要注意的地方
在 Bash Shell 中,export
是用来设置环境变量的命令。export
命令后面的变量名和变量值之间必须用等号 =
连接,并且等号前后不能有空格。
如果等号前后有空格,Bash Shell 则会将其视为将变量名和变量值分开的两个参数,而不是一个变量名和一个变量值。这将导致 export
命令无法设置环境变量的值,从而可能会导致其他问题。
因此,在linux中设置环境变量时,确保变量名和变量值之间没有空格,否则,假若我们在spark-env.sh
中配置export JAVA_HOME= /export/server/jdk1.8.0_311
,就容易出现报错:
/export/server/spark-3.2.0-bin-hadoop3.2/conf/spark-env.sh:行75: /export/server/jdk1.8.0_311: 是一个目录
另外一个要注意的点是,修改spark的conf目录下文件后,要使用scp命令进行分发,否则另外几台主机没有更新配置,依然是采用错误的配置,会导致报错。
配置成功的话,在node1中使用jps可以看到如下信息:
25443 ResourceManager
65543 Master
78679 Jps
23754 NameNode
25870 NodeManager
65759 Worker
24079 DataNode