Я использую MultipleOutputs в редукторе. Многократный вывод будет записывать файл в папку с именем NewIdentities. Код показан ниже:Hadoop MultipleOutputs в Reducer с FileAlreadyExistsException
private MultipleOutputs<Text,Text> mos;
@Override
public void reduce(Text inputKey, Iterable<Text> values, Context context) throws IOException, InterruptedException {
......
// output to change report
if (ischangereport.equals("TRUE")) {
mos.write(new Text(e.getHID()), new Text(changereport.deleteCharAt(changereport.length() - 1).toString()), "NewIdentities/");
}
}
}
@Override
public void setup(Context context) {
mos = new MultipleOutputs<Text,Text>(context);
}
@Override
protected void cleanup(Context context) throws IOException, InterruptedException {
mos.close();
}
Он может работать ранее. Но когда я запускаю его сегодня, он выдает исключение, как показано ниже. Моя версия hadoop - 2.4.0.
Ошибка: org.apache.hadoop.fs.FileAlreadyExistsException:/CaptureOnlyMatchIndex9/TEMP/ChangeReport/NewIdentities/-r-00000 для клиента 192.168.71.128 уже существует в org.apache.hadoop.hdfs.server.namenode.FSNamesystem .startFileInternal (FSNamesystem.java:2297) в org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFileInt (FSNamesystem.java:2225) в org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFile (FSNamesystem .java: 2178) at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.create (NameNodeRpcServer.java:520) в org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.create (ClientNamenodeProtocolServerSideTranslatorPB.java:354) в org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos $ ClientNamenodeProtocol $ 2.callBlockingMethod (ClientNamenodeProtocolProtos.java) на org.apache.hadoop.ipc.ProtobufRpcEngine $ Server $ ProtoBufRpcInvoker.call (ProtobufRpcEngine.java:585) в org.apache.hadoop.ipc.RPC $ Server.call (RPC.java:928) в org.apache.hadoop.ipc.Server $ Обработчик $ 1.run (Server.java : 2013) at org.apache.hadoop.ipc.Server $ Handler $ 1.run (Server.java:2009) в java.security.AccessController.doPrivileged (собственный метод) в javax.security.auth.Subject.doAs (Subject. java: 415) at org.apache.hadoop.security.UserGroupInformation.doAs (UserGroupInformation.java:1548) на org.apache.hadoop.ipc.Server $ Handler.run (Server.java:2007) на sun.reflect.NativeConstructorAccessorImpl .newInstance0 (Нативный метод) на sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:57) на sun.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:45) в java.lang.reflect.Constructor.newInstance (Constructor.java : 526) at org.apache.hadoop.ipc.RemoteException.instantiateException (RemoteException.java:106) в org.apache.hadoop.ipc.RemoteException.unwrapRemoteException (RemoteEx ception.java:73) на org.apache.hadoop.hdfs.DFSOutputStream.newStreamForCreate (DFSOutputStream.java:1604) на org.apache.hadoop.hdfs.DFSClient.create (DFSClient.java:1465) на org.apache.hadoop .hdfs.DFSClient.create (DFSClient.java:1390) в org.apache.hadoop.hdfs.DistributedFileSystem $ 6.doCall (DistributedFileSystem.java:394) в org.apache.hadoop.hdfs.DistributedFileSystem $ 6.doCall (DistributedFileSystem.java : 390) в org.apache.hadoop.fs.FileSystemLinkResolver.resolve (FileSystemLinkResolver.java:81) в org.apache.hadoop.hdfs.DistributedFileSystem.create (DistributedFileSystem.java:390) в org.apache.hadoop.hdfs. DistributedFileSystem.create (DistributedFileSystem.java:334) в org.apache.hadoop.fs.FileSystem.create (FileSystem.java:906) в org.apache.hadoop.fs.FileSystem.create (FileSystem.java:887) в org .apache.hadoop.fs.FileSystem.create (FileSystem.java:784) в org.apache.hadoop.mapreduce.lib.output.TextOutputFormat.getRecordWriter (TextOutputFormat.java:132) в org.apache.hadoop.mapreduce.lib .ОУ tput.MultipleOutputs.getRecordWriter (MultipleOutputs.java:475) на