如何使用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
相关产品推荐
相关产品推荐

