0%

历史服务器

Hadoop 历史服务器:作业跑完就消失?用它找回来

YARN Web UI 只能看到当前正在跑的作业。作业一旦完成,它就消失了——你看不到它跑了多久、占了多少资源、失败了为什么失败。

这就是历史服务器解决的问题:把已完成作业的日志和统计信息保存下来,方便事后追溯。

它只存 MapReduce 作业。Spark 有 Spark History Server,Flink 有 Flink History Server,各管各的。

历史服务器

核心配置:改两个文件

文件1: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
<!-- 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>

<!-- 作业运行时临时日志目录 -->
<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>/mr-history/tmp</value>
</property>

<!-- 作业完成后归档日志目录 -->
<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>/mr-history/done</value>
</property>

hadoop1 换成你实际部署历史服务器的那台机器的主机名。

文件2:yarn-site.xml——让 YARN Web UI 能跳转过来

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>

这条配置让 YARN Web UI 里的 “History” 链接能跳转到历史服务器。

创建 HDFS 目录

历史日志存 HDFS,先建好目录、给权限:

1
2
3
hdfs dfs -mkdir -p /mr-history/tmp
hdfs dfs -mkdir -p /mr-history/done
hdfs dfs -chmod -R 777 /mr-history

启动和验证

启动:

1
mapred --daemon start historyserver

验证进程:

1
2
jps
# 应该能看到 JobHistoryServer

验证 Web UI:

浏览器打开 http://hadoop1:19888,能看到已完成作业列表。

验证 YARN 跳转:

去 YARN Web UI(http://<RM节点>:8088),找个已完成的作业,点 “History” 链接,能跳转到历史服务器页面说明配置成功。

怎么查历史日志

方式1:Web UI

  • 打开 http://hadoop1:19888
  • 点击作业 ID 看概览(启动时间、完成时间、Map/Reduce 数量)
  • 点 “Maps” 或 “Reduces” 看具体任务的 stdout/stderr
  • 点 “Counters” 看计数器(输入记录数、输出记录数等)

方式2:命令行

1
2
3
4
5
# 查看作业概况
mapred job -history application_xxx_xxx

# 查看完整信息(包括任务详情)
mapred job -history all application_xxx_xxx

工作原理

1
2
3
4
5
6
7
8
9
作业运行中

日志写到 HDFS 临时目录(/mr-history/tmp)

作业完成

历史服务器把日志从临时目录移到归档目录(/mr-history/done)

用户通过 Web UI 或命令行查询

关键点:日志是作业运行时实时写的,不是作业完成后再收集的。 所以历史服务器必须提前启动,作业提交时它就得在。

常见问题

1. YARN Web UI 的 “History” 链接点不了或跳错

检查 yarn-site.xml 里的 yarn.log.server.url 是否配置正确,是不是能访问 http://hadoop1:19888

2. 历史服务器启动了,但看不到历史作业

历史服务器只记录它启动之后才完成的作业。如果是启动之前就跑完的作业,它没有记录。

3. HDFS 目录权限不足导致日志写不进去

检查 /mr-history/tmp/mr-history/done 的权限,确保运行 MapReduce 的用户有写权限。

4. 历史服务器内存不够

mapred-env.sh 里调大堆内存:

1
export HADOOP_JOB_HISTORYSERVER_HEAPSIZE=2048

5. 历史服务器关闭

1
mapred --daemon stop historyserver

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