You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何过滤Python/PySpark应用中非自定义日志源的INFO级日志?

过滤Spark日志保留自定义INFO输出的简便方法

有两种高效方式可以实现需求,一种是事后过滤已有日志文件,另一种是从日志配置源头控制输出,按需选择即可:

一、事后过滤已生成的日志文件

如果已经产生大量冗余日志,直接用命令行工具快速筛选最简便:

  • 按自定义日志的Logger名称匹配(比如你的自定义日志用com.myapp作为包名):
    grep "INFO com.myapp" /var/log/yarn/userlogs/application_1683930949263_0001/container_1683930949263_0001_01_000009/stderr
    
  • 如果自定义日志内容有独特业务标识,直接匹配关键词:
    grep "你的业务专属关键词" /var/log/yarn/userlogs/application_1683930949263_0001/container_1683930949263_0001_01_000009/stderr
    
  • 更灵活的筛选可用awk,精准保留包含自定义Logger的INFO日志:
    awk '/INFO com.myapp/ {print $0}' /var/log/yarn/userlogs/application_1683930949263_0001/container_1683930949263_0001_01_000009/stderr
    

二、从日志配置源头控制(彻底解决日志淹没问题)

修改Spark日志配置,让非自定义组件直接不输出INFO级内容,从根源减少冗余:

  1. 复制并修改Log4j配置文件:
    复制Spark默认日志模板($SPARK_HOME/conf/log4j.properties.template)到conf目录,重命名为log4j.properties,添加以下配置:

    # 将Spark、Hadoop等第三方组件日志级别设为WARN,屏蔽INFO输出
    log4j.logger.org.apache.spark=WARN
    log4j.logger.org.apache.hadoop=WARN
    log4j.logger.org.spark_project=WARN
    log4j.logger.io.netty=WARN
    
    # 仅开启自定义包的INFO级别日志
    log4j.logger.com.myapp=INFO
    

    把com.myapp替换成你实际的自定义日志包名/Logger名称。

  2. 提交应用时指定配置:
    用spark-submit提交应用时,通过参数让Driver和Executor都加载该配置:

    spark-submit \
      --conf spark.driver.extraJavaOptions="-Dlog4j.configuration=file:/path/to/your/log4j.properties" \
      --conf spark.executor.extraJavaOptions="-Dlog4j.configuration=file:/path/to/your/log4j.properties" \
      --class com.myapp.YourMainClass \
      your-app.jar
    

    若在YARN集群运行,需将配置文件上传至HDFS,路径改为hdfs:///path/to/log4j.properties,确保所有Executor可访问。

内容的提问来源于stack exchange,提问作者Bar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 11:22:19