hadoop将多路输出到绝对路径,但其他尝试已经在创建文件

juzqafwq  于 2021-06-02  发布在  Hadoop
关注(0)|答案(3)|浏览(395)

我使用multipleoutputs将数据输出到一些绝对路径,而不是相对于outputpath的路径。
然后,我得到一个错误:
错误:org.apache.hadoop.ipc.remoteexception(org.apache.hadoop.hdfs.protocol.alreadybeingcreatedexception):无法为客户端[192.168.7.146]上的[dfsclient\u attempt\u 142561162620\u 29142\u m\u 000035\u 1001\u-370311306\u 1]创建文件[/test/convert.bak/326/201505110030/326-m-00035],因为此文件已由[192.168.7.149]上的[dfsclient\u attempt\u 142561162620\u 29142\u m\u 000035\u 1000\u-53988495\u 1]创建,位于org.apache.hadoop.hdfs.server.namenode.fsnamesystem.recoverleaseinternal(fsnamesystem)。java: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)在

b5lpy0ml

b5lpy0ml1#

https://issues.apache.org/jira/browse/mapreduce-6357
输出文件必须在${mapred.output.dir}中
设计和实现不支持将数据输出到${mapred.output.dir}之外的文件。

v64noz0r

v64noz0r2#

因为它清楚地表明,你试图创造的道路已经存在。因此,在创建该路径之前,请尝试检查该路径是否存在。如果存在,请删除该路径。

FileSystem hdfs;
    Path path = new Path (YourHadoopPath);
    if (hdfs.exists(path)) {
        hdfs.delete(path);
    }
30byixjq

30byixjq3#

通过查看堆栈跟踪错误,似乎已经创建了输出文件。
如果您想将数据写入多个文件,那么请尝试动态生成这些文件名并使用这些文件名,如hadoop指南中的代码所示

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

我希望这会有帮助。

相关问题