Spark服务端日志被截断,如何获取完整的异常事件日志?
Spark 异常日志截断问题解决方法
以下是可直接落地的解决路径:
1. 调整Spark日志框架输出配置
- 进入Spark部署目录的
conf文件夹,找到对应的日志配置文件:- 2.x之后的新版本Spark默认使用
log4j2.properties,旧版本使用log4j.properties
- 2.x之后的新版本Spark默认使用
- 修改日志输出的PatternLayout配置:
- 移除或调大
%maxLen参数的阈值,例如将默认的%maxLen{1024}修改为%maxLen{65536},即可支持最长64KB的单条日志 - 确保Pattern中包含
%throwable{full}配置项,强制打印完整异常栈,避免异常内容被截断
- 移除或调大
- 配置修改完成后重启对应的Spark服务/提交的作业即可生效
2. 调大Spark事件日志大小限制
如果是从Spark History Server查看或拉取日志被截断,需要修改spark-defaults.conf配置:
- 新增或修改配置项:
spark.eventLog.maxEventSize 16777216(即16MB,可根据实际日志大小调整数值) - 保存配置后重启Spark History Server生效
3. 调整部署环境的日志限制
如果使用YARN部署Spark作业,还需要对应调整YARN的日志规则:
- 修改YARN配置文件中的
yarn.log.max-size参数,调大单条日志的存储上限 - 如果通过
yarn logs命令行拉取日志,执行命令时增加--size_limit_mb参数,示例如下:
即可拉取最多100MB的对应应用日志,避免命令层面对返回结果截断yarn logs -applicationId application_xxxxxx_xxxx --size_limit_mb 100
4. 临时排查替代方案
如果不方便重启集群修改配置,可以直接登录作业运行的Driver或Executor节点查看本地原始日志:
- Spark standalone部署:日志默认存放在Spark安装路径的
logs/目录下,对应应用ID的日志文件 - YARN部署:容器本地日志默认存放在
/var/log/hadoop-yarn/containers/[对应容器ID]/路径下,原始日志不会被上层服务截断
内容的提问来源于stack exchange,提问作者Pavithra Venkatesan
相关产品推荐
相关产品推荐

