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

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

 

相关文章:

  • 2021-11-17
  • 2021-05-14
  • 2021-08-25
  • 2021-06-07
  • 2021-12-05
  • 2022-12-23
  • 2021-07-17
猜你喜欢
  • 2022-01-30
  • 2021-11-11
  • 2022-12-23
  • 2022-12-23
  • 2021-06-25
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案