JobHistory Server的配置和启动
在 Hadoop 集群里,JobHistory Server(JHS)负责为所有已完成的 MapReduce 作业提供元数据与 Web 可视化;只有它启动并配置正确,开发者才能通过 http://<host>:19888
查看作业的执行详情、计数器和任务日志。下面文档按 CSDN 博文的常见结构,用 Markdown 给出 配置 + 启动 + 排错 的全流程示例,涵盖 Hadoop 2.x 与 3.x 两代命令差异,并列出默认端口、核心参数与常见错误定位方法。
JobHistory Server 是什么?
在 YARN 模式下,作业运行结束后,ApplicationMaster 会将中间日志推送到 HDFS 的 mapreduce.jobhistory.intermediate-done-dir
,而 JHS 定期扫描并读取日志,再提供查询 UI (docs.ezmeral.hpe.com, docs.ezmeral.hpe.com)。默认端口:
服务 | 端口 | 关键参数 |
---|---|---|
RPC 服务 | 10020 | mapreduce.jobhistory.address |
Web UI | 19888 | mapreduce.jobhistory.webapp.address |
这些端口可在 mapred-site.xml
中修改 (docs.ezmeral.hpe.com, o.onslip.net)。
关键配置(mapred-site.xml
)
<configuration><!-- RPC 绑定 --><property><name>mapreduce.jobhistory.address</name><value>0.0.0.0:10020</value></property><!-- Web UI 绑定 --><property><name>mapreduce.jobhistory.webapp.address</name><value>0.0.0.0:19888</value></property><!-- 历史文件目录(HDFS)--><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>
</configuration>
注意:目录必须提前建好并赋予 mapred 用户写权限,否则 JHS 启动后会报 “permission denied”。(Cloudera Community)
启动与停止命令
Hadoop 2.x(经典脚本)
# 进入 $HADOOP_HOME/sbin
./mr-jobhistory-daemon.sh start historyserver
./mr-jobhistory-daemon.sh stop historyserver
该脚本会自动读取 $HADOOP_CONF_DIR
下的配置并以 mapred 身份拉起进程,可用 jps
或 netstat -antp | grep 19888
验证进程与端口 (edureka.co, Stack Overflow)。
Hadoop 3.x(新统一命令)
# 任何节点以 mapred 用户执行
$HADOOP_HOME/bin/mapred --daemon start historyserver
$HADOOP_HOME/bin/mapred --daemon stop historyserver
Hadoop 3.x 弃用了 *-daemon.sh
脚本,官方推荐改用子命令 mapred --daemon
(hadoop.apache.org, GitHub)。
小技巧:若集群使用 systemd,可创建
/etc/systemd/system/hadoop-jhs.service
,在ExecStart
里调用同一命令,方便随操作系统启动。(GitHub)
校验 Web 界面
-
浏览器访问
http://<主机>:19888
。 -
查看 “Completed Jobs” 表格是否出现最近作业;若页面空白,说明历史文件目录配置或权限异常。(Stack Overflow, edureka.co)
-
点击某作业可查看 Map/Reduce 任务时间线、Counters 及 Logs 下载。(docs.cloudera.com)
常见错误与排查
错误日志 | 原因与解决 |
---|---|
UnknownHostException | 核心配置里写了无法解析的主机名;把 <host> 改成 FQDN 或 IP,并在 /etc/hosts 添加解析。(Cloudera Community) |
Incomplete HDFS URI | HDFS URI 拼写成 hdfs://host:9000:9000/... ;端口只能出现一次。修正为 hdfs://host:9000/... 。 |
端口 19888 未监听 | ① mapreduce.jobhistory.webapp.address 冲突;② 防火墙未放行;③ 进程因权限/目录问题崩溃,查看 $HADOOP_LOG_DIR/mapred-*.log |
页面仅显示失败任务 | <property name="yarn.log-aggregation-enable">true</property> 未开启或日志目录权限不足,导致 JHS 无法读取成功作业日志。(Stack Overflow) |
完整一键脚本(示例)
#!/bin/bash
# historyserver-manager.sh start|stop|statusCMD=$1
HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoopcase $CMD instart) sudo -u mapred $HADOOP_HOME/bin/mapred --daemon start historyserver ;;stop) sudo -u mapred $HADOOP_HOME/bin/mapred --daemon stop historyserver ;;status) jps | grep -q HistoryServer && echo "Running" || echo "Stopped" ;;*) echo "Usage: $0 {start|stop|status}" ;;
esac
结语
按照上文配置好 mapred-site.xml
、创建历史目录并开放端口后,启动脚本即可拉起 JobHistory Server,随后所有完成的 MapReduce 作业都会出现在 19888 Web 界面;借助 UI 能快速定位慢任务、查看 Counters 与 Shuffle 详情,从而优化作业性能。
参考资料
-
Edureka 问答:Hadoop 2.x 启动脚本示例(edureka.co)
-
StackOverflow:
mr-jobhistory-daemon.sh --config
参数说明(Stack Overflow) -
Hadoop 2.7.1
mapred-default.xml
参数文档(hadoop.apache.org) -
Hadoop 3.2.x
mapred-default.xml
参数文档(hadoop.apache.org) -
Cloudera 社区:JobHistory Server 常见报错分析(Cloudera Community)
-
HPE Ezmeral 官方示例
mapred-site.xml
(docs.ezmeral.hpe.com) -
Apache 官方 ClusterSetup(3.1.2)章节,提供新命令(hadoop.apache.org)
-
Edureka 文章:JobHistory Server WebUI 默认端口说明(edureka.co)
-
SAS 文档:历史服务参数在 MapR 6.0 中的配置(documentation.sas.com)
-
Hadoop 3.3.5 ClusterSetup:
mapred --daemon
用法(hadoop.apache.org) -
Hadoop 3.x MapredCommands 指南(含
hsadmin
管理命令)(hadoop.apache.org) -
Cloudera Runtime 7.3 文档:JHS UI 功能介绍(docs.cloudera.com)
-
Github Issue:-daemon.sh 脚本在 Hadoop 3 中已弃用(GitHub)
-
最新 stable 版本
mapred-default.xml
(HTTPS UI 端口)(hadoop.apache.org) -
Ambari 端口列表文档:10020/19888 定义(o.onslip.net)