Ubuntu环境下Hadoop日志查看与分析指南
Hadoop的日志文件默认存储在$HADOOP_HOME/logs目录下($HADOOP_HOME为Hadoop安装根目录)。主要日志文件按组件分类如下:
hadoop-*-namenode-*.log(NameNode日志)、hadoop-*-datanode-*.log(DataNode日志);hadoop-*-resourcemanager-*.log(ResourceManager日志)、hadoop-*-nodemanager-*.log(NodeManager日志);stdout(标准输出)、stderr(标准错误)。cat:查看完整日志文件内容(适用于小文件),例如:cat $HADOOP_HOME/logs/hadoop-hadoop-namenode-*.logtail:实时查看日志文件末尾内容(常用于监控实时日志),例如:tail -f $HADOOP_HOME/logs/hadoop-hadoop-datanode-*.log(-f表示持续跟踪);tail -n 20 $HADOOP_HOME/logs/hadoop-hadoop-namenode-*.loghead:查看日志文件开头内容(例如查看日志头部信息),例如:head -n 10 $HADOOP_HOME/logs/hadoop-hadoop-resourcemanager-*.log。grep:搜索特定关键词(如错误、警告),例如:grep "ERROR" $HADOOP_HOME/logs/hadoop-hadoop-datanode-*.log(查找所有包含“ERROR”的行);grep "ERROR" logfile.log | wc -lawk:提取特定字段(如时间戳、错误信息),例如:awk '/ERROR/ {print $1, $2, $3, $4}' logfile.log(提取包含“ERROR”的行的前4个字段,通常为时间戳和日志级别)。Hadoop提供了Web界面方便查看集群状态和日志:
http://<namenode-ip>:9870(Hadoop 3.x版本),点击“Logs”链接可查看NameNode日志;http://<resourcemanager-ip>:8088,点击“Application”可查看作业列表,进一步点击作业ID可查看任务日志(包括stdout和stderr)。使用grep命令过滤错误日志,结合上下文查看问题详情:
grep -A 10 -B 10 "ERROR" logfile.log(显示匹配“ERROR”的行及其前后10行上下文);
tail -100 logfile.log | grep "ERROR"(查看日志最后100行中的错误信息)。
通过YARN Web界面查看失败任务的日志,重点关注以下信息:
ClassNotFoundException、OutOfMemoryError);结合系统命令分析日志中的资源瓶颈:
top/htop:查看CPU、内存使用率;iostat:查看磁盘I/O情况;df -h:查看HDFS数据节点磁盘空间(避免因磁盘满导致日志写入失败)。Hadoop使用Log4j作为日志框架,可通过修改$HADOOP_HOME/etc/hadoop/log4j.properties文件调整日志级别:
log4j.rootLogger,例如设置为DEBUG(详细日志)或ERROR(仅错误日志):log4j.rootLogger=DEBUG, consolelog4j.logger.org.apache.hadoop.hdfs=DEBUG(开启HDFS详细日志);log4j.logger.org.apache.hadoop.yarn=INFO(YARN保持默认INFO级别)。防止日志文件过大占用磁盘空间,可使用logrotate工具配置日志轮转:
/etc/logrotate.d/hadoop文件,添加以下内容:/var/log/hadoop-hdfs/*.log {
daily # 每天轮转
missingok # 忽略缺失文件
rotate 7 # 保留7个旧日志
compress # 压缩旧日志
notifempty # 空日志不轮转
create 640 root adm # 新日志权限
}
保存后,logrotate会自动按配置轮转日志。对于大规模集群,建议使用ELK Stack(Elasticsearch+Logstash+Kibana)或Splunk等工具实现日志的集中存储、搜索和可视化:
logstash.conf文件,收集Hadoop日志并发送到Elasticsearch;