MapReduce使用lzo壓縮注意


以下是本樓主用血和淚換來的教訓,往事不堪回首啊!

lzo關於hadoop的codec有兩個 com.hadoop.compression.lzo.LzoCodec 和com.hadoop.compression.lzo.LzopCodec,兩個類雖只有一字之差,其實區別挺大。

1. LzopCodec與lzop工具兼容,LzopCodec本質是LZO格式的但包含額外的文件頭。

    lzoCodec只是一種壓縮算法,不會生成額外的文件頭。

   ps:http://www.quora.com/Whats-the-difference-between-the-LzoCodec-and-the-LzopCodec-in-Hadoop-LZO

2. 在MR Job中:

    如果輸出格式是TextOutputFormat,要用LzopCodec,相應的讀取這個輸出的格式是LzoTextInputFormat。

    如果輸出格式用SequenceFileOutputFormat,要用LzoCodec,相應的讀取這個輸出的格式是SequenceFileInputFormat。

    如果輸出使用SequenceFile配上LzopCodec的話,那就等着用SequenceFileInputFormat讀取這個輸出時收到“java.io.EOFException: Premature EOF from inputStream”吧。具體解釋見:

 http://web.archiveorange.com/archive/v/5nvvZ7eWCDGq6ExVf3zX

我會告訴你我寫出的十幾T的數據都給我報這個異常嗎。。。

 3. hadoop fs -text /path/to/sequencefile 命令可以直接讀取sequencefile,如果想要測試一個文件能否用SequenceFileInputFormat讀取,可以用這個命令測試

4. hive中使用lzo也是同樣的道理,因為hive任務底層還是用MapReduce實現的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM