在JavaHadoop框架外创建序列文件

mkh04yzy  于 2021-06-03  发布在  Hadoop
关注(0)|答案(0)|浏览(253)

我一直在尝试在java框架(具体来说是python)之外为hadoop生成序列文件。有一个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的生成或读取方式与lzo和snappy中python的实现不一样,但我不确定它们应该是什么。
在javahadoop框架之外,有没有任何原因可以解释为什么没有正确地生成具有这些压缩方案的序列文件?再说一次,只要我使用gzip、bzip2或default,整个过程都很正常。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题