在Hadoop分布式文件系统中,正确停止集群或服务是日常运维的重要操作,不同组件的停止命令和场景有所不同,Hadoop集群通常由HDFS和YARN两大核心组件构成,此外可能包含MapReduce、HBase等关联服务,停止时需遵循特定顺序以确保数据一致性和资源释放,以下从集群整体停止、HDFS停止、YARN停止及其他服务停止四个维度,详细说明各类停止命令的使用方法、注意事项及操作场景。

集群整体停止命令
当需要关闭整个Hadoop集群时,推荐通过停止Master节点和Data节点来实现,避免因强制关闭导致数据损坏,停止顺序应为先停止YARN(资源管理器),再停止HDFS(文件系统),最后停止其他辅助服务,在集群的Master节点(通常为NameNode和ResourceManager所在节点)上,可执行以下操作:
- 停止YARN:进入Hadoop安装目录的sbin目录,运行
stop-yarn.sh脚本,该命令会停止ResourceManager和所有NodeManager进程,若集群配置了高可用(HA),需在所有ResourceManager节点上执行,确保所有资源管理器关闭。 - 停止HDFS:执行
stop-dfs.sh脚本,该脚本会停止NameNode、SecondaryNameNode和所有DataNode进程,在HA模式下,需在所有NameNode节点上执行hadoop-daemon.sh stop namenode,并在DataNode节点上执行hadoop-daemon.sh stop datanode。 - 验证停止状态:使用
jps命令检查各节点进程,确保NameNode、ResourceManager、DataNode、NodeManager等核心进程已退出,避免残留进程影响下次启动。
HDFS组件停止命令
HDFS作为存储核心,其停止操作需关注元数据安全,以下是各组件的停止方式及场景:
- NameNode停止:在NameNode节点执行
hadoop-daemon.sh stop namenode,若为HA集群,需在所有NameNode节点执行,停止前确保已完成元数据持久化(可通过hdfs dfsadmin -saveNamespace手动触发),避免元数据丢失。 - DataNode停止:在DataNode节点执行
hadoop-daemon.sh stop datanode,该命令会停止当前节点的DataNode进程,若需停止所有DataNode,可在Master节点通过ssh datanode1 'hadoop-daemon.sh stop datanode'; ssh datanode2 'hadoop-daemon.sh stop datanode'批量操作。 - SecondaryNameNode停止:执行
hadoop-daemon.sh stop secondarynamenode,通常在NameNode节点运行,其停止不影响HDFS基本功能,但会影响元数据合并效率。
| 组件名称 | 停止命令 | 适用场景 | 注意事项 |
|---|---|---|---|
| NameNode | hadoop-daemon.sh stop namenode |
单点或HA集群的NameNode关闭 | 需先停止DataNode,确保数据同步完成 |
| DataNode | hadoop-daemon.sh stop datanode |
单个或批量DataNode节点关闭 | 避免在写入高峰期停止,可能导致数据块丢失 |
| SecondaryNameNode | hadoop-daemon.sh stop secondarynamenode |
辅助元数据管理节点关闭 | 可选关闭,不影响集群运行 |
YARN组件停止命令
YARN负责资源调度和任务管理,停止时需确保正在运行的任务已完成,避免任务中断,主要组件停止命令如下:
- ResourceManager停止:在ResourceManager节点执行
yarn-daemon.sh stop resourcemanager,HA模式下需在所有ResourceManager节点执行,停止前可通过yarn node -list检查节点状态,确保无正在运行的任务。 - NodeManager停止:在NodeManager节点执行
yarn-daemon.sh stop nodemanager,该命令会停止当前节点的资源代理进程,若需批量停止,可通过脚本结合SSH在所有NodeManager节点执行。 - 历史服务器停止:执行
mr-jobhistory-daemon.sh stop historyserver,该服务用于记录任务历史,停止后无法查看历史任务详情,但不影响新任务提交。
其他服务停止命令
若集群包含MapReduce、HBase等服务,需单独停止:

- MapReduce停止:执行
mr-jobhistory-daemon.sh stop historyserver停止历史服务器,若使用MapReduce v1,还需停止JobTracker(mapred-daemon.sh stop jobtracker)。 - HBase停止:进入HBase安装目录,执行
bin/stop-hbase.sh,该命令会停止HMaster和RegionServer,需确保HBase无活跃写入操作。
停止操作的注意事项
- 停止顺序:严格遵循“先YARN后HDFS”的顺序,避免YARN残留进程占用HDFS资源。
- 数据一致性:停止HDFS前确保所有DataNode完成数据块同步,可通过
hdfs dfsadmin -report检查DataNode状态。 - 安全模式:若HDFS处于安全模式(可通过
hdfs dfsadmin -safemode get查看),需先退出安全模式(hdfs dfsadmin -safemode leave)再停止服务。 - 日志检查:停止后查看各组件日志(如
logs/hadoop-*-namenode-*.log),确认无异常错误。
相关问答FAQs
Q1: 停止HDFS时提示“NameNode is in safe mode”,如何处理?
A: 安全模式下HDFS禁止写入操作,需先退出安全模式,执行hdfs dfsadmin -safemode leave命令,待提示“Safe mode is OFF”后再执行停止命令,若无法退出,检查NameNode日志确认是否有元数据损坏,必要时使用hdfs namenode -recover进行恢复。
Q2: 批量停止DataNode时,部分节点命令未执行,如何排查?
A: 首先检查SSH免密登录是否配置正确(通过ssh datanode1 'echo test'验证),若SSH正常,检查目标节点是否有防火墙拦截(如iptables -L查看规则),确认目标节点Hadoop进程是否已存在异常(如jps检查),避免因进程冲突导致命令执行失败。

