Linux环境下HDFS的监控与维护指南
hdfs dfsadmin:核心管理命令,可通过-report参数获取集群详细状态(包括DataNode数量、容量、剩余空间、副本放置情况等);-safemode get查看NameNode是否处于安全模式(避免在安全模式下执行写操作);-saveNamespace保存命名空间(需先进入安全模式,用于元数据持久化)。hdfs fsck:文件系统健康检查工具,可通过hdfs fsck /检查整个集群的健康状况;hdfs fsck /path -files -blocks -locations查看指定路径下文件的块分布及位置;hdfs fsck / -list-corruptfileblocks列出损坏的数据块(需修复时配合-move或-delete参数)。jps:快速检查Hadoop相关进程是否正常运行(如NameNode、DataNode、SecondaryNameNode),若进程未启动需手动启动或排查日志。http://<namenode-host>:9870(Hadoop 3.x)或http://<namenode-host>:50070(Hadoop 2.x)提供集群状态页面,可查看集群健康度、DataNode列表、存储使用率、块报告、NameNode日志等基础信息。check_hdfs)监控HDFS状态(如NameNode是否存活、DataNode是否断开),支持阈值告警(如DataNode宕机数量超过阈值)。Hadoop的NameNode和DataNode均支持JMX(Java Management Extensions),可通过配置hdfs-site.xml开启JMX端口(如dfs.namenode.jmx-address设置为namenode-host:9870),使用JConsole、VisualVM等工具连接,实时查看JVM内存使用、线程状态、HDFS内部指标(如块复制队列长度)。
hdfs dfsadmin -report检查集群状态(DataNode数量、存储使用率);通过hdfs fsck /检查文件系统健康(无损坏块);查看NameNode/DataNode日志($HADOOP_HOME/logs目录),排查异常(如DataNode心跳超时、块复制失败)。hadoop fs -rm -r /user/hadoop/.Trash/*),避免回收站占用过多存储;检查小文件数量(如/user/hive/hivescratchdir目录),若超过阈值(如300万)需合并或清理(小文件会增加NameNode负载)。core-site.xml中配置net.topology.script.file.name参数,指向机架感知脚本(如/etc/hadoop/conf/topology.sh),确保数据块分布在不同机架上,提高数据可靠性和查询效率。hdfs-site.xml、core-site.xml等重要配置文件纳入版本控制系统(如Git),定期检查和更新配置(如调整副本数、块大小),避免配置冲突。hdfs dfsadmin -report显示Dead Node),需登录DataNode主机,检查进程状态(jps)、磁盘空间(df -h)、网络连接(ping NameNode),重启DataNode进程(hadoop-daemon.sh start datanode)。hdfs fsck / -list-corruptfileblocks列出损坏块,使用hdfs fsck / -move将损坏块移动到/lost+found目录(后续可恢复),或hdfs fsck / -delete删除损坏块(需确保数据有足够副本)。hdfs dfsadmin -safemode leave命令退出(需确保集群正常运行,所有DataNode已上报数据块)。dfs.blocksize参数(默认128MB),大文件(如日志文件)可设置为256MB或512MB(提高读取效率),小文件可保持默认(减少寻址开销)。dfs.datanode.balance.bandwidthPerSec调整数据均衡带宽。dfs.replication参数(默认3),热数据(频繁访问)保持3副本,冷数据(很少访问)可降低至2副本(节省存储成本)。slaves文件),启动DataNode进程(hadoop-daemon.sh start datanode),NameNode会自动分配数据块(均衡存储);新增NameNode时,需配置HA(高可用),确保NameNode故障时自动切换。hdfs distcp命令跨集群复制数据(如hdfs distcp hdfs://source-nn:8020/path hdfs://target-nn:8020/path),实现异地备份;若数据丢失,可从副本中恢复(hdfs dfs -cp /source/path /target/path)。