0%

历史服务器

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<configuration>  
<!-- 历史服务器 RPC 地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop1:10020</value> <!-- 替换为实际节点主机名 -->
</property>

<!-- 历史服务器 Web UI 地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop1:19888</value> <!-- 替换为实际节点主机名 -->
</property>

<!-- 临时历史日志存储目录(HDFS) -->
<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>/mr-history/tmp</value>
</property>

<!-- 归档历史日志目录(HDFS) -->
<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>/mr-history/done</value>
</property>
</configuration>

配置 YARN 关联历史服务器

为使 YARN Web UI 中的 “History” 链接生效,需在 yarn-site.xml 中添加历史服务器地址配置:

1
2
3
4
5
6
7
<configuration>  
<!-- 配置历史服务器地址,用于 YARN Web UI 跳转 -->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop1:19888/jobhistory/logs</value> <!-- 与历史服务器 Web UI 地址对应 -->
</property>
</configuration>

分发配置文件(完全分布式集群)

若为多节点集群,需将修改后的 mapred-site.xmlyarn-site.xml 分发至所有节点:

1
2
3
scp $HADOOP_HOME/etc/hadoop/mapred-site.xml hadoop2:$HADOOP_HOME/etc/hadoop/  
scp $HADOOP_HOME/etc/hadoop/yarn-site.xml hadoop2:$HADOOP_HOME/etc/hadoop/
# 其他节点同理

历史服务器启动与验证

启动历史服务器

在配置历史服务器的节点(如 hadoop1)执行以下命令:

1
2
# 启动历史服务器(后台运行)  
$HADOOP_HOME/bin/mapred --daemon start historyserver

验证进程启动

执行 jps 命令,确认 JobHistoryServer 进程已启动:

1
2
3
jps  
# 输出应包含:
# JobHistoryServer

验证 Web UI 访问

打开浏览器访问历史服务器 Web UI:http://hadoop1:19888

页面应显示已完成作业的列表,包括作业 ID、名称、状态等信息。

验证 YARN Web UI 关联

  1. 打开 YARN Web UI(http://<ResourceManager节点>:8088);
  2. 找到已完成的作业,点击 “History” 链接,应能跳转至历史服务器查看详细日志。

历史日志查询方式

Web UI 查询

在历史服务器 Web UI 中:

  • 点击作业 ID 可查看作业概览(如启动时间、完成时间、Map/Reduce 数量);
  • 点击 “Maps” 或 “Reduces” 可查看具体任务的日志(包括 stdoutstderr);
  • 点击 “Counters” 可查看作业计数器(如输入记录数、输出记录数)。

命令行查询

使用 mapred historyserver 相关命令查询日志:

1
2
3
4
5
6
7
8
# 查看作业历史信息  
mapred job -history <application_id>

# 查看作业详细日志(需历史服务器运行)
mapred job -history all <application_id>

# 查看历史服务器状态
mapred --daemon status historyserver

历史服务器运维与优化

日志存储管理

  • HDFS 目录权限:确保历史服务器有/mr-history目录的读写权限:
1
2
hdfs dfs -mkdir -p /mr-history/tmp /mr-history/done  
hdfs dfs -chmod -R 777 /mr-history
  • 日志清理:历史日志默认永久保留,需定期清理或配置 HDFS 生命周期管理(如通过 hdfs dfsadmin -setQuota 设置配额)。

性能优化

  • 内存配置:若历史服务器内存不足,可在mapred-env.sh中调整 JVM 内存:

    1
    export HADOOP_JOB_HISTORYSERVER_HEAPSIZE=1024  # 设置为 1GB  
  • 日志滚动:配置历史服务器自身日志的滚动策略(修改 $HADOOP_HOME/etc/hadoop/log4j.properties),避免本地磁盘占满。

关闭历史服务器

1
2
# 停止历史服务器  
$HADOOP_HOME/bin/mapred --daemon stop historyserver

常见问题排查

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. 历史日志不完整

  • 原因:作业未正常完成、历史服务器启动晚于作业提交;
  • 解决:确保作业正常完成后再停止历史服务器;提交作业前提前启动历史服务器。

欢迎关注我的其它发布渠道

表情 | 预览
快来做第一个评论的人吧~
Powered By Valine
v1.3.10