Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何合并减少输出并在地图输入中使用?_Java_File_Hadoop - Fatal编程技术网

Java 如何合并减少输出并在地图输入中使用?

Java 如何合并减少输出并在地图输入中使用?,java,file,hadoop,Java,File,Hadoop,我正在用hadoop编写一个程序。我的代码有两个阶段。在第1阶段,我有6个reduce输出文件,这些文件是下一阶段的输入。在第二阶段,我想有2个映射,所以我必须合并第1阶段的6个输出。我用过copymerg,但有个例外。我使用此功能的方式是: copyMerge(FileSystem srcFS, Path srcDir, FileSystem dstFS, Path dstFile, boolean deleteSource, Configuration conf, String addStr

我正在用hadoop编写一个程序。我的代码有两个阶段。在第1阶段,我有6个reduce输出文件,这些文件是下一阶段的输入。在第二阶段,我想有2个映射,所以我必须合并第1阶段的6个输出。我用过copymerg,但有个例外。我使用此功能的方式是:

copyMerge(FileSystem srcFS, Path srcDir, FileSystem dstFS, Path dstFile, boolean deleteSource, Configuration conf, String addString) 
我不知道什么是addString。我用了代替那个,对吗? 在这种情况下,映射任务失败。任务日志为:

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复制文件?意味着如果文件的大小是1G,我需要1G内存来复制它? 谢谢