阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Spark集群无法停止的原因分析和解决

216次阅读
没有评论

共计 2690 个字符,预计需要花费 7 分钟才能阅读完成。

今天想停止 spark 集群,发现执行 stop-all.sh 的时候 spark 的相关进程都无法停止。提示:

no org.apache.spark.deploy.master.Master to stop

no org.apache.spark.deploy.worker.Worker to stop

上网查了一些资料,再翻看了一下 stop-all.sh,stop-master.sh,stop-slaves.sh,spark-daemon.sh,spark-daemons.sh 等脚本,发现很有可能是由于 $SPARK_PID_DIR 的一个环境变量导致。

1. 原因分析

我搭建的是 Hadoop2.6.0+Spark1.1.0+Yarn 的集群。Spark、Hadoop 和 Yarn 的停止,都是通过一些 xxx.pid 文件来操作的。以 spark 的 stop-master 为例,其中停止语句如下:

Spark 集群无法停止的原因分析和解决

再查看 spark-daemon.sh 中的操作:

Spark 集群无法停止的原因分析和解决

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

Spark 集群无法停止的原因分析和解决

系统每隔一段时间就会清除 /tmp 目录下的内容。到 /tmp 下查看一下,果然没有相关进程的 pid 文件了。这才导致了 stop-all.sh 无法停止集群。

2. 停止 Spark 集群

担心使用 kill 强制停止 spark 相关进程会破坏集群,因此考虑回复 /tmp 下的 pid 文件,再使用 stop-all.sh 来停止集群。

分析 spark-daemon.sh 脚本,看到 pid 文件命名规则如下:

pid=$SPARK_PID_DIR/spark-$SPARK_IDENT_STRING-$command-$instance.pid

其中

$SPARK_PID_DIR 是 /tmp

$SPARK_IDENT_STRING 是登录用户 $USER,我的集群中用户名是 cdahdp

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

org.apache.spark.deploy.master.Master

org.apache.spark.deploy.worker.Worker

$instance 也是调用 spark-daemon.sh 时的参数,我的集群中是 1

因此 pid 文件名如下:

/tmp/spark-cdahdp-org.apache.spark.deploy.master.Master-1.pid

/tmp/spark-cdahdp-org.apache.spark.deploy.worker.Worker-1.pid

通过 jps 查看相关进程的 pid:

Spark 集群无法停止的原因分析和解决 Spark 集群无法停止的原因分析和解决

将 pid 保存到对应的 pid 文件即可。

之后调用 spark 的 stop-all.sh,即可正常停止 spark 集群。

3. 停止 Hadoop 和 Yarn 集群

停止 hadoop 和 yarn 集群时,调用 stop-all.sh,也会出现这个现象。其中 NameNode,SecondaryNameNode,DataNode,NodeManager,ResourceManager 等就是 hadoop 和 yarn 的相关进程,stop 时由于找不到 pid 导致无法停止。分析方法同 spark,对应 pid 文件名不同而已。

Hadoop 的 pid 命名规则:

pid=$HADOOP_PID_DIR/hadoop-$HADOOP_IDENT_STRING-$command.pid

pid 文件名:

/tmp/hadoop-cdahdp-namenode.pid

/tmp/hadoop-cdahdp-secondarynamenode.pid

/tmp/hadoop-cdahdp-datanode.pid

Yarn 的 pid 命名规则:

pid=$YARN_PID_DIR/yarn-$YANR_IDENT_STRING-$command.pid

pid 文件名:

/tmp/yarn-cdahdp-resourcemanager.pid

/tmp/yarn-cdahdp-nodemanager.pid

恢复这些 pid 文件即可使用 stop-all.sh 停止 hadoop 和 yarn 进程。

Spark 集群无法停止的原因分析和解决

4. 根治方案

要根治这个问题,只需要在集群所有节点都设置 $SPARK_PID_DIR,$HADOOP_PID_DIR 和 $YARN_PID_DIR 即可。

修改hadoop-env.sh,增加:

export HADOOP_PID_DIR=/home/ap/cdahdp/app/pids

修改yarn-env.sh,增加:

export YARN_PID_DIR=/home/ap/cdahdp/app/pids

修改spark-env.sh,增加:

export SPARK_PID_DIR=/home/ap/cdahdp/app/pids

启动集群以后,查看 /home/ap/cdahdp/app/pids 目录,如下:

Spark 集群无法停止的原因分析和解决

————————————– 分割线 ————————————–

Spark1.0.0 部署指南 http://www.linuxidc.com/Linux/2014-07/104304.htm

CentOS 6.2(64 位)下安装 Spark0.8.0 详细记录 http://www.linuxidc.com/Linux/2014-06/102583.htm

Spark 简介及其在 Ubuntu 下的安装使用 http://www.linuxidc.com/Linux/2013-08/88606.htm

安装 Spark 集群(在 CentOS 上) http://www.linuxidc.com/Linux/2013-08/88599.htm

Hadoop vs Spark 性能对比 http://www.linuxidc.com/Linux/2013-08/88597.htm

Spark 安装与学习 http://www.linuxidc.com/Linux/2013-08/88596.htm

Spark 并行计算模型 http://www.linuxidc.com/Linux/2012-12/76490.htm

————————————– 分割线 ————————————–

Spark 的详细介绍:请点这里
Spark 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-08/120938.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计2690字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中