2011-04-20 19 views
6

我們的工作流程使用AWS彈性地圖縮小集羣來運行一系列Pig作業,以將大量數據處理爲彙總報告。不幸的是,輸入數據可能不一致,並且可能導致輸入文件或0字節文件被傳遞給流水線,甚至導致流水線的某些階段產生。如何處理Apache Pig中的空白或缺少輸入文件?

在LOAD語句中,如果Pig沒有找到任何輸入文件或任何輸入文件都是0字節,則Pig會失敗。

有沒有什麼好的方法可以解決這個問題(希望在Pig配置或腳本或Hadoop集羣配置中,無需編寫自定義加載器......)?

(由於我們使用AWS彈性地圖減少,我們堅持用豬0.6.0和Hadoop 0.20)。

+0

因爲這樣的問題,我停止使用Pig。在0.6.0中編寫自定義加載器幾乎是不可能的(他們在0.8.0中改進了加載器API)。考慮使用Hive。 – 2011-04-20 23:32:05

回答

1

(爲後人,一分面值的解決方案,我們已經想出了:)

要處理0字節的問題,我們發現我們可以檢測到這種情況,而是用一個換行符插入一個文件。這導致一條消息,如:

Encountered Warning ACCESSING_NON_EXISTENT_FIELD 13 time(s). 

但至少豬不會與例外崩潰。

或者,我們可以爲該文件生成適當數量的'\t'字符的行,以避免警告,但會將垃圾插入到我們必須過濾掉的數據中。

這些相同的想法可以通過創建一個虛擬文件來解決沒有輸入文件的條件,但它具有與上面列出的相同的缺點。

1

我一直在使用的方法是從shell運行豬腳本。我有一個工作從六個不同的輸入目錄獲取數據。所以我爲每個輸入文件寫了一個片段。

shell檢查輸入文件的存在並從碎片中組裝最終的豬腳本。

然後執行最後的豬腳本。我知道這是一個Rube Goldberg的方法,但迄今爲止非常好。 :-)