Hadoop在Linux中的日志分析实践指南
Hadoop各组件的日志默认存储在Linux系统的特定目录中,便于快速定位:
/var/log/hadoop-hdfs/,如hadoop-hdfs-namenode-<hostname>.log;数据节点日志(DataNode)同目录,文件名为hadoop-hdfs-datanode-<hostname>.log。/var/log/hadoop-yarn/,如hadoop-yarn-resourcemanager-<hostname>.log;节点管理器日志(NodeManager)同目录,文件名为hadoop-yarn-nodemanager-<hostname>.log。/var/log/hadoop-mapreduce/,如hadoop-mapreduce-jobhistoryserver-<hostname>.log。Linux原生命令是快速查看和分析Hadoop日志的基础工具:
tail -f /var/log/hadoop-hdfs/hadoop-hdfs-namenode-<hostname>.log 可实时跟踪NameNode日志的最新更新,帮助快速发现实时问题。grep "ERROR" /var/log/hadoop-yarn/*.log 可提取所有YARN日志中的错误信息,聚焦关键问题。grep -A 10 -B 5 "Segmentation fault" /var/log/hadoop-yarn/hadoop-yarn-nodemanager-*.log 可显示匹配行的前后10行(-A)和5行(-B),便于分析错误上下文。grep "ERROR" /var/log/hadoop-hdfs/*.log | wc -l 可统计HDFS日志中的错误总数,量化问题严重程度。awk '/ERROR/ {print $1, $2, $3}' /var/log/hadoop-hdfs/*.log 可提取错误行的时间戳(前3列)和错误信息,便于后续排序或统计。sed -i '/DEBUG/d' /var/log/hadoop-yarn/*.log 可删除所有YARN日志中的调试信息,减少日志噪音。/var/log/hadoop-hdfs/*.log),解析并转发至Elasticsearch。对于大规模Hadoop集群(数十个节点以上),分散的日志文件会增加分析难度。需通过以下方式实现集中管理:
yarn.log-aggregation-enable=true),将MapReduce作业的日志自动上传至HDFS(存储路径为hdfs://namenode:8020/userlogs/)。通过yarn logs -applicationId <app_id>命令可直接查看指定作业的所有日志,无需登录各个节点。为防止日志文件过大占用磁盘空间,需配置日志轮转策略:
/etc/logrotate.d/hadoop文件,添加以下配置可实现HDFS日志的每日轮转、保留7天、压缩旧日志:/var/log/hadoop-hdfs/*.log {
daily
missingok
rotate 7
compress
notifempty
create 640 root adm
}
该配置会自动处理日志轮转,无需手动删除旧日志。tail -n 100 /var/log/hadoop-hdfs/hadoop-hdfs-namenode-<hostname>.log,发现报错“java.io.IOException: NameNode is not formatted”。hdfs namenode -format命令格式化NameNode,然后重启HDFS服务(start-dfs.sh),NameNode即可正常启动。grep "Application failed" /var/log/hadoop-yarn/*.log,找到失败的作业ID(如application_1234567890_0001)。yarn logs -applicationId application_1234567890_0001,发现报错“Container killed by YARN for exceeding memory limits”。yarn-site.xml中的yarn.scheduler.maximum-allocation-mb(节点最大分配内存)和mapreduce.map.memory.mb(Map任务内存),增加内存配额后重新提交作业。