2017-05-19 59 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位於我的本地文件系統中。

相關問題