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(按行號或關鍵字截?。?pre class="hljs">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的穩定運行。