HDFS日志的默认存储路径因Linux发行版和Hadoop配置而异,常见位置如下:
/var/log/hadoop-hdfs/(如NameNode日志为/var/log/hadoop-hdfs/hadoop-<user>-namenode-<hostname>.log);$HADOOP_HOME/logs/($HADOOP_HOME为Hadoop安装目录,如/usr/local/hadoop)。namenode-*.log)、DataNode(datanode-*.log)、SecondaryNameNode(secondarynamenode-*.log)等。通过Linux内置命令可快速查看、筛选日志内容,适用于简单故障排查:
tail -f命令跟踪日志文件的实时更新(如NameNode日志):tail -f /var/log/hadoop-hdfs/hadoop-<user>-namenode-<hostname>.log head(查看前N行)、sed(按行号或关键字截取):head -n 20 /var/log/hadoop-hdfs/hadoop-<user>-datanode-*.log # 查看前20行 sed -n '/ERROR/,+5p' /var/log/hadoop-hdfs/namenode.log # 打印包含"ERROR"的行及后续5行 grep命令结合正则表达式筛选特定内容(如查找"ERROR"或"Connection refused"):grep -i "error" /var/log/hadoop-hdfs/*.log # 不区分大小写搜索所有日志文件 grep "Connection refused" /var/log/hadoop-hdfs/datanode.log # 定位连接拒绝问题 awk(提取字段)、sort(排序)、uniq -c(去重计数):awk '/ERROR/ {print $1, $2, $3}' /var/log/hadoop-hdfs/namenode.log | sort | uniq -c | sort -nr # 提取ERROR行的时间戳(前3列),统计每种时间点的错误次数并按降序排列 对于大规模集群或复杂场景,需借助专业工具提升分析效率:
awk用于复杂数据处理(如提取特定字段并计算平均值):awk '/BlockReport/ {print $8}' /var/log/hadoop-hdfs/datanode.log | awk -F: '{sum += $1} END {print "Average BlockReport time:", sum/NR "ms"}' # 计算DataNode BlockReport的平均耗时 grep "ERROR" /var/log/hadoop-hdfs/namenode.log筛选所有ERROR日志;awk '{print $1, $9}'提取时间戳和错误类型(如"java.io.IOException: Disk full");sort | uniq -c统计高频错误(如磁盘空间不足导致的ERROR占比),针对性清理磁盘或扩容。grep "Connection refused" /var/log/hadoop-hdfs/datanode.log;awk '{print $NF}'),检查网络连通性(ping <IP>)或防火墙设置(iptables -L)。logrotate工具防止日志文件过大,配置示例(/etc/logrotate.d/hadoop):/var/log/hadoop-hdfs/*.log { daily # 每天轮转 missingok # 忽略缺失文件 rotate 7 # 保留7天日志 compress # 压缩旧日志(.gz格式) notifempty # 空日志不轮转 create 640 root adm # 新日志权限 } chmod 640 /var/log/hadoop-hdfs/*.log chown root:adm /var/log/hadoop-hdfs/*.log 通过以上流程,可系统性地完成HDFS日志的收集、分析与优化,快速定位集群问题(如节点故障、权限异常、资源不足),保障HDFS的稳定运行。