2012-10-22 92 views
0

.gz文件是由一個名爲gzputs & gzwrite的C程序編寫的。讀取gzwirte(zlib)中的.gz文件在MapReduce中不正確

我列出了壓縮文件內容gzip -l,並發現uncompressed值不正確。該值似乎等於最新的gzputsgzwrite寫入.gz文件的字節數。這使得ratio是一個不起眼的價值。

當這些.gz文件用作Map/Reduce的輸入時發生錯誤。似乎只有部分.gz文件可以在地圖階段讀取。 (該部分的大小似乎等於上面的值uncompressed)。

有人可以教我如何在C程序或Map/Reduce中做什麼?

+0

如果你對這個文件進行了gunzip處理,與你認爲你寫的是什麼相比,你回來了什麼?你有gzclose()這個文件嗎? –

+0

感謝您的回覆。如果我再次使用'gunzip'和'gzip',那麼文件就會正常。我猜想原因可能是'gzputs'每次都會向壓縮文件寫入幾行新內容,但'gzip'直接壓縮整個文件。在Map/Reduce中讀取錯誤似乎是[GZIPInputStream的錯誤](http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4691425)。我找到了一個類似GZIPInputStream的類,它可以從Internet正確讀取gz文件。然後我在hadoop中擴展並定製了TextInputFormat和LineRecordReader。問題現在已經解決了。 – thomaslee

回答

0

問題已解決。在Map/Reduce中讀取錯誤似乎是a bug of GZIPInputStream

我發現了一個可以正確讀取gz文件的類似於Internet的GZIPInputStream類。然後我在hadoop中擴展並定製了TextInputFormat和LineRecordReader。它現在有效。

+0

爲什麼不簡單升級到最新的java 1.6/1.7? –

+0

Hadoop集羣受其他人支持,我們只提交MapReduce作業。 – thomaslee

+0

爲什麼不簡單地讓他們更新到最新的Java 1.6/1.7? –

相關問題