spark 应用输出debug日志

问题:

yarn container 大量输出debug日志 –> 磁盘写满 –> nodemanager 识别该盘为bad disk -> 停止服务 -> spark task lost 。

container stdout:
spark 应用输出debug日志_第1张图片

排错过程:

  1. 查看spark log4j文件,yarn log 级别,应用代码是否设置日志级别,均无异常。
  2. 发现driver,executor日志输出表现不一致(driver成功加载,executor表现和配置不一致)
  3. 关闭从hdfs 获取jar包的方式,恢复正常。 定位问题为 jar 包问题(增加了jar包,怀疑日志相关的包版本不同或是错误加载了lo4j文件)
  4. 配置日志文件读取参数,防止加载到错误的log4j文件
    spark.files /path/to/container-log4j.properties
    spark.executor.extraJavaOptions -Dlog4j.configuration=container-log4j.properties -Dlog4j.debug=true
    发现container已经成功加载到指定的log4j配置文件,提示 classNotFound PatternLayoutBaseInfo.class ,查看是否jar包多版本问题,无果。
  5. 了解到 hdfs 上spark 自带的 slf4j-log4j12-1.7.16.jar 包由于和 spring boot logback 冲突被人工删除。

问题解决:

spring boot 去掉 logback 依赖,hdfs yarn_jars目录恢复 slf4j-log4j12-1.7.16.jar 。

改进:

对container日志大小进行限制 (1g):
log4j.appender.file.MaxFileSize=256MB
log4j.appender.file.MaxBackupIndex=4

你可能感兴趣的:(Spark)