hadoop-节省空间和多输入问题

9udxz4iz  于 2021-06-03  发布在  Hadoop
关注(0)|答案(0)|浏览(283)

好吧,我对hadoop还很陌生,我写了一个任务,它主要处理两个gzip文件文件夹,看看总内容是否相等。
然而,我第一次运行我的作业失败了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.processbasicheader(builtingzipdecompressor)的gzip文件。java:490)位于org.apache.hadoop.io.compress.zlib.builtingzipdecompressor.executeheaderstate(builtingzipdecompressor)。java:254)在org.apache.hadoop.io.compress.zlib.builtingzipdecompressor.decompress(内置zipdecompressor。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)在org.apache.hadoop.mapred.ifile$reader.next(ifile。java:389)在org.apache.hadoop.mapred.merge$segment.next(合并。java:220)在org.apache.hadoop.mapred.merge$mergequeue.merge(合并)。java:420)在org.apache.hadoop.mapred.merge$mergequeue.merge(合并)。java:381)在org.apache.hadoop.mapred.merge.merge(合并)。java:60)在org.apache.hadoop.mapred.reducetask.run(reducetask。java:414)在org.apache.hadoop.mapred.localjobrunner$job.run(localjobrunner。java:309)
通过阅读,我认为这是因为hadoop压缩算法都不能压缩来自多个输入文件的map输出。毫无疑问,我需要压缩输出,但考虑到从来没有开始的时刻,我会很高兴取得任何进展。
所以现在当我求助于互联网的时候,我还有什么可以做的来减少这个占用空间吗,我真的需要压缩,因为我要处理大约20gb的输入,而我的单节点集群上只有50gb可玩(我目前在测试环境中做这个,因此,在我能证明它工作之前,不能使用更多的资源测试单个节点,因为我不能终止生产集群)。
任何建议都将不胜感激。

暂无答案!

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

相关问题