Debian上Hadoop日志管理实操指南
一 日志位置与类型
- 系统服务日志:Hadoop 的 NameNode、DataNode、ResourceManager、NodeManager 等守护进程日志默认位于 ${HADOOP_HOME}/logs/,常见命名如:yarn-${USER}-resourcemanager-${hostname}.log。日志按大小滚动,默认保留最近 20 个历史文件(可在 Log4j 中调整)。
- 作业与容器日志:MapReduce/Spark on YARN 的 ApplicationMaster 与 Container 日志默认分散在各节点的本地 ${HADOOP_HOME}/logs/ 目录,通常包含 .log 与 .out 两类文件。
- 历史作业日志:由 JobHistory Server 管理,历史与中间结果目录通过 mapred-site.xml 的 mapreduce.jobhistory.done-dir 与 mapreduce.jobhistory.intermediate-done-dir 配置,默认分别为 /history/done 与 /history/done_intermediate。
- 系统级日志:Debian 的系统日志位于 /var/log/(如 /var/log/syslog),可用于排查与 Hadoop 相关的系统层面问题。
二 启用与配置日志聚合
- 在 yarn-site.xml 开启并配置日志聚合,使各节点容器日志在作业结束后上传至 HDFS 集中保存与查看:
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
<property>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>/tmp/logs</value>
</property>
<property>
<name>yarn.nodemanager.remote-app-log-dir-suffix</name>
<value>logs</value>
</property>
<property>
<name>yarn.log.server.url</name>
<value>http://<history-host>:19888/jobhistory/logs/</value>
</property>
- 在 mapred-site.xml 配置 JobHistory Server 地址与历史目录:
<property>
<name>mapreduce.jobhistory.address</name>
<value><history-host>:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value><history-host>:19888</value>
</property>
<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>/history/done</value>
</property>
<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>/history/done_intermediate</value>
</property>
- 使配置生效:重启 ResourceManager、NodeManager、JobHistoryServer。完成后,作业日志将集中到 HDFS 指定目录,并通过 JobHistory Server 提供查询。
三 查看与分析日志
- 命令行查看 YARN 应用日志(聚合后):
- 查看指定应用:yarn logs -applicationId
- 查看指定容器:yarn logs -applicationId -containerId
- 直接查看 HDFS 上的聚合日志:
- 列出目录:hdfs dfs -ls /tmp/logs//logs/
- 查看内容:hdfs dfs -cat /tmp/logs//logs//
- Web UI:
- ResourceManager:http://:8088(在应用详情页跳转日志)
- JobHistory Server:http://:19888(历史作业与日志聚合入口)
- 系统与服务日志:
- 查看系统日志:journalctl、cat /var/log/syslog
- 查看守护进程本地日志:less ${HADOOP_HOME}/logs/yarn--resourcemanager-.log
- 日志格式与命名:Hadoop 使用 Log4j,常见为 .log(滚动)与 .out(标准输出/错误);命名与滚动策略可在 ${HADOOP_HOME}/etc/hadoop/log4j.properties 中调整。
四 保留策略与清理
- 聚合日志保留:通过 yarn.log-aggregation.retain-seconds 控制聚合日志在 HDFS 的保留时长(如 604800 秒=7天),超时后由 NodeManager 清理。
- 本地滚动日志:由 log4j.properties 的 RollingFileAppender 等控制,可按大小滚动并限制历史文件数量(默认保留 20 个)。
- 历史目录维护:定期清理 /history/done 与 /tmp/logs(若不再需要),避免 NameNode 元数据与 HDFS 空间压力。
- 系统层面:结合 journalctl 与 logrotate 管理 /var/log 下系统日志,防止磁盘被占满。
五 常见问题与排查建议
- 聚合日志看不到:确认 yarn.log-aggregation-enable=true、JobHistory Server 已启动且 yarn.log.server.url 指向正确地址;必要时重启相关服务。
- 本地日志过大:检查 log4j.properties 的滚动与保留策略,适当减小单文件大小与保留个数。
- 历史作业缺失:核对 mapred-site.xml 的 done-dir/intermediate-done-dir 与 JobHistory Server 状态,确保作业完成后历史被写入并归档。
- 权限与空间:确保 YARN 与 HDFS 用户对 /tmp/logs 与 /history 具备读写权限,并监控 HDFS 与本地磁盘使用率。