hadoop历史服务器详解:配置、启动与日志查询
在 YARN 集群中,默认情况下无法通过 ResourceManager Web UI 查看已完成作业的历史日志。历史服务器(JobHistoryServer)的作用是 收集、存储和展示 MapReduce 作业的历史运行日志,帮助用户追溯作业执行详情(如任务耗时、失败原因)。本文将详细解析历史服务器的配置方法、启动流程及日志查询方式。
历史服务器的核心作用
在未配置历史服务器时,YARN 的 ResourceManager Web UI 仅能显示当前运行中的作业,已完成作业的日志无法直接访问。历史服务器解决了以下问题:
- 追溯历史作业:存储已完成作业的配置、统计信息和任务日志;
- 问题排查:通过历史日志分析作业失败原因(如内存溢出、数据倾斜);
- 性能优化:基于历史作业的运行指标(如 Map/Reduce 耗时)优化资源配置。
历史服务器配置步骤
核心配置参数
历史服务器的配置需在 mapred-site.xml
中完成,关键参数如下:
配置参数 | 含义 | 默认值 | 推荐配置 |
---|---|---|---|
mapreduce.jobhistory.address |
历史服务器 RPC 地址(用于接收作业历史数据) | 0.0.0.0:10020 |
保持默认或指定节点(如 hadoop1:10020 ) |
mapreduce.jobhistory.webapp.address |
历史服务器 Web UI 地址 | 0.0.0.0:19888 |
保持默认或指定节点(如 hadoop1:19888 ) |
mapreduce.jobhistory.intermediate-done-dir |
作业运行时临时历史日志存储目录(HDFS) | /mr-history/tmp |
保持默认或自定义路径 |
mapreduce.jobhistory.done-dir |
作业完成后历史日志归档目录(HDFS) | /mr-history/done |
保持默认或自定义路径 |
配置文件修改
编辑 $HADOOP_HOME/etc/hadoop/mapred-site.xml
,添加以下配置:
1 | <configuration> |
配置 YARN 关联历史服务器
为使 YARN Web UI 中的 “History” 链接生效,需在 yarn-site.xml
中添加历史服务器地址配置:
1 | <configuration> |
分发配置文件(完全分布式集群)
若为多节点集群,需将修改后的 mapred-site.xml
和 yarn-site.xml
分发至所有节点:
1 | scp $HADOOP_HOME/etc/hadoop/mapred-site.xml hadoop2:$HADOOP_HOME/etc/hadoop/ |
历史服务器启动与验证
启动历史服务器
在配置历史服务器的节点(如 hadoop1
)执行以下命令:
1 | 启动历史服务器(后台运行) |
验证进程启动
执行 jps
命令,确认 JobHistoryServer
进程已启动:
1 | jps |
验证 Web UI 访问
打开浏览器访问历史服务器 Web UI:http://hadoop1:19888
页面应显示已完成作业的列表,包括作业 ID、名称、状态等信息。
验证 YARN Web UI 关联
- 打开 YARN Web UI(
http://<ResourceManager节点>:8088
); - 找到已完成的作业,点击 “History” 链接,应能跳转至历史服务器查看详细日志。
历史日志查询方式
Web UI 查询
在历史服务器 Web UI 中:
- 点击作业 ID 可查看作业概览(如启动时间、完成时间、Map/Reduce 数量);
- 点击 “Maps” 或 “Reduces” 可查看具体任务的日志(包括
stdout
、stderr
); - 点击 “Counters” 可查看作业计数器(如输入记录数、输出记录数)。
命令行查询
使用 mapred historyserver
相关命令查询日志:
1 | 查看作业历史信息 |
历史服务器运维与优化
日志存储管理
- HDFS 目录权限:确保历史服务器有/mr-history目录的读写权限:
1 | hdfs dfs -mkdir -p /mr-history/tmp /mr-history/done |
- 日志清理:历史日志默认永久保留,需定期清理或配置 HDFS 生命周期管理(如通过
hdfs dfsadmin -setQuota
设置配额)。
性能优化
内存配置:若历史服务器内存不足,可在mapred-env.sh中调整 JVM 内存:
1
export HADOOP_JOB_HISTORYSERVER_HEAPSIZE=1024 # 设置为 1GB
日志滚动:配置历史服务器自身日志的滚动策略(修改
$HADOOP_HOME/etc/hadoop/log4j.properties
),避免本地磁盘占满。
关闭历史服务器
1 | 停止历史服务器 |
常见问题排查
1. 历史服务器启动失败
- 原因:HDFS 目录未创建、权限不足或配置文件错误;
- 解决:
- 检查 HDFS 目录是否存在并授权;
- 查看历史服务器日志(
$HADOOP_HOME/logs/mapred-<username>-jobhistoryserver-<node>.log
)定位错误。
2. YARN Web UI 无法跳转至历史服务器
- 原因:
yarn.log.server.url
配置错误或历史服务器未启动; - 解决:
- 确认
yarn.log.server.url
与历史服务器 Web UI 地址一致; - 检查历史服务器进程是否正常运行。
- 确认
3. 历史日志不完整
- 原因:作业未正常完成、历史服务器启动晚于作业提交;
- 解决:确保作业正常完成后再停止历史服务器;提交作业前提前启动历史服务器。
v1.3.10