我正在使用 Supervisor 运行 dockerized hadoop cdh 4.6.0 。我已经打开了 docker 容器并尝试了以下两个命令。很困惑。
jps
103 -- process information unavailable
291 -- process information unavailable
107 -- process information unavailable
449 Jps
我读到进程信息不可用意味着进程是僵尸。但我检查了在同一个容器中使用的这些进程的状态
root@1389ca416997:/# /etc/init.d/hadoop-hdfs-namenode status
* Hadoop namenode is running
root@1389ca416997:/# /etc/init.d/hadoop-hdfs-secondarynamenode status
* Hadoop secondarynamenode is running
root@1389ca416997:/# /etc/init.d/hadoop-hdfs-datanode status
* Hadoop datanode is running
是什么导致了这种歧义?还是我错了?
答案1
jps
使用文件来/tmp/hsperfdata_<username>
确定 vmid 和信息。但有时文件已经过时(无论出于何种原因)。然后,jps
可能会开始报告过时的 VMID。
答案2
我想您已经解决了这个问题,但我在这里写给其他可能仍在寻找答案的人。问题可能与此有关这里有java错误
解决方法是为特定进程文件创建到 jps 期望找到的格式的文件的软链接。例如:ln -s /tmp/hsperfdata_hdfs/553 /tmp/hsperfdata_553
或者,您可以尝试降级您的 java 版本。对我来说,这一直工作到 1.7.0_65 - 也许它也适用于更高的版本,但我开始遇到 1.7.0_79 的问题
另外,如果您不介意仅使用 root 用户进行检查,则可以使用 /tmp/hsperfdata_user 文件所有者的用户运行 jps 。例如:sudo -u hdfs jps
和sudo -u mapred jps
将分别显示 /tmp/hsperfdata_hdfs/ 和 /tmp/hsperfdata_mapred/ 运行的进程。