0017-Spark的HistoryServer不能查看到所有历史作业分析

本文详细描述了Spark HistoryServer无法显示新提交作业日志的问题。问题在于作业日志目录的组权限设置不当,导致HistoryServer无法访问。通过调整目录权限至正确组别,成功解决了访问问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

1.问题描述

Spark的HistoryServer能正常查看之前的历史作业日志,但新提交的作业在执行完成后未能在HistoryServer页面查看。

2.问题复现

1.分别使用root和ec2-user用户执行作业

2.通过sparkHistory Server可以正常查看到所有历史作业

3.将/user/spark/applicationHistory目录的所属组修改为supergroup,再次执行作业

sudo –u hdfs hadoop dfs –chown spark:supergroup /user/spark/applicationHistroy

作业执行完成

HDFS上正常记录了spark作业日志,但作业所属group为supergroup

sparkHistoryServer报异常,没有权限访问历史job目录

4.在History Server未查看到刚执行完成的007作业

3.问题原因

由于/user/spark/applicationHistory目录的所属组为supergroup,导致所有用户作业的目录均为supergroup组,之前能正常查看的历史作业由于目录的所属组任为spark。

4.解决方法

将/user/spark/applicationHistory目录及该目录下的子目录所属组修改为spark

sudo –u hdfs hadoop dfs –chgrp –R spark /user/spark/applicationHistory

修改后所有历史作业均可正常查看

醉酒鞭名马,少年多浮夸! 岭南浣溪沙,呕吐酒肆下!挚友不肯放,数据玩的花!
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

<think>嗯,用户问的是关于sbin/start-history-server.sh启动失败的问题。我需要根据提供的引用资料来分析可能的原因和解决方案。首先,先看看引用内容提到了哪些相关信息。 引用[1]提到启动历史服务器时无法正常启动,报错。然后他们启动master和worker,接着启动历史服务。可能的问题可能和Spark的配置有关,或者依赖的服务没有启动。比如,如果Hadoop的JobHistory Server没有启动,Spark历史服务可能依赖这个? 引用[2]和[3]提到用mr-jobhistory-daemon.sh start historyserver来启动Hadoop的JobHistory服务。这说明在Hadoop环境中,JobHistory Server可能需要手动启动,而如果没有启动的话,Spark历史服务器可能无法正常工作,导致启动失败。所以用户可能没有启动Hadoop的JobHistory Server,需要先启动这个服务。 引用[4]提到新版的Hadoop脚本在sbin下,旧的start-all.sh已经废弃。可能用户使用的版本不同,或者路径配置有问题。比如,可能环境变量没有正确设置,导致找不到相关的脚本或者配置文件。 引用[5]是关于Hadoop的start-dfs.sh执行后NameNode未启动的问题,这说明有时候服务启动失败可能是因为依赖的进程没有正确启动。比如,HDFS的NameNode或DataNode没有启动,导致历史服务器无法访问所需的存储。 所以综合起来,可能的失败原因有几个方向: 1. Hadoop的JobHistory Server未启动。需要先用mr-jobhistory-daemon.sh启动这个服务,然后再启动Spark历史服务器。 2. 配置文件错误,比如spark-defaults.conf中的事件日志路径配置不正确,或者Hadoop的配置有误。 3. 端口冲突,历史服务器默认端口被占用,需要检查端口18080是否可用。 4. 权限问题,比如日志目录的权限不足,Spark无法写入事件日志。 5. 依赖服务未启动,比如HDFS的NameNode或YARN的ResourceManager没有运行,导致历史服务器无法获取必要的信息。 解决方案步骤可能包括: - 检查并启动Hadoop的JobHistory Server,使用提供的命令。 - 验证Spark和Hadoop的配置文件是否正确,特别是事件日志路径和端口设置。 - 检查端口占用情况,更换端口或释放被占用的端口。 - 确保日志目录存在且有正确的权限。 - 确保HDFS和YARN的相关服务已经启动。 用户可能需要按照这些步骤逐一排查,先启动Hadoop的JobHistory,再检查Spark配置,然后处理权限和端口问题。同时,查看具体的错误日志可以帮助确定具体原因,比如通过查看Spark的日志文件中的报错信息。</think>### 原因分析 `sbin/start-history-server.sh` 启动失败可能由以下原因导致: 1. **Hadoop JobHistory Server未启动** Spark历史服务依赖Hadoop的JobHistory Server来展示完整作业日志。若未启动该服务,会直接导致启动失败[^3]。 2. **配置文件缺失或错误** - Spark未正确配置事件日志路径(`spark.eventLog.enabled` 和 `spark.eventLog.dir`)[^1]。 - Hadoop配置文件(如`core-site.xml`、`hdfs-site.xml`)中HDFS地址或端口未正确设置[^5]。 3. **端口冲突或权限问题** - 默认端口`18080`被占用。 - 日志目录(如`hdfs:///spark-logs`)权限不足,导致无法写入事件日志[^1]。 4. **依赖服务未运行** HDFS的NameNode、DataNode或YARN的ResourceManager未启动。 --- ### 解决方案 #### 步骤1:启动Hadoop JobHistory Server 执行以下命令(需在Hadoop安装目录下): ```bash mr-jobhistory-daemon.sh start historyserver ``` 验证是否启动成功: ```bash jps # 查看进程列表中应有 JobHistoryServer ``` 若未启动,检查Hadoop配置并确保YARN已运行[^2]。 #### 步骤2:检查Spark事件日志配置 编辑`$SPARK_HOME/conf/spark-defaults.conf`,确保包含以下配置: ``` spark.eventLog.enabled true spark.eventLog.dir hdfs://<namenode>:8020/spark-logs ``` 替换`<namenode>`为实际HDFS NameNode地址,并创建目录: ```bash hdfs dfs -mkdir /spark-logs hdfs dfs -chmod 777 /spark-logs ``` #### 步骤3:排查端口冲突 检查端口`18080`是否被占用: ```bash netstat -tlnp | grep 18080 ``` 若冲突,修改`$SPARK_HOME/conf/spark-env.sh`中的端口: ```bash export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18081" ``` #### 步骤4:验证依赖服务 确保以下服务已启动: - HDFS: `start-dfs.sh`(验证NameNode、DataNode) - YARN: `start-yarn.sh`(验证ResourceManager、NodeManager) - Spark集群: `start-master.sh`和`start-workers.sh` #### 步骤5:查看日志定位问题 检查Spark历史服务日志: ```bash tail -f $SPARK_HOME/logs/spark-<user>-org.apache.spark.deploy.history.HistoryServer-<hostname>.out ``` 根据日志中的错误提示(如权限拒绝、连接超时)进一步调整配置或权限。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值