如何使用log4j将日志记录到在YARN上运行的Spark应用程序内的本地文件系统?

Emr*_*inç 31 logging log4j hadoop-yarn apache-spark

我正在构建Apache Spark Streaming应用程序,并且在YARN上运行它时无法使其登录到本地文件系统上的文件.怎么能实现这个?

我已经设置了log4.properties文件,以便它可以成功写入/tmp本地文件系统目录中的日志文件(部分如下所示):

log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=/tmp/application.log
log4j.appender.file.append=false
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
Run Code Online (Sandbox Code Playgroud)

当我使用以下命令在本地运行我的Spark应用程序时:

spark-submit --class myModule.myClass --master local[2] --deploy-mode client myApp.jar
Run Code Online (Sandbox Code Playgroud)

它运行正常,我可以看到日志消息写入/tmp/application.log我的本地文件系统.

但是,当我通过YARN运行相同的应用程序时,例如

spark-submit --class myModule.myClass --master yarn-client  --name "myModule" --total-executor-cores 1 --executor-memory 1g myApp.jar
Run Code Online (Sandbox Code Playgroud)

要么

spark-submit --class myModule.myClass --master yarn-cluster  --name "myModule" --total-executor-cores 1 --executor-memory 1g myApp.jar
Run Code Online (Sandbox Code Playgroud)

/tmp/application.log在运行YARN的机器的本地文件系统上看不到任何内容.

我错过了什么

Bra*_*rad 25

[编辑以避免混淆]

看起来您需要附加启动任务/作业时使用的JVM参数.

尝试conf/spark-defaults.conf此处所述进行编辑

spark.executor.extraJavaOptions=-Dlog4j.configuration=file:/apps/spark-1.2.0/conf/log4j.properties

spark.driver.extraJavaOptions=-Dlog4j.configuration=file:/apps/spark-1.2.0/conf/log4j.properties
Run Code Online (Sandbox Code Playgroud)

或者尝试conf/spark-env.sh此处所述进行编辑以添加相同的JVM参数,尽管conf/spark-defaults.conf中的条目应该可用.

如果您仍然没有获得任何快乐,spark-submit如果文件包含在JAR文件和类路径的根目录中,则可以在命令行上显式传递log4j.properties文件的位置以及类似内容.

spark-submit --class sparky.MyApp --master spark://my.host.com:7077 --conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=log4j-executor.properties" myapp.jar
Run Code Online (Sandbox Code Playgroud)

如果文件不在您的类路径上,请使用这样的file:前缀和完整路径

spark-submit ... --conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=file:/apps/spark-1.2.0/conf/log4j-executor.properties" ...
Run Code Online (Sandbox Code Playgroud)

  • 是的,它应该是可能的.我试图通过剥离您正在使用的配置来帮助简化问题.我不是Spark的专家.我有一个独立的群集登录Windows主机. (2认同)

Cha*_*dra 8

使用spark.executor.extraJavaOptions指定log4j.properties的上述选项,spark.driver.extraJavaOptions只会在本地记录它,并且log4.properties应该在每个节点上本地存在.

https://spark.apache.org/docs/1.2.1/running-on-yarn.html文档中所述,您也可以使用--files选项将log4j.properties与您的应用程序一起上传.这将在HDFS上进行纱线聚合记录,您可以使用该命令访问日志

yarn logs -applicationId <application id>
Run Code Online (Sandbox Code Playgroud)