Hadoop的日志主要分为系统服务日志和应用/作业日志,默认存储路径由$HADOOP_HOME(Hadoop安装目录)决定:
$HADOOP_HOME/logs目录下,文件命名规则为hadoop-*-<组件名>-<hostname>.log(如hadoop-hadoop-namenode-master.log、yarn-hadoop-resourcemanager-slave1.log)。$HADOOP_HOME/logs/history(可通过yarn.job.history.location参数配置);$HADOOP_HOME/userlogs/<application_id>/目录下(如container_1716480000000_0001_01_000001)。Linux下可通过以下命令快速查看Hadoop日志:
tail命令:实时追踪日志文件的最新内容(适用于故障排查时监控实时日志),例如:tail -f $HADOOP_HOME/logs/hadoop-hadoop-namenode-master.log # 实时查看NameNode日志
tail -f $HADOOP_HOME/logs/yarn-hadoop-resourcemanager-slave1.log # 实时查看ResourceManager日志
grep命令:搜索日志中的关键字(如“ERROR”“WARN”),快速定位问题,例如:grep "ERROR" $HADOOP_HOME/logs/*.log # 在所有日志文件中搜索ERROR信息
grep "Connection refused" $HADOOP_HOME/logs/hadoop-hadoop-datanode-slave2.log # 搜索DataNode连接拒绝错误
less命令:分页查看大型日志文件(支持上下翻页、搜索),例如:less $HADOOP_HOME/logs/hadoop-hadoop-datanode-slave2.log # 打开DataNode日志
/2025-10-25 # 在less中搜索特定时间点的日志
q # 退出less
cat命令:快速查看小型日志文件的全部内容(不适用于大型文件),例如:cat $HADOOP_HOME/logs/hadoop-hadoop-namenode-master.log | head -n 50 # 查看NameNode日志前50行
yarn logs命令:直接获取YARN应用程序的日志(无需手动查找userlogs目录),需指定应用程序ID(可通过yarn application -list获取),例如:yarn logs -applicationId application_1716480000000_0001 # 查看指定应用的日志
hadoop fs命令:查看HDFS中存储的系统日志(如NameNode的EditLog),例如:hadoop fs -ls /var/log/hadoop/hdfs # 列出HDFS中的HDFS日志目录
hadoop fs -cat /var/log/hadoop/hdfs/namenode.log # 查看HDFS NameNode日志(需提前上传至HDFS)
Hadoop提供了Web界面方便远程查看日志:
http://<resourcemanager-host>:8088,点击“Applications”→选择具体应用→“Logs” tab,即可查看该应用的Container日志(stdout/stderr/syslog)。http://<namenode-host>:50070(Hadoop 2.x为50070,3.x可能为9870),点击“Logs”链接,查看NameNode服务日志。若集群规模较大,可将日志上传至HDFS或第三方日志系统(如ELK、Flume),实现集中存储、检索和分析。例如,通过hadoop fs -put命令将本地日志上传至HDFS:
hadoop fs -put $HADOOP_HOME/logs/*.log /var/log/hadoop/centralized_logs/
以上方法覆盖了Linux系统下查看Hadoop日志的常见场景,可根据实际需求选择合适的方式。例如,实时监控用tail -f,快速定位错误用grep,查看应用日志用yarn logs,远程查看用Web界面。