1.问题以及原因

采坑重要,Linux在/tmp目录会定期删除一些文件和文件夹, 如30天周期,当然hadoop进程pid文件存放/tmp目录下时,是有被删除风险,生产中出现过这种情况,重启hadoop,jps进程未减少,但是新的和旧的进程混在了一起,造成了紊乱。

2.模拟pid文件被删除情况

  1. ll /tmp/ #默认在/tmp下,可知存在hdfs进程的三个pid存放文件,cat可得带进程pid
  2. rm -rf hadoop-hadoop-datanode.pid #删除hdfs datanode进程的存放文件此时一切是正常的
  3. jps
  4. hdfs dfs -ls/ #正常使用
  5. ~/app/hadoop-2.6.0-cdh5.7.0/sbin/stop-dfs.sh #此时去关闭hdfs会显示无datanode进程
  6. ~/app/hadoop-2.6.0-cdh5.7.0/sbin/start-dfs.sh #我们再启动hdfs,启动时控制台是没有问题的
  7. 但是但是,此时新的和旧的进程混在了一起,造成了紊乱,查看datanode日志启是报错的。这是jps没问题三个进程都在,但是实际hdfs是不可用的。问题较严重,隐藏较深。

image.gif

3、解决方法:修改hadoop pid文件存储位置

  1. mkdir /data/tmp #创建pid文件存储目录
  2. chmod -R 777 /data/tmp
  3. vim ~/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop/hadoop-env.sh #编辑,修改原有的为export HADOOP_PID_DIR=/data/tmp
  4. 重启hadoop

image.gif