2015-06-24 43 views
2

我試圖重寫YARN容器日誌使用自定義log4j.properties格式化重寫集裝箱原木紗,但我不能這樣做。要使用自定義的log4j

我試圖覆蓋中的container-log4j.properties,然後更換jar,但沒有任何效果。

我也嘗試將自己的container-log4j.properties文件放在位置/etc/hadoop/conf中,以使其在classpath中覆蓋。

我使用HDP(Hortonworks)2.2分佈。 基本上我試圖把插座appender放在container-log4j.properties,以便分析Logstash中的容器日誌。

我缺少的東西或使用錯誤的屬性文件或有任何其他方式?

回答

0

我爲Hadoop 2.6做了這個。所以這可能不適用於你的情況。 我意識到這個問題已經有近一年沒有答案。但它仍然是地回答這些誰都會谷歌的問題有用的(像我一樣)

Hadoop的使用log4j。據log4j文檔有一個系統屬性log4j.debug我覺得這是非常有用的(更多:http://logging.apache.org/log4j/1.2/faq.html#noconfig

這個性能使log4j的初始化詳細輸出,這使我得到更好的理解在我的映射器的log4j的獲取其配置。

而且我用的是PI計算器的工作作爲一個小的工作,試圖重寫記錄。

我發起

yarn jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi -Dmapreduce.map.java.opts='-Dlog4j.debug' 3 10000 

和我有

log4j: Trying to find [container-log4j.properties] using context classloader [email protected] 
log4j: Using URL [jar:file:/usr/lib/hadoop-yarn/hadoop-yarn-server-nodemanager-2.6.0-cdh5.5.0.jar!/container-log4j.properties] for automatic log4j configuration. 
log4j: Reading configuration from URL jar:file:/usr/lib/hadoop-yarn/hadoop-yarn-server-nodemanager-2.6.0-cdh5.5.0.jar!/container-log4j.properties 
log4j: Hierarchy threshold set to [ALL]. 
log4j: Parsing for [root] with value=[WARN,CLA, EventCounter]. 
log4j: Level token is [WARN]. 
log4j: Category root set to WARN 
log4j: Parsing appender named "CLA". 
log4j: Parsing layout options for "CLA". 
log4j: Setting property [conversionPattern] to [%d{ISO8601} %p [%t] %c: %m%n]. 
log4j: End of parsing for "CLA". 
log4j: Setting property [containerLogDir] to [/hdfs/uuid/77fc1684-1751-4bf0-b474-5de75130dc23/yarn/logs/application_1467803702064_1954/container_e12_1467803702064_1954_01_000002]. 
log4j: Setting property [totalLogFileSize] to [0]. 
log4j: setFile called: /hdfs/uuid/77fc1684-1751-4bf0-b474-5de75130dc23/yarn/logs/application_1467803702064_1954/container_e12_1467803702064_1954_01_000002/syslog, true 
log4j: setFile ended 
log4j: Parsed "CLA" options. 
log4j: Parsing appender named "EventCounter". 
log4j: Parsed "EventCounter" options. 
log4j: Finished configuring. 

因此可以看出,log4j的需要從Hadoop的紗服務器節點管理器-2.6.0-cdh5.5.0配置.JAR

我提取該文件

jar xf hadoop-yarn-server-nodemanager-2.6.0-cdh5.5.0.jar container-log4j.properties 

修改它並放在我的目錄中。剩下的只是找出在類路徑中放在hadoop-yarn-server-nodemanager-2.6.0-cdh5.5.0.jar之前的地方。

不幸的是作業jar本身是類路徑中的最後一個。因此,通過將修改後的container-log4j.properties作爲jar的資源來覆蓋配置是不可能的。

不過幸運的是與用戶的緩存文件夾是在classpath第一。所以 我加

log4j.logger.org.apache.hadoop.conf=ERROR 

到config擺脫所有這些警告的有關使用過時的屬性 事後並使用

arn jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar pi -files ./container-log4j.properties -Dmapreduce.map.java.opts='-Dlog4j.debug' 3 10000 

瞧重新啓動工作!沒有來自org.apache.hadoop.conf的警告。

享受