1

我使用 MultipleOutputs 将数据输出到某些绝对路径,而不是相对于 OutputPath 的路径。

然后,我得到错误:

错误:org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException):无法为 [DFSClient_attempt_1425611626220_29142_m_000035_01 创建文件 [/test/convert.bak/326/201505110030/326-m-00035] -370311306_1] 在客户端 [192.168.7.146] 上,因为此文件已由 [DFSClient_attempt_1425611626220_29142_m_000035_1000_-53988495_1] 在 [192.168.7.149] 上的 [DFSClient_attempt_1425611626220_29142_1000_-53988495_1] 创建:2320) 在 org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFileInternal(FSNamesystem.java:2083) 在 org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFileInt(FSNamesystem.java:2012) 在org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFile(FSNamesystem.java:1963) 在

4

3 回答 3

1

https://issues.apache.org/jira/browse/MAPREDUCE-6357

输出文件必须在 ${mapred.output.dir} 。</p>

设计和实现不支持将数据输出到 ${mapred.output.dir} 之外的文件。

于 2015-05-14T08:06:38.660 回答
0

通过查看堆栈跟踪错误,似乎已经创建了输出文件。

如果要将数据写入多个文件,请尝试动态生成这些文件名并使用这些文件名,如 Hadoop Definitive Guide 中的代码所示

String basePath = String.format("%s/%s/part", parser.getStationId(), parser.getYear());
multipleOutputs.write(NullWritable.get(), value, basePath);

我希望这将有所帮助。

于 2015-05-13T05:21:11.180 回答
-1

正如它清楚地表明您尝试创建的路径已经存在。因此,在创建该路径之前尝试检查该路径是否存在。如果存在,则删除该路径。

    FileSystem hdfs;
    Path path = new Path (YourHadoopPath);
    if (hdfs.exists(path)) {
        hdfs.delete(path);
    }
于 2015-05-13T06:00:24.227 回答