如何使用start-all.sh来启动使用不同SPARK_HOME(而不是Master)的独立Worker?

i1icjdpr  于 2022-11-16  发布在  Apache
关注(0)|答案(3)|浏览(190)

我已经在两台机器上安装了spark 2.1.1,但是安装在不同的相对位置,即在一台机器上我安装在NTFS驱动器上,而在另一台机器上我安装在ext4驱动器上。我正在尝试在独立模式下启动一个集群,其中一台机器上有1个主节点和1个从节点,另一台机器上有1个从节点。
当我尝试通过主节点上的start-all.sh脚本启动此群集时,出现以下错误:-

192.168.1.154: bash: line 0: cd: /home/<somePath>/spark-2.1.1-bin-hadoop2.7: No such file or directory

我已经在各自的bashrc文件中设置了正确的SPARK_HOME。下面是我的 slave 文件(在1主机+1从机中)

localhost
192.168.1.154

我可以通过ssh远程登录到1台从机。我可以在每台机器上单独运行Spark集群。
据我所知,当我尝试通过start-all.sh脚本从我的主机远程启动一个从机时,它试图后藤主节点上安装spark的位置,但由于从节点上spark安装在不同的位置,它失败了。有人能告诉我如何纠正这个问题吗?

iyzzxitl

iyzzxitl1#

start-all.sh中,您可以找到以下内容:

if [ -z "${SPARK_HOME}" ]; then
  export SPARK_HOME="$(cd "`dirname "$0"`"/..; pwd)"
fi

# Load the Spark configuration
. "${SPARK_HOME}/sbin/spark-config.sh"

# Start Master
"${SPARK_HOME}/sbin"/start-master.sh

# Start Workers
"${SPARK_HOME}/sbin"/start-slaves.sh

这与独立主节点上的Spark安装无关。start-all.sh只是使用您全局定义的任何SPARK_HOME,并在集群中的所有节点上使用它,用于独立主节点和工作节点。
在您的情况下,我建议编写一个自定义启动脚本,该脚本将根据相应的SPARK_HOME env变量启动独立的Master和Worker。
start-slaves.sh(来源here)只会执行下列动作:

cd "${SPARK_HOME}" \; "${SPARK_HOME}/sbin/start-slave.sh" "spark://$SPARK_MASTER_HOST:$SPARK_MASTER_PORT"

所以没有太多的魔法在进行,但ssh到每个节点,并执行命令行。
我想我甚至会使用Ansible

zfciruhq

zfciruhq2#

你应该检查一下你的~/. bashr。你可以在下面看到我的bashrc:

export JAVA_HOME=/usr/local/java/jdk1.8.0_121
export JRE_HOME=$JAVA_HOME/jre
export SCALA_HOME=/usr/local/src/scala/scala-2.12.1
export SPARK_HOME=/usr/local/spark/2.1.0
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$SCALA_HOME/bin:$SPARK_HOME/bin:$SPARK_HOME/sbin

最后,您必须更新您的bashrc环境:

source ~/.bashrc
fhg3lkii

fhg3lkii3#

在我的例子中,我有2台Mac和1台PC/Linux机器作为工人。其中1台Mac也作为主人。
在Mac上,我已经在/Users/<user>/spark下安装了spark,并将我的$SPARK_HOME设置为这个路径。
在Linux机器(ubuntu)上,我已经在/home/<user>/spark下设置了spark目录。当在我的spark master机器(Mac中的一台)上运行start-all.sh时,会在Linux worker上导致一个错误:192.168.1.33: bash: line 1: cd: /Users/<user>/spark: No such file or directory 192.168.1.33: bash: line 1: /Users/<user>/spark/sbin/start-worker.sh: No such file or directory
为了解决路径问题,我模仿Mac,在Linux机器上创建了一个符号链接,将“/Users”目录指向“/home”目录。
cd /
sudo ln -s home Users
这可能不是最好的解决方案,但它意味着我不需要维护我自己的start-all.sh版本及其相关的下标。

相关问题