关于spark启动脚本在linux系统中环境变量的处理

2023年 7月 28日 60.8k 0

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
    

    相关文章

    服务器端口转发,带你了解服务器端口转发
    服务器开放端口,服务器开放端口的步骤
    产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
    如何使用 WinGet 下载 Microsoft Store 应用
    百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
    百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

    发布评论