2015-07-10 7 views
0

Я использую 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) на

ответ

2

Я нашел причину этого. Потому что в одном из моих редукторов он заканчивается из памяти. Таким образом, это исключает исключение из памяти неявно. Hasoop останавливает текущий множественный вывод. И, возможно, другой поток редуктора хочет вывести, поэтому он создает еще один многоцелевой выходной объект, поэтому происходит столкновение.

 Смежные вопросы

  • Нет связанных вопросов^_^