1

我已经在 2 台机器上安装了 spark 2.1.1,但在不同的相对位置,即在一台机器上,我安装在 NTFS 驱动器的某个位置,而在另一台机器上,我将它安装在 ext4 驱动器上。我正在尝试通过在一台机器上拥有 1 个主服务器和 1 个从属服务器以及在另一台机器上拥有 1 个从属服务器,以具有 2 个从属设备和一个主控设备的独立模式启动一个集群。

当我尝试通过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文件中设置了正确的。下面是我的机文件(在 1 台主机 + 1 台从机中)

localhost
192.168.1.154

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

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

4

2 回答 2

3

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 和 worker。

在您的情况下,我建议编写一个自定义启动脚本,该脚本将根据各自的SPARK_HOME环境变量启动独立的 Master 和 worker。

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

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

所以没有太多的魔法发生,而是ssh到每个节点并执行命令行。


我什至会为此使用Ansible

于 2017-05-21T10:42:32.657 回答
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
于 2017-05-22T06:23:10.030 回答