Spark sbin/ 文件夹中的 stop-all.sh 没有停止所有从属节点

stop-all.sh in Spark sbin/ folder is not stopping all slave nodes

您好,我有一个独立模式的 Spark 集群,即我的笔记本电脑中有一个 Spark-master 进程和三个 Spark-slave 进程 运行ning(Spark 集群在同一台机器上)。

启动master和slave只是为了运行Spark_Folder/sbin/start-master.sh中的脚本,Spark_Folder/sbin/stop-master.sh.

然而,当我运行 Spark_Folder/sbin/stop-all.sh时,它只停止了一个master和一个salves,因为我有三个slave 运行ning,在运行ning stop-all.sh我还有两个slave运行ning.

我深入研究了脚本 "stop-slaves.sh",发现如下:

if [ "$SPARK_WORKER_INSTANCES" = "" ]; then
  "$sbin"/spark-daemons.sh stop org.apache.spark.deploy.worker.Worker 1
else
  for ((i=0; i<$SPARK_WORKER_INSTANCES; i++)); do
    "$sbin"/spark-daemons.sh stop org.apache.spark.deploy.worker.Worker $(( $i + 1 ))
  done
fi

似乎该脚本正在根据 "SPARK_WORKER_INSTANCES" 号停止。但是,如果我使用非数字名称启动一个奴隶怎么办?

有什么想法可以一键关闭整个spark集群吗? (我知道 运行 "pkill -f spark*" 会起作用)

非常感谢。

我刚想出解决办法:

在“/usr/lib/spark/conf/spark-env.sh”中,添加一个额外的参数“SPARK_WORKER_INSTANCES=3”(或您的从属实例的数量),然后 运行 "/usr/lib/spark/sbin/stop-all.sh" 并且所有实例停止。

但是,"stop-all.sh" 仅适用于您开始使用数字的奴隶,例如:

/usr/lib/spark/sbin/start-slave.sh 1 spark://master-address:7077
/usr/lib/spark/sbin/start-slave.sh 2 spark://master-address:7077
/usr/lib/spark/sbin/start-slave.sh 3 spark://master-address:7077

如果您使用任意名称启动奴隶,那么 "stop-all.sh" 将不起作用,例如:

/usr/lib/spark/sbin/start-slave.sh myWorer1 spark://master-address:7077
/usr/lib/spark/sbin/start-slave.sh myWorer2 spark://master-address:7077
/usr/lib/spark/sbin/start-slave.sh myWorer3 spark://master-address:7077

在终端中使用jps命令

输出会像这样

5417 NameNode
8480 Jps
13311 Elasticsearch
5602 DataNode
5134 Worker
5849 SecondaryNameNode
4905 Master

杀掉master和worker的进程

像这样

kill 5134
kill 4905

Master 和 Slave 都将停止。

如果这些再次重新启动,这意味着您已经关闭了系统并停止了主从...您需要重新启动系统。

我遇到了类似的问题。在我只需要 ssh 到 8 台机器,并在所有相关进程上使用 kill -9。我用了 ps -ef | grep spark 查找进程 ID。乏味,但有效。

kill -9 $(jps -l | grep spark | awk -F ' ' '{print }')