2015-04-16 112 views
1

我編寫了在hadoop(2.1或2.2)上運行的類,作爲配置單元UDF/UDTF查詢的一部分。最終它作爲Map/Reduce作業運行。 應用程序執行各種任務,我想根據日誌級別添加日誌記錄。什麼是Hadoop MapReduce java類中的最佳記錄方法?

我想知道什麼是最好的方式(或正確的方式)這樣做。 顯然,我不希望日誌駐留在未收集數據節點上的某個文件中。我希望hadoop收集日誌,以便我們能夠從中心位置(如作業跟蹤器)查看所有日誌。

選項1:直向前記錄解決方案 - 打印到System.out/System.err的 我看到很多論壇上提的印刷系統出或系統錯誤的,但是這將意味着我們的發展與自己的日誌機制調試級別等等

System.out.println("my log message"); 

選項2:使用Hadoop的log4j的公共記錄 其他職位提使用Apache公共記錄。

import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 
private static final Log LOG = LogFactory.getLog(MgrsIndexCommon.class); 
LOG.trace(「my logging message」); 

我用它,它工作,但我沒有權限修改記錄器配置文件。 我正在考慮添加一個功能,使我的應用程序配置文件中具有日誌級別,並從java代碼修改日誌級別。 順便說一下,我沒有在我的pom.xml中添加一個依賴項到log4j,並且我使用了hadoop庫中的一個。

如果有人使用此選項,那麼您是如何配置記錄器的?

選項-3:log4j 2 一些建築師說過,我們應該考慮加入log4j的2依賴,並使用它。這方面有什麼建議嗎?如果hadoop使用log4j,我可以帶上我自己的log4j 2並使用它寫入hadoops日誌?

在我繼續之前,我想看看是否有人有很好的建議。

謝謝。

回答

0

我更喜歡java.util.logging.Logger,它會收集作業跟蹤器中的日誌。

對於調試java map reduce文件,您可以使用每個類(驅動程序,映射器,縮減器)的記錄器。

Logger log = Logger.getLogger(MyClass.class.getName()); 

要檢查變量,只需使用:在您的作業的管理頁面打印

log.info("varOne: " + varOne); 

這些日誌行。

相關問題