2.jps命令的真相
jps最主要的功能使查看java接口的进程号,它只用于列出Java的进程
2.1位置哪里的
[hadoop@10-9-140-90 hadoop-2.6.0-cdh5.7.0]$ which jps
/usr/java/jdk1.8.0_45/bin/jps
2.2对应的进程的标识文件在哪 /tmp/hsperfdata_进程用户名称
因为在这里是jps是以hadoop用户启动的,所以jps进程的标识文件是:hsperfdata_hadoop
后面可以的进程号用于jps的时候显示出来。
2.3 jps查看结果
root用户看所有用户的jps结果,但是有些信息是正常信息,正常进程,有些信息是不可用的(process information unavailable),这些信息是真的不可用(假进程),还是假的不可用(正常进程)。真假判断的区别是什么:ps -ef|grep pid看一下是否存在。不要上来就把它给kill掉,因为你kill的可能是正常的进程。所以kill之前需要ps -ef判断一下是否存在。
普通用户只能看自己的jps结果
2.4 process information unavailable 情况
真假判断:
jps查看的不一定准确
ps -ef|grep namenode 真正判断进程是否可用
①jps找到进程号
②ps -ef|grep pid 查看是否存在
hadoop用户下:jps
[hadoop@10-9-140-90 hadoop-2.6.0-cdh5.7.0]$ jps
25027 Jps
24757 DataNode
24917 SecondaryNameNode
24635 NameNode
[hadoop@10-9-140-90 hadoop-2.6.0-cdh5.7.0]$
root用户下jps:
[root@10-9-140-90 ~]# jps
25041 Jps
24757 -- process information unavailable
24917 -- process information unavailable
24635 -- process information unavailable
[root@10-9-140-90 ~]#
生产环境上:
hadoop不同的组件针对不同的用户:比如hdfs组件是hdfs用户,hbase组件是hbase用户
当我们部署某个脚本的时候,是用root用户或sudo权限的用户去获取这些组件的进程,但是你去jps获取的时候,肯定都是process information unavailable(进程信息不可用)这种值,这个时候不能直接kill掉,然后启动相关的进程,需要先看一下这些不可用是真的还是假的。但是有时候linux会自动把它给kill掉。所以可能需要每隔1分钟或几小时或者其他定期检查一下进程是否正常。
kill有三种方式:一是认为kill,二是进程在Linux看来是耗内存最大的 自动给你kill,还一个
[hadoop@10-9-140-90 hsperfdata_hadoop]$ ll
total 96
-rw------- 1 hadoop hadoop 32768 Feb 24 15:26 24635
-rw------- 1 hadoop hadoop 32768 Feb 24 15:26 24757
-rw------- 1 hadoop hadoop 32768 Feb 24 15:26 24917
[hadoop@10-9-140-90 tmp]$ rm -rf hsperfdata_hadoop 把这个文件夹删除(删除之前要确认里面有没有其它的不能被删的)
[hadoop@10-9-140-90 tmp]$ jps hadoop用户jps 没有三个进程
25863 Jps
[root@10-9-140-90 ~]# jps root用户jps 也没有三个进程
25875 Jps
但是 sbin/start-dfs.sh再启动的时候,它说三个进程还没有停止掉,需要先把它们停止掉。
可以ps -ef|grep namenode/datanode/secondarynamenode 找到相应的进程号,把它们kill掉。
然后再sbin/start-dfs.sh就可以了,而且在tmp/目录又能看到hsperfdata_hadoop 这个文件夹了。
3.pid文件 集群进程启动和停止要的文件 (默认是在tmp目录下)
进入/tmp/目录下有下面三个pid文件,这三个文件是hadoop集群进程启动和停止需要的。如果删除掉了,启动和停止的时候会有问题。
-rw-rw-r-- 1 hadoop hadoop 6 Feb 24 15:07 hadoop-hadoop-datanode.pid
-rw-rw-r-- 1 hadoop hadoop 6 Feb 24 15:07 hadoop-hadoop-namenode.pid
-rw-rw-r-- 1 hadoop hadoop 6 Feb 24 15:07 hadoop-hadoop-secondarynamenode.pid
需要注意的是:Linux会定期删除tmp目录下一些文件和文件夹 30天周期
生产上有两种方式可以处理这种情况:
①在其它地方创建一个目录,修改目录权限为777权限,然后修改/home/hadoop/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop下的hadoop-env.sh 文件,把地址修改成你创建的目录地址即可。
mkdir /data/tmp
chmod -R 777 /data/tmp
export HADOOP_PID_DIR=/data/tmp
②可以把上面三个pid文件加入到tmp目录删除规则里面,每次删除tmp目录下一些文件的时候,不删除你加的这些文件。
那么为什么会用到pid文件?脚本里面会用到
[hadoop@10-9-140-90 sbin]$ cat hadoop-daemon.sh (举例)
查看这个脚本可以发现里面有需要pid的地方。