解决Spark集群无法停止

执行stop-all.sh时,出现报错:no org.apache.spark.deploy.master.Master to stop,no org.apache.spark.deploy.worker.Worker to stop

 

原因:

Spark的停止,是通过一些.pid文件来操作的。

查看spark-daemon.sh文件,其中一行:$SPARK_PID_DIR  The pid files are strored .  /tmp by default .

$SPARK_PID_DIR存放的pid文件中,就是要停止的进程的pid,其中$SPARK_PID_DIR默认是在系统的/tmp目录。

系统每隔一段时间就会清除/tmp目录下的内容。到/tmp下查看,如果没有Spark相关.pid文件,这就是导致Spark集群无法停止的原因。

 

解决:

查看spark-daemon.sh文件中.pid文件命名规则,其中一行:pid=$SPARK_PID_DIR/spark-$SPARK_IDENT_STRING-$command-$instance.pid

其中

$SPARK_PID_DIR是/tmp

$SPARK_IDENT_STRING是登录用户$USER,我的用户名是root

$command是调用spark-daemon.sh时的参数,有两个:

org.apache.spark.deploy.master.Master

org.apache.spark.deploy.worker.Worker

$instance也是调用spark-daemon.sh时的参数

 

因此pid文件名如下:

spark-cdahdp-org.apache.spark.deploy.master.Master-1.pid(在master机器中/tmp下创建)

spark-cdahdp-org.apache.spark.deploy.worker.Worker-1.pid(在每一台worker机器中/tmp下创建,如果一台机器开启了多个worker,就创建多个.pid文件,文件名最后的数字依次递增)

通过jps查看所有机器相关进程(master、worker)的pid数字。编辑所有.pid文件,把pid数字一一对应写入.pid文件,最后每个.pid文件中都是一个进程号。

然后执行spark的stop-all.sh,即可正常停止spark集群。

 

彻底解决:

在集群所有节点编辑spark-env.sh,增加一行:export SPARK_PID_DIR=/home/ap/root/app/pids

删除之前自己创建的所有.pid文件。

然后可以启动spark集群了。

 

posted @ 2018-01-18 12:24  右介  阅读(2562)  评论(0编辑  收藏  举报