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

时间:2017-05-20 21:52:44

标签: apache-spark apache-spark-standalone

我在两台机器上安装了spark 2.1.1,但是在不同的相对位置,即在一台机器上我安装在NTFS驱动器上的某个地方,另一台机器上我已经安装在ext4驱动器上。我试图在独立模式中启动一个群集,其中包含2个从属和一个主服务器,在一台计算机上有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

我已在相应的SPARK_HOME个文件中设置了适当的bashrc。下面是我的 slave 文件(在1 master + 1 slave机器中)

localhost
192.168.1.154

我可以通过ssh远程登录到1个从机。我能够在每台机器上单独运行Spark集群。

我理解当我尝试通过start-all.sh脚本从我的主机远程启动一个从机时,它试图转到主节点上安装spark的位置,但是在从节点上安装了spark在不同的位置,它失败了。任何人都可以告诉我如何纠正这个问题?

2 个答案:

答案 0 :(得分:2)

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,并在群集中的所有节点上使用它,用于独立的主服务器和工作服务。

在您的情况下,我建议您编写一个自定义启动脚本,该脚本将启动独立的Master和各个SPARK_HOME env vars的工作人员。

start-slaves.sh(来源here)仅执行以下操作:

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

所以没有太大的魔力,但是ssh到每个节点并执行命令行。

我甚至会使用Ansible

答案 1 :(得分:0)

你应该检查你的〜/ .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