在 CentOS 上“调试 HDFS 日志”通常包含几个层面:查看日志位置、调整日志级别、实时跟踪日志、以及结合 HDFS 工具排错。下面按实战步骤说明。
一般在:
/var/log/hadoop-hdfs/
或(取决于安装方式):
$HADOOP_HOME/logs/
常见文件:
hadoop-hdfs-namenode-<host>.loghadoop-hdfs-datanode-<host>.loghadoop-hdfs-secondarynamenode-<host>.logjournalctl -u hadoop-hdfs-namenode
journalctl -u hadoop-hdfs-datanode
tail -f /var/log/hadoop-hdfs/hadoop-hdfs-namenode-$(hostname).log
多个节点可并行:
tail -f /var/log/hadoop-hdfs/*.log
文件路径通常为:
/etc/hadoop/conf/log4j.properties
或
$HADOOP_HOME/etc/hadoop/log4j.properties
示例(开启 DEBUG):
log4j.logger.org.apache.hadoop.hdfs=DEBUG
log4j.logger.org.apache.hadoop.hdfs.server.namenode=DEBUG
修改后重启 HDFS 服务:
systemctl restart hadoop-hdfs-namenode
systemctl restart hadoop-hdfs-datanode
⚠️ DEBUG 日志量很大,调试完记得改回 INFO
Hadoop 支持通过 HTTP 接口动态改日志级别。
curl -X POST \
"http://namenode-host:9870/logLevel?log=org.apache.hadoop.hdfs&level=DEBUG"
curl -X POST \
"http://datanode-host:9864/logLevel?log=org.apache.hadoop.hdfs&level=DEBUG"
查看当前级别:
curl "http://namenode-host:9870/logLevel?log=org.apache.hadoop.hdfs"
看 DataNode 日志:
grep -i "namespaceID\|blockpool\|connection" \
/var/log/hadoop-hdfs/hadoop-hdfs-datanode-*.log
hdfs dfsadmin -safemode get
日志关键字:
Safe mode
grep -i "Permission denied" /var/log/hadoop-hdfs/*.log
grep -i "IOException\|DiskError\|volume" \
/var/log/hadoop-hdfs/hadoop-hdfs-datanode-*.log
hdfs fsck / -files -blocks -locations
hdfs dfsadmin -report
hdfs haadmin -getServiceState nn1
less +F 代替 tail -fpdsh:pdsh -w node[01-05] "tail -n 50 /var/log/hadoop-hdfs/*.log"
timedatectl
如果你能告诉我:
我可以直接帮你定位是哪一类日志、该看哪一段。