レデューサーで MultipleOutputs を使用します。複数の出力は、ファイルを NewIdentities というフォルダーに書き込みます。コードは次のように示されます。
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: クライアント 192.168.71.128 の /CaptureOnlyMatchIndex9/TEMP/ChangeReport/NewIdentities/-r-00000 は、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) ) 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) at org.apache.hadoop.ipc.Server$Handler$1.run (Server.java:2013) at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2009) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject. doAs(Subject.java:415) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1548) at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2007) at sun .reflect.NativeConstructorAccessorImpl.newInstance0(ネイティブ メソッド) の sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) の sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) の java.lang.reflect.Constructor.newInstance (コンストラクタ。java:526) org.apache.hadoop.ipc.RemoteException.instantiateException(RemoteException.java:106) で org.apache.hadoop.ipc.RemoteException.unwrapRemoteException(RemoteException.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) at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:887) at 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.output.MultipleOutputs.getRecordWriter(MultipleOutputs.java:475) で