spark,hadoop,hbase集群无法停止的问题
来源:互联网 发布:记分牌算法 编辑:程序博客网 时间:2024/05/21 14:45
长时间运行集群之后,如何需要停止集群使用stop相关命令时常常会都提示no datanode,no namenode等等之类的信息,查看相关stop-all.sh stop-dfs.sh,stop-yarn.sh脚本,发现原理都是通过一个pid文件来停止集群的。这些进程的pid文件默认都是保存在系统的/tmp目录下面,系统每个一段时间就会清楚/tmp下面的内容,于是我ls /tmp看了一下,果然没有相关进程的pid文件了。才导致了stop-all.sh无法停止集群的原因。
如果强制kill -9杀进程的话会破坏集群,可以按照pid文件的命名规则重新在/tmp目录下面创建这些pid文件,在翻看了一堆sbin目录下的脚本之后,找到了它们的命名规则。
比如hadoop相关进程的pid文件命名规则为:pid=$HADOOP_PID_DIR/hadoop-$HADOOP_IDENT_STRING-$command.pid
yarn相关进程的pid文件规则:pid=$YARN_PID_DIR/yarn-$YARN_IDENT_STRING-$command.pid
默认情况下$HADOOP_PID_DIR和$YARN_PID_DIR都为/tmp,$HADOOP_IDENT_STRING和$YARN_IDENT_STRING都为当前系统登录的用户名,比如我的用户名为hadoop,$command为当前执行的命令
比如执行了一个 hadoop-daemon.sh stop namenode,这时候就会去找/tmp/hadoop-hadoop-namenode.pid文件拿到namenode进程的pid号,来停止namenode进程。
了解原理之后,于是我就开始手动创建这些文件,我首先jps把所有进程的pid都记录下来了,然后在/tmp目录按照命名规则创建好了这些进程的pid文件,然后再重新执行stop-all.sh命令,ok可以成功关闭集群了。
但这不是一个长久之计,因为下次pid文件还是保存在/tmp目录下,还是会出这个问题,所以要彻底解决这个问题,就是不使用默认的/tmp文件夹来存放pid文件。
按以下步骤:
1 在集群各个节点的/var目录下面创建一个文件夹: sudo mkdir -p /XXX/pids,(XXX指自己指定目录)记得更改这个文件夹的权限,chown -R hadoop:hadoop /var/hadoop,将这个目录及子目录的拥有者改为你的当前用户,我这是hadoop,不然执行start-all.sh的时候当前用户会没有权限创建pid文件
2 修改hadoop-env.sh 将原有修改为:export HADOOP_PID_DIR=/XXX/pids
3 修改yarn-env.sh 增加:export YARN_PID_DIR=/XXX/pids
4 修改hbase-env.sh ,放开原有注释:export HBASE_PID_DIR=/XXXp/pids
5 修改spark-env.sh,增加:export SPARK_PID_DIR=/XXX/pids
重新运行 start-all.sh,start-hbase.sh把hadoop集群和hbase集群启动起来,然后我们ls /XXX/pids查看一下pid文件是否生成在里面了,果然出现在了里面
hadoop-hadoop-secondarynamenode.pid yarn-hadoop-resourcemanager.pid
hbase-hadoop-regionserver.pid
然后我们再运行stop-hbase.sh和stop-all.sh命令来测试一下看看能不能正常停止hbase集群和hadoop集群,结果是肯定的。说明配置是有效的。
至此,这个问题已经完美的解决了。
最后注意一点就是,不仅仅是修改master的所有env文件,集群中的所有节点的这些文件都要修改!
如果强制kill -9杀进程的话会破坏集群,可以按照pid文件的命名规则重新在/tmp目录下面创建这些pid文件,在翻看了一堆sbin目录下的脚本之后,找到了它们的命名规则。
比如hadoop相关进程的pid文件命名规则为:pid=$HADOOP_PID_DIR/hadoop-$HADOOP_IDENT_STRING-$command.pid
yarn相关进程的pid文件规则:pid=$YARN_PID_DIR/yarn-$YARN_IDENT_STRING-$command.pid
默认情况下$HADOOP_PID_DIR和$YARN_PID_DIR都为/tmp,$HADOOP_IDENT_STRING和$YARN_IDENT_STRING都为当前系统登录的用户名,比如我的用户名为hadoop,$command为当前执行的命令
比如执行了一个 hadoop-daemon.sh stop namenode,这时候就会去找/tmp/hadoop-hadoop-namenode.pid文件拿到namenode进程的pid号,来停止namenode进程。
了解原理之后,于是我就开始手动创建这些文件,我首先jps把所有进程的pid都记录下来了,然后在/tmp目录按照命名规则创建好了这些进程的pid文件,然后再重新执行stop-all.sh命令,ok可以成功关闭集群了。
但这不是一个长久之计,因为下次pid文件还是保存在/tmp目录下,还是会出这个问题,所以要彻底解决这个问题,就是不使用默认的/tmp文件夹来存放pid文件。
按以下步骤:
1 在集群各个节点的/var目录下面创建一个文件夹: sudo mkdir -p /XXX/pids,(XXX指自己指定目录)记得更改这个文件夹的权限,chown -R hadoop:hadoop /var/hadoop,将这个目录及子目录的拥有者改为你的当前用户,我这是hadoop,不然执行start-all.sh的时候当前用户会没有权限创建pid文件
2 修改hadoop-env.sh 将原有修改为:export HADOOP_PID_DIR=/XXX/pids
3 修改yarn-env.sh 增加:export YARN_PID_DIR=/XXX/pids
4 修改hbase-env.sh ,放开原有注释:export HBASE_PID_DIR=/XXXp/pids
5 修改spark-env.sh,增加:export SPARK_PID_DIR=/XXX/pids
重新运行 start-all.sh,start-hbase.sh把hadoop集群和hbase集群启动起来,然后我们ls /XXX/pids查看一下pid文件是否生成在里面了,果然出现在了里面
master上pid文件
hadoop-hadoop-secondarynamenode.pid yarn-hadoop-resourcemanager.pid
slaves上pid:
hadoop-hadoop-datanode.pid yarn-hadoop-nodemanager.pid spark-hadoop-org.apache.spark.deploy.worker.Worker-1.pidhbase-hadoop-regionserver.pid
然后我们再运行stop-hbase.sh和stop-all.sh命令来测试一下看看能不能正常停止hbase集群和hadoop集群,结果是肯定的。说明配置是有效的。
至此,这个问题已经完美的解决了。
最后注意一点就是,不仅仅是修改master的所有env文件,集群中的所有节点的这些文件都要修改!
阅读全文
0 0
- spark,hadoop,hbase集群无法停止的问题
- 停止Hadoop或HBase集群的脚本
- hbase停止集群,pid不存在的问题
- 大数据集群遇到的问题(Hadoop、Spark、Hive、kafka、Hbase、Phoenix)
- Spark集群无法停止的原因分析和解决
- Spark集群无法停止的原因分析和解决
- hadoop、zookeeper、hbase、spark集群环境搭建
- hadoop、zookeeper、hbase、spark集群环境搭建
- hadoop、zookeeper、hbase、spark集群环境搭建
- Hadoop + hbase + Zookeeper + spark + scala 集群搭建
- Hadoop、HBase集群问题记录
- hadoop,hbase集群一些问题
- Hadoop+Hbase+Spark集群配置-Hbase HA安装
- Hadoop+Hbase+Spark集群配置-Spark HA安装
- Hadoop+Hbase+Spark集群配置—Hadoop HA安装
- Hadoop,HBase集群环境搭建的问题集锦(一)
- Hadoop,HBase集群环境搭建的问题集锦(二)
- Hadoop,HBase集群环境搭建的问题集锦(三)
- MicroSoft:面试题收集与解题思路
- Broadcast和BroadcastReciver的安全使用
- 给初学PLC编程的朋友几点建议
- 二叉树的建立和遍历
- IMEI、MEID、ICCID、UDID、IMSI
- spark,hadoop,hbase集群无法停止的问题
- C#网页分页标签生成
- RedLock
- 程序员:天天加班,但是加班费呢?
- 剑指offer题解C++【25】复杂链表的复制
- 设置cell分割线的高度
- 在Ubuntu 12.10下安装 jdk-7u10-linux-x64.tar.gz
- 优雅的处理Android崩溃(一)
- <Win32> Process32First 返回FALSE