Hadoop启停问题
./sbin/stop-dfd.sh 无效
执行stop-dfs.sh后,会依次执行hadoop-daemons.sh > hadoop-daemon.sh脚本,然后定位到“no c o m m a n d t o s t o p ” 发 现 脚 本 会 在 command to stop”发现脚本会在 commandtostop”发现脚本会在HADOOP_PID_DIR目录里面查找hadoop- H A D O O P I D E N T S T R I N G − HADOOP_IDENT_STRING- HADOOPIDENTSTRING−command.pid文件, H A D O O P P I D D I R 目 录 默 认 是 / t m p 目 录 , HADOOP_PID_DIR目录默认是/tmp目录, HADOOPPIDDIR目录默认是/tmp目录,HADOOP_IDENT_STRING默认是启动Hadoop的用户名 U S E R , USER, USER,command是你要停止的节点类型,例如namenode、datanode或secondarynamenode。所以本例的pid文件名是:hadoop-hdfs-namenode.pid、hadoop-hdfs-secondarynamenode.pid、hadoop-hdfs-datanode.pid。
因为根据linux的tmpwatch,默认在30天内文件不被访问的情况下就会被清理,所以导致找不到上述的pid文件,因此无法停止namenodes、datanodes和secondary namenodes。
解决方案1
使用ps命令查找正在运行的namenodes、datanodes和secondary namenodes的pid
然后在/tmp目录创建对应的pid文件,pid文件名和内容如下图所示
重新执行stop-dfs.sh脚本,一切正常!
解决方案2
或者可以直接运行kill -9命令把对应的pid进程杀掉。重新启动
会自动在 /tmp 下创建pid文件
下次重新启动hdfs之前建议修改$HADOOP_PID_DIR目录,否则的话那些pid文件还是会被tmpwatch清理。
启动 ./sbin/start-dfs.sh
运行命令 jps