如何合并reduce输出并在map输入中使用?

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

我正在用hadoop写一个程序。我的代码有两个阶段。在第1阶段,我有6个reduce输出文件,这些文件是下一阶段的输入。在第二阶段,我想有2个Map,所以我必须合并第1阶段的6个输出。我用过 copymerg 但是我有 EOFException . 我使用这个函数的方式是:

copyMerge(FileSystem srcFS, Path srcDir, FileSystem dstFS, Path dstFile, boolean deleteSource, Configuration conf, String addString)

我不知道是什么 addString . 我用过 "" 不是那样的,对吗?在这种情况下,我的map任务失败。任务日志是:

java.io.EOFException
at java.io.DataInputStream.readFully(DataInputStream.java:180)
at org.apache.hadoop.io.DataOutputBuffer$Buffer.write(DataOutputBuffer.java:63)
at org.apache.hadoop.io.DataOutputBuffer.write(DataOutputBuffer.java:101)
at org.apache.hadoop.io.SequenceFile$Reader.next(SequenceFile.java:1930)
at org.apache.hadoop.io.SequenceFile$Reader.next(SequenceFile.java:2062)
at org.apache.hadoop.mapreduce.lib.input.SequenceFileRecordReader.nextKeyValue(SequenceFileRecordReader.java:68)
at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.nextKeyValue(MapTask.java:531)
at org.apache.hadoop.mapreduce.MapContext.nextKeyValue(MapContext.java:67)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:143)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:763)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:369)
at org.apache.hadoop.mapred.Child$4.run(Child.java:259)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1059)
at org.apache.hadoop.mapred.Child.main(Child.java:253)

这样对吗?是吗 copyMerge 函数使用ram来复制文件?意味着如果文件是1GB,我需要1GRAM来复制它?谢谢。

暂无答案!

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

相关问题