1

好的,所以我对 Hadoop 很陌生,并且编写了一个任务,该任务基本上处理 2 个压缩文件的文件夹,以查看总内容是否相等。

然而,我的第一次工作以 30% 失败,因为文件系统上的空间不足(我无法扩展),所以我研究了压缩并发现这个问题导致我尝试 snappy,但是因为我被迫使用 hadoop 0.2 它不识别 snappy 所以我想尝试 gzip

conf.setBoolean("mapred.output.compress", true);
conf.set("mapred.output.compression.type", CompressionType.BLOCK.toString());
conf.setClass("mapred.output.compression.codec", GzipCodec.class, CompressionCodec.class);
conf.setBoolean("mapred.compress.map.output", true);
conf.set("mapred.map.output.compression.type", CompressionType.BLOCK.toString());
conf.setClass("mapred.map.output.compression.codec", GzipCodec.class, CompressionCodec.class);

但后来我得到:

java.io.IOException:在 org.apache.hadoop.io.compress.zlib.BuiltInGzipDecompressor.executeHeaderState 的 org.apache.hadoop.io.compress.zlib.BuiltInGzipDecompressor.processBasicHeader(BuiltInGzipDecompressor.java:490) BuiltInGzipDecompressor.java:254) 在 org.apache.hadoop.io.compress.zlib.BuiltInGzipDecompressor.decompress(BuiltInGzipDecompressor.java:183) 在 org.apache.hadoop.io.compress.DecompressorStream.decompress(DecompressorStream.java:89)在 org.apache.hadoop.io.compress.DecompressorStream.read(DecompressorStream.java:83) 在 org.apache.hadoop.io.IOUtils.wrappedReadForCompressedData(IOUtils.java:170) 在 org.apache.hadoop.mapred.IFile $Reader.readData(IFile.java:342) 在 org.apache.hadoop.mapred.IFile$Reader.rejigData(IFile.java:373) 在 org.apache.hadoop.mapred.IFile$Reader。readNextBlock(IFile.java:357) at org.apache.hadoop.mapred.IFile$Reader.next(IFile.java:389) at org.apache.hadoop.mapred.Merger$Segment.next(Merger.java:220)在 org.apache.hadoop.mapred.Merger$MergeQueue.merge(Merger.java:420) 在 org.apache.hadoop.mapred.Merger$MergeQueue.merge(Merger.java:381) 在 org.apache.hadoop.mapred .Merger.merge(Merger.java:60) at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:414) at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:309 )381) 在 org.apache.hadoop.mapred.Merger.merge(Merger.java:60) 在 org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:414) 在 org.apache.hadoop.mapred.LocalJobRunner $Job.run(LocalJobRunner.java:309)381) 在 org.apache.hadoop.mapred.Merger.merge(Merger.java:60) 在 org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:414) 在 org.apache.hadoop.mapred.LocalJobRunner $Job.run(LocalJobRunner.java:309)

从阅读中我相信这是因为没有一个hadoop压缩算法可以压缩来自多个输入文件的地图输出。毫无疑问,我也需要压缩输出,但考虑到现在甚至还没有开始,我很乐意取得任何进展。

所以现在当我转向互联网寻求帮助时,我还能做些什么来减少这个占用空间,我真的需要压缩,因为我正在处理大约 20GB 的输入,而我的单节点集群上只有 50GB 可以使用(我目前正在测试环境中执行此操作,因此是单个节点并且无法使用更多资源进行测试,直到我可以显示它工作,因为我无法杀死生产集群)。

任何建议将不胜感激。

4

0 回答 0