在Java Hadoop Framework之外创建序列文件

时间:2013-05-08 20:01:08

标签: hadoop compression lzo snappy

我一直在尝试在Java框架之外为Hadoop生成序列文件,Python是具体的。有一个python-hadoop模块,它提供了大部分类似的框架来执行此操作。我已成功使用它创建了序列文件;生成的序列文件可以复制到HDF并用作Hadoop作业的输入。 LZO和Snappy完全配置在我的本地Hadoop安装上,当我通过Java上的org.apache.hadoop.io.SequenceFile.createWriter执行这些算法时,我可以使用这些算法生成适当的压缩序列文件。

然而,当我在python-hadoop上尝试使用LZO或Snappy作为(块)压缩方案时,似乎没有生成有效的序列文件。我使用了与此代码中类似的方案:

https://github.com/fenriswolf/python-hadoop/blob/master/python-hadoop/hadoop/io/compress/LzoCodec.py

(我用snappy替换lzo用于Snappy压缩),并且在python-hadoop框架内工作,这些文件可以被写入和读取而没有任何错误。但是,在Hadoop上,当我将它们作为Hadoop输入提供时,我会收到EOF错误:

Exception in thread "main" java.io.EOFException
        at org.apache.hadoop.io.compress.BlockDecompressorStream.rawReadInt(BlockDecompressorStream.java:126)
        at org.apache.hadoop.io.compress.BlockDecompressorStream.getCompressedData(BlockDecompressorStream.java:98)
        at org.apache.hadoop.io.compress.BlockDecompressorStream.decompress(BlockDecompressorStream.java:82)
        at org.apache.hadoop.io.compress.DecompressorStream.read(DecompressorStream.java:76)
        at org.apache.hadoop.io.compress.DecompressorStream.read(DecompressorStream.java:64)
        at java.io.DataInputStream.readByte(DataInputStream.java:265)
        at org.apache.hadoop.io.WritableUtils.readVLong(WritableUtils.java:299)
        at org.apache.hadoop.io.WritableUtils.readVInt(WritableUtils.java:320)
        at org.apache.hadoop.io.SequenceFile$Reader.next(SequenceFile.java:1911)
        at org.apache.hadoop.io.SequenceFile$Reader.next(SequenceFile.java:1934)
        at SequenceFileReadDemo.main(SequenceFileReadDemo.java:34)

只有在使用LZO或Snappy时,我才一直看到这个特殊的信息。

我怀疑Hadoop中的LzoCodec和SnappyCodec的生成或阅读方式与Python在lzo和snappy中的实现方式相同,但我不确定它们应该是什么。< / p>

有没有理由在Java Hadoop框架之外没有正确生成具有这些压缩方案的序列文件?再一次,整个过程都可以使用Gzip,BZip2或Default。

0 个答案:

没有答案