hadoop关不掉namenode的解决办法

2023-11-04

原文地址:https://blog.csdn.net/arrow8071/article/details/51365843

问题描述
部门的Hadoop集群运行有一个多月了,今天需要做点调整,但是突然发现Hadoop不能正常关闭!

Hadoop版本:2.6.0

具体情况如下:

[root@master ~]# stop-dfs.sh
Stopping namenodes on [master]
master: no namenode to stop
slave2: no datanode to stop
slave1: no datanode to stop
...

问题原因
执行jps,发现namenode,datanode等进程都正常运行着。纳了闷!

谁报的错就找谁吧,于是就开始阅读hadoop-daemon.sh脚本文件,结果找出问题原因了。

首先找到报错的位置,在文件的最后几行:

if [ -f $pid ]; then
      TARGET_PID=`cat $pid`
      if kill -0 $TARGET_PID > /dev/null 2>&1; then
        echo stopping $command
        kill $TARGET_PID
        sleep $HADOOP_STOP_TIMEOUT
        if kill -0 $TARGET_PID > /dev/null 2>&1; then
          echo "$command did not stop gracefully after $HADOOP_STOP_TIMEOUT seconds: killing with kill -9"
          kill -9 $TARGET_PID
        fi
      else
        echo no $command to stop
      fi
      rm -f $pid
    else
      echo no $command to stop
    fi

代码很多,我们只看我们关心的部分:

if [ -f $pid ]; then
     ....#省略n多行
    else
      echo no $command to stop
 fi

这样就很明显了,如果pid文件不存在就会打印:no xxx to stop

那么pid是什么文件,为什么会不存在,找到pid变量的声明语句,在脚本文件的第107行:

pid=$HADOOP_PID_DIR/hadoop-$HADOOP_IDENT_STRING-$command.pid #第107行

接着再找HADOOP_PID_DIR变量的声明部分:

首先在脚本注释部分找了很关键的一句话:

#   HADOOP_PID_DIR   The pid files are stored. /tmp by default.

我们知道了,HADOOP_PID_DIR 变量保存的是pid文件的存储路径。默认存储在/tmp目录中,代码如下:

if [ "$HADOOP_PID_DIR" = "" ]; then   //97~99行
  HADOOP_PID_DIR=/tmp
fi

那么这个pid文件是啥呢。Hadoop启动后,会把进程的PID号存储在一个文件中,这样执行stop-dfs脚本时就可以按照进程PID去关闭进程了。

现在问题原因很明确了,就是/tmp目录下的hadoop-*.pid的文件找不到了。

解决问题

那就看看/tmp目录下还有啥:

[root@slave1 ~]# ll /tmp/
srwxr-x--- 1 root root    0 Mar 26 13:39 Aegis-<Guid(5A2C30A2-A87D-490A-9281-6765EDAD7CBA)>
drwxr-xr-x 2 root root 4096 Apr 10 13:55 hsperfdata_root
srwxr-x--- 1 root root    0 Mar 26 13:39 qtsingleapp-aegisG-46d2-0
srwxrwxrwx 1 root root    0 Mar 26 13:39 qtsingleapp-aegiss-a5d2-0

额,除了我们需要的,其他啥都有!

我们知道/tmp是临时目录,系统会定时清理该目录中的文件。显然把pid文件放在这里是不靠谱的,pid文件长时间不被访问,早被清理了!

既然Hadoop不知道需要关闭哪些进程了,那我们只能手动关闭了!

先用ps -ef查看namenode\datanode等进程的PID,然后用kill -9干掉即可!

重启Hadoop后再看看/tmp目录的变化,多出了下面几个文件:

[root@master ~]# ll /tmp
-rw-r--r-- 1 root root    6 Apr 10 13:39 hadoop-root-namenode.pid-rw-r--r-- 1 root root    6 Apr 10 13:39 hadoop-root-secondarynamenode.pid-rw-r--r-- 1 root root    6 Apr 10 13:55 yarn-root-resourcemanager.pid

drwxr-xr-x 4 root root 4096 Apr 10 14:52 Jetty_0_0_0_0_50070_hdfs____w2cu08
drwxr-xr-x 4 root root 4096 Apr 10 14:52 Jetty_0_0_0_0_50090_secondary____y6aanv
drwxr-xr-x 5 root root 4096 Apr 10 15:02 Jetty_master_8088_cluster____i4ls4w

前三个文件是存放PID的文件,后三个Jetty_xxx格式的目录是Hadoop的web应用的临时目录,不是我们关心的。

打开一个pid文件看看:

[root@master tmp]# cat hadoop-root-namenode.pid32169

很简单,就保存了namenode进程的PID,再关闭namenode进程时就要从这个文件中读取PID。

到这里问题已经愉快的解决了!

但是,明知道pid文件放这里不安全,还不修改一下就显得我太懒了!

修改pid文件存放目录,只需要在hadoop-daemon.sh脚本中添加一行声明即可:

HADOOP_PID_DIR=/root/hadoop/pid  #第25行

记住要先关闭Hadoop再修改,不然你修改完又无法关闭了!同样的道理,你还需要修改yarn-daemon.sh

YARN_PID_DIR=/root/hadoop/pid

然后执行start-dfs.sh \ start-yarn.sh 启动Hadoop。再去/root/hadoop/pid目录下看看:

[root@master pid]# ll-rw-r--r-- 1 root root 5 Apr 10 14:52 hadoop-root-namenode.pid-rw-r--r-- 1 root root 5 Apr 10 14:52 hadoop-root-secondarynamenode.pid-rw-r--r-- 1 root root 5 Apr 10 15:02 yarn-root-resourcemanager.pid

好了,从此再也不用担心出现no xxx to stop的警告了!


/tmp目录的清理策略

除了更换pid文件的保存路径外,我不由会想起另外一种解决思路,不让操作系统删除保存在/tmp目录下的pid文件不就可以了嘛!好的,那我们就来看看操作系统是怎么清理/tmp目录的。

遇到这个问题之前,我也没关系过/tmp目录,度娘一下,得到答案。

我们先来看一个重要的命令:

tmpwatch

tmpwatch指令可删除不必要的暂存文件,你可以设置文件超期时间,单位以小时计算。

常用参数:
-m 或–mtime 根据文件被更改时间-c 或–ctime 根据文件更改状态时间-M 或–dirtime 根据文件夹被更改时间-x 或–exclude=path 排除某路径-X 或–exclude-pattern=pattern 排除某规则下的路径

/tmp作为临时文件夹,系统默认每天清理一次该目录。系统通过定时任务每天会执行一次/etc/cron.daily/tmpwatch这个脚本。其原理就是利用tmpwatch指令,设置清理策略。我们来看一下这个脚本内容:

/etc/cron.daily/tmpwatch
#! /bin/sh
flags=-umc
/usr/sbin/tmpwatch "$flags" -x /tmp/.X11-unix -x /tmp/.XIM-unix \
        -x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix \
        -X '/tmp/hsperfdata_*' 10d /tmp
/usr/sbin/tmpwatch "$flags" 30d /var/tmp
for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do
    if [ -d "$d" ]; then
        /usr/sbin/tmpwatch "$flags" -f 30d "$d"
    fidone

代码的4~6行是一条语句,设置/tmp目录的清理策略. -x或-X是用来排除不清理的文件或目录,10d表示会删除最近10天没有被访问的文件(有的系统可能是240 ,表示240小时,也是10天)。

好吧 ,10天不用就给删除了,Hadoop集群运行几十天了,当然也就找不到pid文件了。

你有注意第6行代码中,被排除的文件吗 ?/tmp/hsperfdata_*,我们在上面解决问题时,第一次查看/tmp目录就有一个匹配此模式的文件:hsperfdata_root 。

那么,想不让系统删除pid文件,比着榴莲画个瓢就行了。在tmpwatch脚本中增加一个排除条件即可:

-X '/tmp/*.pid'

不过,既然是临时目录,重要的文件就不要放这了,还是推荐第一种解决方式!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

hadoop关不掉namenode的解决办法 的相关文章

随机推荐

  • 单点登录的简单应用

    单点登录 single sign on 解决了分布式下用户登录的信息管理问题 可以自行增强安全策略 并且登录的跨域也不会再成为问题 业务流程 创建两个不同的模块 一个作为客户端 一个作为登陆服务器 都需要引入redis 对于客户端代码如下
  • [java] Map循环遍历的5种方法实现

    java Map循环遍历的5种方法实现 文章目录 一 方法一 推荐 二 方法二 推荐 三 方法三 四 方法四 五 方法五 总结 一 方法一 推荐 推荐使用此方法效率比较高 Map
  • Markdown 技能树(9):表格

    Markdown 技能树 9 表格 在 Markdown 中创建表格的语法要求如下 第一行包含表头 并用 竖线 分隔 第二行将标题与单元格分开 并且必须包含三个或更多破折号 第三行以及随后的任何行均包含单元格值 需要注意的是 不能在 Mar
  • xcode 第三方库 Incompatible block pointer types sending

    Incompatible block pointer types sending void PINMemoryCache strong NSString strong strong id to parameter of type PINCa
  • AtCoder Beginner Contest 212 D - Querying Multiset (优先队列+思维)

    链接 题意 三种操作 向队列中放入一个x 将队列中的数都 x 拿出队列中最小的数 并输出 分析 首先我们知道本题的难点在于维护每次给队列中的数 x因为队列中的数加入的顺序不一样 所以第2种对队列中的贡献有的多有的少 我说的不太清楚 谨慎理解
  • 3步排查,3步优化,探针性能损耗直降44%

    应用接探针除了安全问题 最担心的就是占用系统性能影响业务正常运转 今天分享一个实际案例告诉大家如何来降低探针的性能损耗 下表为某用户的2条核心链路在200并发压测下的性能数据对比 可以看见在接入探针后性能损耗居高不下 3步快速排查 1 对比
  • iOS内购 - 服务端票据验证及漏单引发的思考

    因业务需要实现了APP内购处理 但在过程中出现了部分不可控的因素 导致部分用户反映有充值不成并漏单的情况 仔细考虑了几个付费安全上的问题 凡是涉及到付费的问题都很敏感 任何一方出现损失都是不能接受的 所以在这里整理一些支付安全的要点分享一下
  • 从占领(工商)行业开始:国产中间件杀出血路

    导语 近日 辽宁全省工商管理系统的中间件平台花落金蝶中间件 继在广东省工商系统中获得成功后金蝶中间件在工商行业再次取得重要进展 成熟产品成熟应用 国产中间件渐成大器 在电子政务市场不断突破 国庆长假结束后的第一天 10月8日 辽宁省鞍山市工
  • DY直播运营(持续更新)

    前言 首先感谢 佳灵MM和江北帅哥 的教导 才有了作者的这篇笔记 毕业后做计算机实习工作 发现实际工作待遇和付出与理想不符之后 几经思考也受到了杭州电商的影响决心转行 机缘巧合下 在两位老师的课堂上听了半天课 收益很多 之后打算去全身心学习
  • PCI-E接口的学习

    一 pci e接口的概念 PCI E全称PCI Express peripheral component interconnect express 外部设备互连总线接口 由intel提出并推广 所连接的设备分配独享通道带宽 不共享总线带宽
  • 梯度下降法的三种解释(BGD,SGD,MBGD).

    机器学习里面 梯度下降法可以说是随处可见 虽然它不是什么高大上的机器学习算法 但是它却是用来解决机器学习算法的良药 我们经常会用到梯度下降法来对机器学习算法进行训练 在很多介绍梯度下降的书籍里 我们看到这样的几个英文单词缩写 BGD SGD
  • 互联网JAVA面试常问问题(一)

    一 为什么要创建线程池 线程是稀缺资源 使用线程池可以减少创建和销毁线程的次数 每个工作线程都可以重复使用 可以根据系统的承受能力 调整线程池中工作线程的数量 防止因为消耗过多内存导致服务器崩溃 二 创建线程池参数有哪些及其含义 publi
  • angular4点击事件监听_事件与接口

    首先来讲一下接口 接口的格式是 interface public interface 接口名 接口中有几点注意事项值得特别提醒 1 接口中不能定义变量 2 接口中的方法没有方法体 3 接口中不能实例化对象 4 类的接口可以实现多个 怎么实现
  • 小组活动学习

    0区别问题类型 问题是常规问题还是非常规问题 常规 1 理解问题需求2 理解相关概念3 搜索intenet book ask4 测试 实践 非常规1理解问题 未知 已知 条件2 拟定方案3执行方案4 回顾 警惕 需求不明朗就行动 思绪紊乱
  • C++Primer第五版习题答案(三)

    第三章 字符串 向量和数组 3 2 3 4 3 5 3 6 3 20 3 22 3 23 3 24 3 31 3 32 3 35 3 36 3 39 3 40 3 41 3 42 对于P115中int p 4 ia 为什么不是int p 3
  • Richer Convolutional Feature for Edge Detection

    Richer Convolutional Feature for Edge Detection 文章链接为Richer Convolutional Feature for Edge Detection 这篇文章通过结合所有有意义的卷积的fe
  • 剑指offer 学习笔记 礼物的最大价值

    面试题47 礼物的最大价值 在一个mxn的棋盘的每一格都放有一个礼物 每个礼物都有一定的价值 价值大于0 你从棋盘的左上角开始拿格子里的礼物 并每次向右或者向下移动一格 直到到达棋盘的右下角 给定一个棋盘和上面的礼物 请计算你最多能拿到多少
  • 基于Hypervisor智能驾舱的AUTOSAR解决方案(1)

    引言 当今的汽车制造商正竞相通过使用人机界面 HMI 基于云的服务 车辆自组织网络 VANET 和自动驾驶等技术在未来的车辆中部署这些创新且吸引眼球的新功能 这些新技术增加了车辆电气和电子 E E 架构的复杂性 并要求软件系统要支持汽车间及
  • 批量网页内容爬虫(附正则表达式)

    最近 我可爱的女朋友有一个新的任务 需要复制网页上的部分内容 多达1500多页 到word文档中 既有文字 又有图片 十分复杂 是不是可以使用爬虫的方法解决一下子呢 首先分析网页 每一页有30个新闻文章 首先爬取页面内的文章的链接 分析页面
  • hadoop关不掉namenode的解决办法

    原文地址 https blog csdn net arrow8071 article details 51365843 问题描述 部门的Hadoop集群运行有一个多月了 今天需要做点调整 但是突然发现Hadoop不能正常关闭 Hadoop版