hadoop启动历史服务器
- 行业动态
- 2025-05-08
- 2
执行
stop-yarn.sh
停止YARN,运行 mr-jobhistory --daemon start historyserver
启动历史服务器,通过 jps
命令验证进程是否
Hadoop启动历史服务器详细指南
历史服务器的作用与定位
Hadoop历史服务器(HistoryServer)是MapReduce框架的核心组件之一,主要负责收集和展示已完成作业的运行信息,它通过接收JobTracker或ResourceManager传递的作业执行数据,为用户提供可视化的作业监控界面,与JobTracker不同,历史服务器不参与作业调度,仅用于查询历史记录。
启动历史服务器的前提条件
在启动历史服务器前,需确保以下环境准备完成:
检查项 | 具体要求 |
---|---|
Hadoop集群状态 | YARN或MapReduce集群已正常运行,至少完成一次成功的作业提交 |
配置文件完整性 | historyserver.properties 、yarn-site.xml 等配置文件存在且参数正确 |
环境变量配置 | HADOOP_HOME 、JAVA_HOME 、HADOOP_CONF_DIR 等环境变量已正确设置 |
数据目录权限 | /var/lib/hadoop-yarn (默认)目录具有读写权限 |
网络连通性 | 历史服务器所在节点能访问ResourceManager和Timeline Server(若启用) |
启动历史服务器的两种方式
Hadoop提供两种启动方式:通过命令行直接启动,或作为守护进程启动。
命令行直接启动
$ HADOOP_HOME/sbin/mr-jobhistory-daemon.sh start historyserver
- 参数说明:
start
表示立即启动,stop
用于关闭,restart
用于重启 - 输出特征:启动成功后会显示类似
JobHistoryServer started
的提示,并打印RPC端口号(默认10020)
作为守护进程启动
$ HADOOP_HOME/sbin/hadoop-daemon.sh start jobtracker --host <hostname> --port <port> --config <conf_dir>
- 适用场景:需要自定义端口或主机名时使用
- 典型配置:
--host 192.168.1.100 --port 10030 --config /etc/hadoop/conf
关键配置文件解析
历史服务器的核心配置集中在historyserver.properties
和yarn-site.xml
中:
配置项 | 默认值 | 作用描述 |
---|---|---|
mapreduce.jobhistory.address | 0.0.0:10020 | 指定历史服务器的监听地址 |
mapreduce.jobhistory.done.dir | /tmp/hadoop-yarn/staging | 存储已完成作业数据的本地目录 |
mapreduce.jobhistory.intermediate.done.dir | /tmp/hadoop-yarn/intermediate | 存储中间状态数据的临时目录 |
mapreduce.jobhistory.max.job.count | 无限制 | 保留的历史作业数量上限(需手动设置) |
mapreduce.jobhistory.webapp.address | 0.0.0:19888 | Web UI的访问地址 |
高级配置示例:
<property> <name>mapreduce.jobhistory.address</name> <value>192.168.1.10:10030</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>192.168.1.10:19888</value> </property>
多集群环境下的特殊配置
当需要为多个Hadoop集群部署独立的历史服务器时,需注意:
- 修改
mapreduce.jobhistory.address
为唯一端口 - 在
yarn-site.xml
中设置不同的yarn.resourcemanager.address
- 使用不同数据目录避免数据混淆
启动过程日志分析
启动过程中的关键日志文件:
- 启动日志:
$HADOOP_LOG_DIR/userlogs/historyserver-.log
- 错误日志:
$HADOOP_LOG_DIR/jobhistory/current/JobHistory.log
- 典型错误及解决方案:
错误代码 | 原因分析 | 解决方案 |
---|---|---|
java.net.BindException: Address already in use | 端口10020已被占用 | 修改mapreduce.jobhistory.address 端口或终止占用进程 |
org.apache.hadoop.security.AccessControlException | 数据目录权限不足 | 使用chmod -R 755 /var/lib/hadoop-yarn 修正权限 |
java.io.IOException: No space left on device | 存储目录磁盘空间耗尽 | 清理/tmp/hadoop-yarn 目录下过期数据或扩展磁盘空间 |
历史服务器Web UI功能详解
启动成功后,可通过http://<server>:19888
访问Web界面,主要功能模块包括:
功能模块 | 作用描述 |
---|---|
作业列表页 | 展示所有已完成作业的ID、状态、启动时间、结束时间、运行地图/减少任务数 |
作业详情页 | 显示单个作业的完整执行流程,包括各个阶段的时间消耗、资源使用情况 |
任务尝试记录 | 记录每个Map/Reduce任务的多次执行尝试(成功/失败/跳过) |
资源使用统计 | 展示作业执行期间的CPU、内存、IO等资源消耗曲线 |
过滤器功能 | 支持按作业ID、用户、提交时间等条件筛选历史记录 |
历史数据清理策略
长期运行的历史服务器会积累大量作业数据,建议配置以下参数:
<property> <name>mapreduce.jobhistory.done.dir</name> <value>/data/hadoop/history/done</value> </property> <property> <name>mapreduce.jobhistory.intermediate.done.dir</name> <value>/data/hadoop/history/intermediate</value> </property> <property> <name>mapreduce.jobhistory.max.job.count</name> <value>10000</value> <!-保留最近10000个作业记录 --> </property>
可编写定时脚本通过hdfs dfs -rm -r
定期清理HDFS中的旧数据。
高可用性部署方案
对于7×24小时运行的集群,建议采用以下高可用方案:
- 主备模式:部署两台历史服务器,通过负载均衡器切换访问
- 数据热备:配置共享存储目录(如NFS),实现数据实时同步
- 自动故障转移:使用ZooKeeper监控服务状态,异常时自动启动备用实例
常见问题FAQs
Q1:如何验证历史服务器是否成功启动?
A1:可通过以下方式验证:
- 使用
jps
命令查看是否存在JobHistory
进程 - 访问Web UI(默认19888端口)查看是否能加载页面
- 检查YARN ResourceManager的日志是否包含
historyserver
连接信息 - 执行
curl http://<server>:19888/ws/v1/history/mapreduce/jobs
查看是否能返回JSON数据
Q2:历史服务器端口10020被防火墙拦截如何处理?
A2:解决方案包括:
- 在防火墙规则中开放10020端口(RPC通信)和19888端口(Web UI)
- 修改
mapreduce.jobhistory.address
为未被占用的高端口号(如10030) - 配置反向代理服务器(如Nginx)转发请求到历史服务器
- 检查云服务商安全组规则