2013-10-22 82 views
1


我在含有大量文本文件的HDFS上有很多tar.gz文件的每日文件夾。
發現一些tar.gz文件被破壞,並導致配置單元/ mapreduce作業在處理這些文件時發生「意外流結束」崩潰。在hadoop/hive中處理損壞的gzip文件

我確定了其中的幾個,並用tar -zxvf對它們進行了測試。他們確實退出時出現了錯誤,但在這種情況發生之前仍然提取了相當數量的文件。

有沒有辦法阻止配置單元/ mapreduce作業簡單地崩潰時tar/gz文件損壞? 我測試過一些錯誤跳躍和寬容失敗的參數,如
mapred.skip.attempts.to.start.skipping,
mapred.skip.map.max.skip.records,
mapred.skip.mode。
mapred.map.max.attempts,
mapred.max.map.failures.percent,
mapreduce.map.failures.maxpercent。

它幫助在少數情況下得到一個完整的文件夾處理沒有崩潰,但主要是這導致作業掛起,而不是完成。

將hadoop以外的每個文件解壓縮,然後將它們重新壓縮(以獲得乾淨的gzip文件)然後再次上傳到hdfs將是一個如此痛苦的過程(因爲額外的步驟和大量的數據會生成)

是否有人找到了更清潔/更優雅的解決方案?

感謝您的任何幫助。

回答

1

我在這裏參加派對的時間超級遲,但我只是遇到了與腐敗的gzip文件有關的確切問題。我最終通過編寫我自己的RecordReader來解決這個問題,它會捕獲IOExceptions,記錄出現問題的文件的名稱,然後正常丟棄該文件並轉到下一個文件。

我已經寫了一些細節(包括自定義Record Reader這裏代碼:http://daynebatten.com/2016/03/dealing-with-corrupt-or-blank-files-in-hadoop/

+0

感謝分享,這是非常方便不是草草收場有大象落在一個狡猾的球:對我就給你一個儘快 –

0

我看主要有兩個出路:

  1. 創建Hadoop的一個補丁,允許這類的損壞文件的處理,然後只需運行鍼對已損壞的文件的應用程序。
  2. 您創建了一個特殊的hadoop應用程序,它使用您自己的自定義「gunzip」實現(可以處理這些類型的問題)。此應用程序然後簡單地讀取和寫入文件作爲映射器唯一的工作(身份映射器)。然後將此作業的輸出用作正常的mapreduce/pig/hive/...作業的輸入。