以下是本楼主用血和泪换来的教训,往事不堪回首啊!

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实现的。

 

posted on 2013-03-06 16:18  山君  阅读(5807)  评论(0编辑  收藏  举报