You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Monit监控Hadoop、HBase、YARN并配置异常自动重启

Monit 监控 Hadoop 生态组件配置方案

先纠正两个核心配置误区

第一,别给 Hadoop、YARN、HBase 这种多进程服务写单条 check process 规则。Monit 从设计上就是一个 check 块对应一个进程,不管你matching后面的正则写什么,都只会匹配到运行时间最长的那个父进程,必然会出现DataNode挂了但NameNode还活着、Monit判定服务正常不触发重启的问题,这不是正则写的不对,是用法错了。
第二,你在/var/run下找不到Hadoop的PID文件是正常的,Hadoop生态组件默认把PID存在临时目录(一般是/tmp/hsperfdata_<服务启动用户>/下),不会主动写到系统标准PID路径。相比用字符串匹配进程,更推荐你先把PID路径固定下来,用pidfile方式做检测,不会误判同名进程,稳定性高很多。

各组件配置方法

第一步:固定PID存放路径

先手动创建PID存放目录,给启动Hadoop服务的用户分配读写权限,比如建/var/run/hadoop、/var/run/hbase两个目录,然后改各组件的环境变量配置:

  • 编辑hadoop-env.sh,加一行export HADOOP_PID_DIR=/var/run/hadoop
  • 编辑yarn-env.sh,加一行export YARN_PID_DIR=/var/run/hadoop
  • 编辑hbase-env.sh,加一行export HBASE_PID_DIR=/var/run/hbase
    改完重启一次组件,对应目录下就会生成每个进程独立的PID文件,后续直接用pidfile配置检测规则就行。
    如果你暂时不想改PID路径,也可以直接用进程关键字做字符串匹配,每个核心进程单独写一个check块,对应关键字如下:
  • HDFS NameNode:匹配org.apache.hadoop.hdfs.server.namenode.NameNode
  • HDFS DataNode:匹配org.apache.hadoop.hdfs.server.datanode.DataNode
  • HDFS SecondaryNameNode:匹配org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode
  • YARN ResourceManager:匹配org.apache.hadoop.yarn.server.resourcemanager.ResourceManager
  • YARN NodeManager:匹配org.apache.hadoop.yarn.server.nodemanager.NodeManager
  • HBase HMaster:匹配org.apache.hadoop.hbase.master.HMaster
  • HBase RegionServer:匹配org.apache.hadoop.hbase.regionserver.HRegionServer
    注意:别在单进程的启停逻辑里调用start-dfs.sh/stop-dfs.sh这类全集群脚本,不然某个DataNode挂了,脚本会把整个HDFS所有进程全重启一遍,影响线上可用性,直接用组件自带的单进程启停脚本hadoop-daemon.sh、yarn-daemon.sh、hbase-daemon.sh就行。

启动依赖顺序配置

Monit原生支持depends on语法配置服务依赖,你要实现Zookeeper启动完成后再起其他服务,直接在对应服务的check块里加依赖规则就行。规则生效后,如果Zookeeper没启动,Monit不会拉起依赖它的服务;如果Zookeeper触发重启,依赖它的服务也会按顺序跟着重启。
配置示例:

# 已完成的Zookeeper配置
check process Zookeeper matching "QuorumPeerMain"
        start program = "path/to/zkServer.sh start"
        stop program  = "path/to/zkServer.sh stop"

# HBase Master配置,依赖Zookeeper
check process HMaster with pidfile /var/run/hbase/hbase-<你的服务启动用户>-master.pid
        start program = "/path/to/hbase-daemon.sh start master"
        stop program = "/path/to/hbase-daemon.sh stop master"
        depends on Zookeeper

# HDFS NameNode配置,开启HA场景下依赖Zookeeper
check process NameNode with pidfile /var/run/hadoop/hadoop-<你的服务启动用户>-namenode.pid
        start program = "/path/to/hadoop-daemon.sh start namenode"
        stop program = "/path/to/hadoop-daemon.sh stop namenode"
        depends on Zookeeper

其余DataNode、NodeManager、RegionServer进程都按这个逻辑写就行,如果有层级依赖(比如RegionServer要等HMaster启动完成再拉),也可以叠加写多条depends on规则。

内容的提问来源于stack exchange,提问作者Shashank Gb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 14:19:19