当前位置: 首页 > ai >正文

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 服务10020mapreduce.jobhistory.address
Web UI19888mapreduce.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 界面

  1. 浏览器访问 http://<主机>:19888

  2. 查看 “Completed Jobs” 表格是否出现最近作业;若页面空白,说明历史文件目录配置或权限异常。(Stack Overflow, edureka.co)

  3. 点击某作业可查看 Map/Reduce 任务时间线、Counters 及 Logs 下载。(docs.cloudera.com)


常见错误与排查

错误日志原因与解决
UnknownHostException核心配置里写了无法解析的主机名;把 <host> 改成 FQDN 或 IP,并在 /etc/hosts 添加解析。(Cloudera Community)
Incomplete HDFS URIHDFS 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 详情,从而优化作业性能。


参考资料

  1. Edureka 问答:Hadoop 2.x 启动脚本示例(edureka.co)

  2. StackOverflow:mr-jobhistory-daemon.sh --config 参数说明(Stack Overflow)

  3. Hadoop 2.7.1 mapred-default.xml 参数文档(hadoop.apache.org)

  4. Hadoop 3.2.x mapred-default.xml 参数文档(hadoop.apache.org)

  5. Cloudera 社区:JobHistory Server 常见报错分析(Cloudera Community)

  6. HPE Ezmeral 官方示例 mapred-site.xml(docs.ezmeral.hpe.com)

  7. Apache 官方 ClusterSetup(3.1.2)章节,提供新命令(hadoop.apache.org)

  8. Edureka 文章:JobHistory Server WebUI 默认端口说明(edureka.co)

  9. SAS 文档:历史服务参数在 MapR 6.0 中的配置(documentation.sas.com)

  10. Hadoop 3.3.5 ClusterSetup:mapred --daemon 用法(hadoop.apache.org)

  11. Hadoop 3.x MapredCommands 指南(含 hsadmin 管理命令)(hadoop.apache.org)

  12. Cloudera Runtime 7.3 文档:JHS UI 功能介绍(docs.cloudera.com)

  13. Github Issue:-daemon.sh 脚本在 Hadoop 3 中已弃用(GitHub)

  14. 最新 stable 版本 mapred-default.xml(HTTPS UI 端口)(hadoop.apache.org)

  15. Ambari 端口列表文档:10020/19888 定义(o.onslip.net)

http://www.xdnf.cn/news/3991.html

相关文章:

  • LCD,LED
  • 期末项目Python
  • GoogleTest:GMock初识
  • 嵌入式开发学习日志Day13
  • window 系统 使用ollama + docker + deepseek R1+ Dify 搭建本地个人助手
  • C++笔记之接口`Interface`
  • 恶心的win11更新DIY 设置win11更新为100年
  • 《赤色世界》彩蛋
  • 数据封装的过程
  • 分析atoi(),atol()和atof()三个函数的功能
  • 【今日三题】小红的口罩(小堆) / 春游(模拟) / 数位染色(01背包)
  • 【Bootstrap V4系列】学习入门教程之 组件-卡片(Card)
  • Linux怎么更新已安装的软件
  • sudo useradd -r -s /bin/false -U -m -d /usr/share/ollama ollama解释这行代码的含义
  • 1.openharmony环境搭建
  • osquery在网络安全入侵场景中的应用实战(二)
  • 关于毕业论文,查重,AIGC
  • QT6 源(78):阅读与注释滑动条 QSlider 的源码,其是基类QAbstractSlider 的子类,及其刻度线的属性举例
  • 算法热题——等价多米诺骨牌对的数量
  • 【实战教程】React Native项目集成Google ML Kit实现离线水表OCR识别
  • 【云备份】服务端业务处理模块设计与实现
  • 2025-04-18-文本相似度-菜鸟
  • LLM(17):计算所有输入 token 的注意力权重
  • 【C语言练习】023. 编写条件编译代码
  • 高速互联技术:NVLink和PCIe有什么区别
  • 信息系统项目管理师-软考高级(软考高项)​​​​​​​​​​​2025最新(七)
  • 深度学习系统学习系列【4】之反向传播(BP)四个基本公式推导
  • Jogging(ABC249-A-竞赛题解)
  • 【QT】QT安装
  • ​亚马逊云服务器技术全景解析:从基础架构到行业赋能​