Spark自定义log4j配置被默认集群配置覆盖问题求助
嘿,我遇到过类似的Spark日志配置被集群默认文件覆盖的问题,给你几个靠谱的解决方案,适配你用的Spark 2.1.1版本:
解决方案1:通过JVM参数直接指定log4j配置文件
集群默认的spark2-client/conf/log4j.properties会优先被driver加载,单纯用--files只能把配置文件分发到executor,没法覆盖driver的默认配置。你需要在spark-submit里同时指定driver和executor的JVM参数:
spark-submit \ --driver-java-options "-Dlog4j.configuration=file:///home/abcdadevadmin/spark_jar/log4j/log4j.properties" \ --conf spark.executor.extraJavaOptions="-Dlog4j.configuration=log4j.properties" \ --files file:///home/abcdadevadmin/spark_jar/log4j/log4j.properties \ --class com.abc.datalake.ingestion.DataCleansingValidation \ # 你的jar包路径和其他参数
- 对于driver:直接用本地绝对路径(
file://前缀不能少),因为driver运行在你提交任务的边缘节点上 - 对于executor:因为
--files已经把配置文件分发到每个executor的工作目录,所以直接写文件名即可
解决方案2:临时指定SPARK_CONF_DIR环境变量(推荐)
这个方法更干净,不会修改任何集群全局配置,只是让当前提交任务的会话优先加载你自定义的配置目录:
# 先设置环境变量,指向你的自定义配置目录 export SPARK_CONF_DIR=/home/abcdadevadmin/spark_jar/log4j # 再执行spark-submit spark-submit \ --class com.abc.datalake.ingestion.DataCleansingValidation \ # 你的jar包路径和其他参数
只要你的/home/abcdadevadmin/spark_jar/log4j目录下有log4j.properties,Spark就会优先加载这个文件,而不是集群默认的spark2-client/conf里的配置。
解决方案3:替换集群默认配置(不推荐,仅临时测试)
如果你有spark2-client/conf目录的写入权限,可以临时把你的自定义log4j.properties复制过去,但注意一定要备份原来的文件,用完后恢复,不然会影响其他用户的Spark任务日志配置:
# 备份默认配置 cp /path/to/spark2-client/conf/log4j.properties /path/to/spark2-client/conf/log4j.properties.bak # 复制自定义配置 cp /home/abcdadevadmin/spark_jar/log4j/log4j.properties /path/to/spark2-client/conf/ # 提交任务 spark-submit ... # 任务完成后恢复默认配置 cp /path/to/spark2-client/conf/log4j.properties.bak /path/to/spark2-client/conf/log4j.properties
额外注意事项
- 确保自定义
log4j.properties里的日志路径在所有executor节点上都存在且有写入权限,如果是本地路径,你需要提前在每个节点创建好;或者换成HDFS等分布式存储路径(比如hdfs:///user/yourname/spark/logs/),这样executor都能访问 - 检查你的log4j配置是否正确,比如要确保rootLogger绑定了自定义路径的appender,示例配置:
log4j.rootLogger=INFO, customFile # 自定义文件appender log4j.appender.customFile=org.apache.log4j.RollingFileAppender log4j.appender.customFile.File=/your/custom/local/path/spark_task.log log4j.appender.customFile.MaxFileSize=10MB log4j.appender.customFile.MaxBackupIndex=5 log4j.appender.customFile.layout=org.apache.log4j.PatternLayout log4j.appender.customFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
内容的提问来源于stack exchange,提问作者phani
相关产品推荐
相关产品推荐

