spark-submit,如何指定log4j.properties

时间:2017-02-14 15:38:09

标签: apache-spark

在spark-submit中,如何指定log4j.properties?

这是我的脚本。我已经尝试了所有组合,甚至只使用一个本地节点。但看起来没有加载log4j.properties,所有调试级别信息都被转储。

current_dir=/tmp
DRIVER_JAVA_OPTIONS="-Dlog4j.configuration=file://${current_dir}/log4j.properties "

spark-submit \
--conf "spark.driver.extraClassPath=$current_dir/lib/*"  \
--conf "spark.driver.extraJavaOptions=-Djava.security.krb5.conf=${current_dir}/config/krb5.conf -Djava.security.auth.login.config=${current_dir}/config/mssqldriver.conf" \
--conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=file://${curent_dir}/log4j.properties " \
--class "my.AppMain" \
--files ${current_dir}/log4j.properties \
--master local[1] \
--driver-java-options "$DRIVER_JAVA_OPTIONS" \
--num-executors 4 \
--driver-memory 16g \
--executor-cores 10 \
--executor-memory 6g \
$current_dir/my-app-SNAPSHOT-assembly.jar

log4j属性:

log4j.rootCategory=INFO, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

log4j.additivity.org=false

log4j.logger.org=WARN
parquet.hadoop=WARN
log4j.logger.com.barcap.eddi=WARN
log4j.logger.com.barcap.mercury=WARN
log4j.logger.yarn=WARN
log4j.logger.io.netty=WARN
log4j.logger.Remoting=WARN   
log4j.logger.org.apache.hadoop=ERROR

# this disables the table creation logging which is so verbose
log4j.logger.hive.ql.parse.ParseDriver=WARN

# this disables pagination nonsense when running in combined mode
log4j.logger.com.barcap.risk.webservice.servlet.PaginationFactory=WARN

6 个答案:

答案 0 :(得分:4)

请注意,Spark worker不是您的Java应用程序,因此您不能使用类路径中的log4j.properties文件。

要了解YARN上的Spark如何读取log4j.properties文件,可以使用log4j.debug=true标志:

spark.executor.extraJavaOptions=-Dlog4j.debug=true

大多数情况下,错误是无法从辅助YARN容器中找到/找到该文件。有一个非常有用的Spark指令可以共享文件:--files

--files "./log4j.properties"

这将使您的所有驱动程序/工作者都可以使用此文件。添加Java额外选项:

-Dlog4j.configuration=log4j.properties

等等!

log4j: Using URL [file:/var/log/ambari-server/hadoop/yarn/local/usercache/hdfs/appcache/application_1524817715596_3370/container_e52_1524817715596_3370_01_000002/log4j.properties] for automatic log4j configuration.

答案 1 :(得分:2)

  1. 将spark-defaults.conf复制到新的app-spark-defaults.conf
  2. 将-Dlog4j.configuration = file://log4j.properties添加到app-spark-defaults.conf中的spark.driver.extraJavaOptions。例如:

    spark.driver.extraJavaOptions -XXOther_flag -Dlog4j.configuration = file://log4j.properties

  3. 使用--properties-file将spark运行到新的conf文件中。 例如:
    spark-submit --properties-file app-spark-defaults.conf --class my.app.class --master yarn --deploy-mode client~ / my-jar.jar

答案 2 :(得分:1)

只需添加, 您可以通过spark-submit直接传递conf,无需修改默认的conf文件

-conf spark.driver.extraJavaOptions = -Dlog4j.configuration = file:///export/home/siva/log4j.properties

我在命令下运行,效果很好

/ usr / hdp / latest / spark2 / bin / spark-submit --master local [*] --files〜/ log4j.properties --conf spark.sql.catalogImplementation = hive --conf spark.driver.extraJavaOptions = -Dlog4j.configuration =文件:///export/home/siva/log4j.properties〜/ SCD / spark-scd-assembly-1.0.jar test_run

注意:如果您在conf文件中配置了额外的Java选项,则只需追加并提交

答案 3 :(得分:0)

如何传递本地log4j.properties文件

正如我从您的脚本中看到的那样,您想要执行以下操作:

  1. 将本地log4j.properties传递给执行者
  2. 将此文件用于节点的配置。

请注意有关--files设置的两件事:

  1. 使用--files上传到spark-cluster的文件将在根目录下可用,因此无需在file:log4j.properties中添加任何路径。
  2. -files中列出的文件必须提供绝对路径!

现在修复片段很简单:

current_dir=/tmp
log4j_setting="-Dlog4j.configuration=file:log4j.properties"

spark-submit \
...
--conf "spark.driver.extraJavaOptions=${log4j_setting}" \
--conf "spark.executor.extraJavaOptions=${log4j_setting}" \
--class "my.AppMain" \
--files ${current_dir}/log4j.properties \
...
$current_dir/my-app-SNAPSHOT-assembly.jar

需要更多吗?

如果您想了解使用spark-submit时配置日志记录的其他方法,请访问我的其他详细答案:https://stackoverflow.com/a/55596389/1549135

答案 4 :(得分:0)

纱线火花解决方案

对我来说,在纱线上放火花,只需添加--files log4j.properties 就可以了。
1.确保运行spark-submit的目录包含文件“ log4j.properties”。
2.运行spark-submit ... --files log4j.properties

让我们看看为什么能这样做

1.spark-submit将像这样将log4j.properties上传到hdfs

20/03/31 01:22:51 INFO Client: Uploading resource file:/home/ssd/homework/shaofengfeng/tmp/firesparkl-1.0/log4j.properties -> hdfs://sandbox/user/homework/.sparkStaging/application_1580522585397_2668/log4j.properties

2。当yarn启动驱动程序或执行程序的容器时,yarn将下载所有上传到节点本地文件缓存中的文件,包括$ {spark_home} / jars,$ {spark_home} / conf和$ {hadoop_conf_dir}下的文件以及指定的文件通过--jars和--files。
3.在启动器容器之前,纱线输出类路径并进行这样的软链接

export CLASSPATH="$PWD:$PWD/__spark_conf__:$PWD/__spark_libs__/*:$HADOOP_CONF_DIR:/usr/hdp/current/hadoop-client/*:/usr/hdp/current/hadoop-client/lib/*:/usr/hdp/current/hadoop-hdfs-client/*:/usr/hdp/current/hadoop-hdfs-client/lib/*:/usr/hdp/current/hadoop-yarn-client/*

ln -sf "/var/hadoop/yarn/local/usercache/homework/filecache/1484419/log4j.properties" "log4j.properties"
hadoop_shell_errorcode=$?
if [ $hadoop_shell_errorcode -ne 0 ]
then
  exit $hadoop_shell_errorcode
fi
ln -sf "/var/hadoop/yarn/local/usercache/homework/filecache/1484440/apache-log4j-extras-1.2.17.jar" "apache-log4j-extras-1.2.17.jar"

4。在步骤3之后,“ log4.properties”已经在CLASSPATH中,无需进行设置 spark.driver.extraJavaOptions或spark.executor.extraJavaOption。

答案 5 :(得分:-2)

如果这只是一个自学项目或小型开发项目,hadoop_home / conf中已经有一个log4j.properties。只需编辑一个,添加自己的记录器

相关问题