如何使用 start-all.sh 启动使用不同 SPARK_HOME(与 Master)不同的独立 Worker?
How to use start-all.sh to start standalone Worker that uses different SPARK_HOME (than Master)?
我已经在 2 台机器上安装了 spark 2.1.1,但是在 不同的相对位置 即在一台机器上我安装了 NTFS 驱动器的某个地方,而在另一台机器上我安装了它在 ext4 驱动器上。我试图通过在 1 台机器上有 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
我在相应的 bashrc
文件中设置了正确的 SPARK_HOME
。下面是我的 slave 文件(在 1 master + 1 slave 机器中)
localhost
192.168.1.154
我可以通过ssh远程登录到1从机。我能够 运行 在每台机器上单独地启动 Spark 集群。
据我了解,当我尝试通过 start-all.sh
脚本从主机远程启动从机时,它试图转到主节点上安装 spark 的位置,但在从机节点上,spark安装在不同的位置,它会失败。谁能告诉我如何解决这个问题?
在start-all.sh中您可以找到以下内容:
if [ -z "${SPARK_HOME}" ]; then
export SPARK_HOME="$(cd "`dirname "[=10=]"`"/..; 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 vars 启动独立的 Master 和 worker。
start-slaves.sh
(来源 here)仅执行以下操作:
cd "${SPARK_HOME}" \; "${SPARK_HOME}/sbin/start-slave.sh" "spark://$SPARK_MASTER_HOST:$SPARK_MASTER_PORT"
所以没有太多魔法,但是 ssh
到每个节点并执行命令行。
我认为我什至会为此使用Ansible。
你应该检查你的 ~/.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
我已经在 2 台机器上安装了 spark 2.1.1,但是在 不同的相对位置 即在一台机器上我安装了 NTFS 驱动器的某个地方,而在另一台机器上我安装了它在 ext4 驱动器上。我试图通过在 1 台机器上有 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
我在相应的 bashrc
文件中设置了正确的 SPARK_HOME
。下面是我的 slave 文件(在 1 master + 1 slave 机器中)
localhost
192.168.1.154
我可以通过ssh远程登录到1从机。我能够 运行 在每台机器上单独地启动 Spark 集群。
据我了解,当我尝试通过 start-all.sh
脚本从主机远程启动从机时,它试图转到主节点上安装 spark 的位置,但在从机节点上,spark安装在不同的位置,它会失败。谁能告诉我如何解决这个问题?
在start-all.sh中您可以找到以下内容:
if [ -z "${SPARK_HOME}" ]; then
export SPARK_HOME="$(cd "`dirname "[=10=]"`"/..; 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 vars 启动独立的 Master 和 worker。
start-slaves.sh
(来源 here)仅执行以下操作:
cd "${SPARK_HOME}" \; "${SPARK_HOME}/sbin/start-slave.sh" "spark://$SPARK_MASTER_HOST:$SPARK_MASTER_PORT"
所以没有太多魔法,但是 ssh
到每个节点并执行命令行。
我认为我什至会为此使用Ansible。
你应该检查你的 ~/.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