mapreduce多个输出:文件只能复制到0个节点,而不是1个节点

efzxgjgh  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(355)

我有一个reduce作业,我得到上面的错误,文件只能复制到0个节点,而不是1个节点。我在网上搜索了一下,发现数据节点可能有问题,但我正在这个工作流中运行其他mapreduce作业,这些作业都正常工作。我看到的唯一区别是我使用了多个输出并指定了一个文件夹,但我确信路径是正确的。以下是多输出写入行:

mos.write("mosName", new LongWritable(key), value, outputFilePath);

我得到的确切错误是:

org.apache.hadoop.ipc.RemoteException(java.io.IOException): File xxx could 
only be replicated to 0 nodes instead of minReplication (=1).  There are 7 
datanode(s) running and no node(s) are excluded in this operation.

任何帮助都将不胜感激。

mjqavswn

mjqavswn1#

我也遇到过同样的问题,当我将输出写入上下文而不是多路输出时,它没有复制。据我所知,这是因为多次输出在内存中保存的数据更长。
解决方案包括:
(1) 对输出执行压缩

FileOutputFormat.setCompressOutput(job, true);
FileOutputFormat.setOutputCompressorClass(job, GzipCodec.class);

(2) 给我的工作更多的内存(请记住java.opts中的jvm内存最多只能是容器内存的80%)

-Dmapreduce.map.memory.mb=3072 -Dmapreduce.map.java.opts=-Xmx2048m

相关问题