Hadoop的日志默认存储在$HADOOP_HOME/logs目录下($HADOOP_HOME为Hadoop安装根目录),不同组件的日志文件命名规则如下:
hadoop-<username>-namenode-<hostname>.log(NameNode)、hadoop-<username>-datanode-<hostname>.log(DataNode);yarn-<username>-resourcemanager-<hostname>.log(ResourceManager)、yarn-<username>-nodemanager-<hostname>.log(NodeManager);$HADOOP_HOME/logs/history)。Linux自带命令是查看Hadoop日志的基础工具,适用于快速定位问题:
tail命令:实时查看日志文件的最后几行(常用于监控日志更新),例如:tail -f $HADOOP_HOME/logs/hadoop-hadoop-namenode-localhost.log
(-f参数表示持续跟踪文件变化,Ctrl+C退出实时模式)。cat命令:完整输出日志文件内容(适用于小文件),例如:cat $HADOOP_HOME/logs/hadoop-hadoop-datanode-localhost.log
less命令:分页查看大日志文件(支持上下翻页、搜索),例如:less $HADOOP_HOME/logs/hadoop-hadoop-resourcemanager-localhost.log
输入/keyword可搜索关键词(如ERROR),按q退出。grep命令:过滤日志中的特定信息(如错误、警告),例如:grep "ERROR" $HADOOP_HOME/logs/hadoop-hadoop-namenode-localhost.log # 查找NameNode的错误日志
grep "WARN" $HADOOP_HOME/logs/hadoop-hadoop-datanode-*.log # 查找所有DataNode的警告日志
head命令:查看日志文件的前几行(如查看日志头部信息),例如:head -n 100 $HADOOP_HOME/logs/hadoop-hadoop-namenode-localhost.log
Hadoop提供了专门命令用于查看集群运行日志:
yarn logs命令:查看YARN应用程序的日志(如MapReduce任务),需指定applicationId(可通过yarn application -list获取),例如:yarn logs -applicationId application_1621607717899_0001 > task_log.txt
该命令会将指定任务的日志输出到task_log.txt文件中,方便离线分析。Hadoop的Web管理界面提供了图形化的日志查看方式,无需登录服务器:
http://<namenode-ip>:50070(Hadoop 2.x及以上版本为http://<namenode-ip>:9870),点击“NameNode Logs”可查看NameNode的日志;http://<resourcemanager-ip>:8088,点击“Application”→选择具体应用→“Logs”可查看该应用的日志(包括Container的stdout、stderr、syslog)。对于大规模集群,可使用工具提升日志分析效率:
awk/sed:用于日志处理和提取,例如提取错误日志的时间戳和信息:awk '/ERROR/ {print $1, $2, $3, $4, $5}' $HADOOP_HOME/logs/hadoop-hadoop-namenode-localhost.log
/etc/logrotate.d/hadoop文件:/var/log/hadoop-hdfs/*.log {
daily
missingok
rotate 7
compress
notifempty
create 640 root adm
}
该配置表示每天轮转日志,保留最近7天的压缩日志。通过以上方法,可快速定位Hadoop集群中的问题(如NameNode无法启动、DataNode连接失败等)。建议定期检查日志中的ERROR和WARN信息,提前发现潜在风险。