2012-06-12 54 views
2

我在Amazon EMR上有一個長時間運行的Hadoop流式作業(15節點,> 1.5小時)。這項工作的失敗率約爲75%。我爲mapper和reducer使用Python。確保Hadoop EMR上的日誌

我已經做了如下優化:

sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0) 
sys.stderr = os.fdopen(sys.stderr.fileno(), 'w', 0) 

logging.getLogger().setLevel(logging.INFO) 

此外,我增加了以下只是發出帶有logging模塊日誌條目:

sys.stderr.flush() 
    time.sleep(30) 
    sys.exit(3) 

,試圖捕捉錯誤不得要領:Hadoop的日誌文件不顯示我的錯誤:(

我怎樣才能讓Hadoop記錄我的消息,而不是丟棄任何???

回答

0

我不是100%的python解決方案,但我知道在使用EMR命令行界面時,您必須在Amazon S3中指定日誌記錄URI。

例如

./elastic-mapreduce --create --other-options --log-uri s3n://emr.test/logs 

這是當集羣啓動指定。然後在S3日誌目錄以下目錄下創建

/jobflowid 
    /daemons 
    /jobs 
    /nodes 
    /steps 
    /task-attempts 

在/步驟,你得到一個文件夾,每個人的工作和低於此作業的標準錯誤,stdout和控制器輸出這裏被寫入。

+1

是的,你可以在S3上指定一個日誌文件夾,但麻煩的是我沒有得到所有的日誌消息。 – jldupont