diff options
author | vundela <vsr@cloudera.com> | 2015-10-20 11:12:28 -0700 |
---|---|---|
committer | Marcelo Vanzin <vanzin@cloudera.com> | 2015-10-20 11:12:28 -0700 |
commit | 2f6dd634c169a34811738a3c230cce4462612748 (patch) | |
tree | 32749f98c4df0f5970ba7d0cb2e3e3b11684593d | |
parent | e18b571c3374ecbfc0b20a5064cb58d57a2a7d21 (diff) | |
download | spark-2f6dd634c169a34811738a3c230cce4462612748.tar.gz spark-2f6dd634c169a34811738a3c230cce4462612748.tar.bz2 spark-2f6dd634c169a34811738a3c230cce4462612748.zip |
[SPARK-11105] [YARN] Distribute log4j.properties to executors
Currently log4j.properties file is not uploaded to executor's which is leading them to use the default values. This fix will make sure that file is always uploaded to distributed cache so that executor will use the latest settings.
If user specifies log configurations through --files then executors will be picking configs from --files instead of $SPARK_CONF_DIR/log4j.properties
Author: vundela <vsr@cloudera.com>
Author: Srinivasa Reddy Vundela <vsr@cloudera.com>
Closes #9118 from vundela/master.
-rw-r--r-- | docs/running-on-yarn.md | 5 | ||||
-rw-r--r-- | yarn/src/main/scala/org/apache/spark/deploy/yarn/Client.scala | 13 |
2 files changed, 17 insertions, 1 deletions
diff --git a/docs/running-on-yarn.md b/docs/running-on-yarn.md index 677c000044..db6bfa69ee 100644 --- a/docs/running-on-yarn.md +++ b/docs/running-on-yarn.md @@ -81,7 +81,7 @@ all environment variables used for launching each container. This process is use classpath problems in particular. (Note that enabling this requires admin privileges on cluster settings and a restart of all node managers. Thus, this is not applicable to hosted clusters). -To use a custom log4j configuration for the application master or executors, there are two options: +To use a custom log4j configuration for the application master or executors, here are the options: - upload a custom `log4j.properties` using `spark-submit`, by adding it to the `--files` list of files to be uploaded with the application. @@ -89,6 +89,9 @@ To use a custom log4j configuration for the application master or executors, the (for the driver) or `spark.executor.extraJavaOptions` (for executors). Note that if using a file, the `file:` protocol should be explicitly provided, and the file needs to exist locally on all the nodes. +- update the `$SPARK_CONF_DIR/log4j.properties` file and it will be automatically uploaded along + with the other configurations. Note that other 2 options has higher priority than this option if + multiple options are specified. Note that for the first option, both executors and the application master will share the same log4j configuration, which may cause issues when they run on the same node (e.g. trying to write diff --git a/yarn/src/main/scala/org/apache/spark/deploy/yarn/Client.scala b/yarn/src/main/scala/org/apache/spark/deploy/yarn/Client.scala index 754215db2a..4954b61809 100644 --- a/yarn/src/main/scala/org/apache/spark/deploy/yarn/Client.scala +++ b/yarn/src/main/scala/org/apache/spark/deploy/yarn/Client.scala @@ -497,6 +497,19 @@ private[spark] class Client( */ private def createConfArchive(): File = { val hadoopConfFiles = new HashMap[String, File]() + + // Uploading $SPARK_CONF_DIR/log4j.properties file to the distributed cache to make sure that + // the executors will use the latest configurations instead of the default values. This is + // required when user changes log4j.properties directly to set the log configurations. If + // configuration file is provided through --files then executors will be taking configurations + // from --files instead of $SPARK_CONF_DIR/log4j.properties. + val log4jFileName = "log4j.properties" + Option(Utils.getContextOrSparkClassLoader.getResource(log4jFileName)).foreach { url => + if (url.getProtocol == "file") { + hadoopConfFiles(log4jFileName) = new File(url.getPath) + } + } + Seq("HADOOP_CONF_DIR", "YARN_CONF_DIR").foreach { envKey => sys.env.get(envKey).foreach { path => val dir = new File(path) |