2017-05-19 27 views
2

我试图在EMR集群中运行一个spark任务。如何指定火花提交到Amazon EMR时自定义log4j.configuration的位置?

我我的火花提交我已经加入CONFIGS从log4j.properties

--files log4j.properties --conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=file:/log4j.properties" 

而且我在log4j的配置添加

log4j.rootLogger=INFO, file 
log4j.appender.file=org.apache.log4j.RollingFileAppender 
log4j.appender.file.File=/log/test.log 
log4j.appender.file.MaxFileSize=10MB 
log4j.appender.file.MaxBackupIndex=10 
log4j.appender.file.layout=org.apache.log4j.PatternLayout 
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %5p %c{7} - %m%n 

阅读。

无论如何,我看到控制台中的日志,但我没有看到生成的日志文件。我在这里做错了什么?

回答

2

报价spark-submit --help

--files FILES逗号分隔的文件列表将被放置在每个执行人的工作目录。执行者中的这些文件的文件路径可以通过SparkFiles.get(fileName)访问。

这并不多说什么与FILES做,如果你不能使用SparkFiles.get(fileName)(你不能为log4j的)。

报价SparkFiles.getscaladoc

获取文件的绝对路径通过SparkContext.addFile()增加。

这不会给你太多要么,但建议看看在source code of SparkFiles.get

def get(filename: String): String = 
    new File(getRootDirectory(), filename).getAbsolutePath() 

关于它的好处是,getRootDirectory()uses an optional property or just the current working directory

def getRootDirectory(): String = 
    SparkEnv.get.driverTmpDir.getOrElse(".") 

这给了一些工作,不是吗?

驾驶员的所谓driverTmpDir目录应该很容易在网络用户界面的环境选项卡来查找(下星火属性spark.files财产或类路径项标记为“添加到用户”中源列)。

在遗嘱执行人,我承担本地目录,从而而非使用file:/log4j.properties我会使用

-Dlog4j.configuration=file://./log4j.properties 

-Dlog4j.configuration=file:log4j.properties 

注意点指定本地工作目录(在第一个选项中)或者没有领先的/(在后者中)。

不要忘记spark.driver.extraJavaOptions为驱动程序设置Java选项,如果这是你还没有想过的事情。到目前为止,你只关注执行者。

您可能需要将-Dlog4j.debug=true添加到spark.executor.extraJavaOptions,该值应打印log4j使用的位置以找到log4j.properties


我没有检查一个EMR或纱线集群上这个问题的答案,但我认为,可能给你一些提示在哪里可以找到答案。 手指划过!

+0

spark-submit --class com.myapp.cloud.app.UPApp - 主纱 - 部署模式客户端 - 驱动程序内存4g - 执行程序 - 内存2g --executor-cores 8 - 文件log4j .properties --conf“spark.executor.extraJavaOptions = -Dlog4j.configuration = file://./log4j.properties”--conf“spark.eventLog.dir =/mnt/var/log /”uber-up-0.0 .jar我试图运行这个仍然我没有看到在/log/test.log位置创建的任何日志文件 –

0

这里是我用来在EMR中运行我的超级jar的完整命令,我看到在驱动程序和执行程序节点中生成的日志文件。

spark-submit --class com.myapp.cloud.app.UPApp - 主线 - 部署模式客户端 - 驱动程序内存4g - 执行程序 - 内存2g --executor-cores 8 - 文件log4j.properties --conf“spark.executor.extraJavaOptions = -Dlog4j.configuration = file:log4j.properties”--conf“spark.driver.extraJavaOptions = -Dlog4j.configuration = file:log4j.properties -Dlog4j.debug = true “--conf”spark.executor.extraJavaOptions = -Dlog4j.configuration = file:log4j.properties“--conf”spark.eventLog.dir =/mnt/var/log /“uber-up-0.0.1.jar

其中log4j.properties位于我的本地文件系统中。

相关问题