.gz文件是由一個名爲gzputs & gzwrite的C程序編寫的。讀取gzwirte(zlib)中的.gz文件在MapReduce中不正確
我列出了壓縮文件內容gzip -l
,並發現uncompressed
值不正確。該值似乎等於最新的gzputs
或gzwrite
寫入.gz文件的字節數。這使得ratio
是一個不起眼的價值。
當這些.gz文件用作Map/Reduce的輸入時發生錯誤。似乎只有部分.gz文件可以在地圖階段讀取。 (該部分的大小似乎等於上面的值uncompressed
)。
有人可以教我如何在C程序或Map/Reduce中做什麼?
如果你對這個文件進行了gunzip處理,與你認爲你寫的是什麼相比,你回來了什麼?你有gzclose()這個文件嗎? –
感謝您的回覆。如果我再次使用'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