AST*_*AST 6 hadoop runtime-error mapreduce ioexception eof
我使用该命令运行了MapReduce程序hadoop jar <jar> [mainClass] path/to/input path/to/output.但是,我的工作是挂在:INFO mapreduce.Job: map 100% reduce 29%.
很久以后,我终止并检查了datanode日志(我在伪分布式模式下运行).它包含以下例外:
java.io.IOException: Premature EOF from inputStream
at org.apache.hadoop.io.IOUtils.readFully(IOUtils.java:201)
at org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.doReadFully(PacketReceiver.java:213)
at org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.doRead(PacketReceiver.java:134)
at org.apache.hadoop.hdfs.protocol.datatransfer.PacketReceiver.receiveNextPacket(PacketReceiver.java:109)
at org.apache.hadoop.hdfs.server.datanode.BlockReceiver.receivePacket(BlockReceiver.java:472)
at org.apache.hadoop.hdfs.server.datanode.BlockReceiver.receiveBlock(BlockReceiver.java:849)
at org.apache.hadoop.hdfs.server.datanode.DataXceiver.writeBlock(DataXceiver.java:804)
at org.apache.hadoop.hdfs.protocol.datatransfer.Receiver.opWriteBlock(Receiver.java:137)
at org.apache.hadoop.hdfs.protocol.datatransfer.Receiver.processOp(Receiver.java:74)
at org.apache.hadoop.hdfs.server.datanode.DataXceiver.run(DataXceiver.java:251)
at java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)
5秒后,在日志中ERROR DataXceiver error processing WRITE_BLOCK operation.
什么问题可能导致此异常和错误?
我的NodeHealthReport说:
1/1 local-dirs are bad: /home/$USER/hadoop/nm-local-dir;
1/1 log-dirs are bad: /home/$USER/hadoop-2.7.1/logs/userlogs
Run Code Online (Sandbox Code Playgroud)
我发现这表明dfs.datanode.max.xcievers可能需要增加.但是,它已被弃用,并且dfs.datanode.max.transfer.threads使用默认值4096 调用新属性.如果更改此项将解决我的问题,我应该将其设置为什么新值?
这表明ulimit可能需要增加datanode的数量.我的ulimit -n(打开文件)是1024.如果增加这个将解决我的问题,我该怎么设置它?
小智 5
导致EOF提前的原因有多种,其中之一是使用FileOutputCommitter生成了大量线程以将其写入一个reducer节点上的磁盘。MultipleOutputs类允许您写入具有自定义名称的文件,并完成该操作,它为每个文件生成一个线程,并绑定一个端口以将其写入磁盘。现在,这限制了可以在一个reducer节点上写入的文件数量。当文件数大约在一个reducer节点上越过12000时,由于线程被杀死并且_temporary文件夹被删除导致大量这些异常消息,我遇到了此错误。我的猜测是-这不是内存超调问题,也不能通过允许hadoop引擎生成更多线程来解决。
| 归档时间: |
|
| 查看次数: |
5429 次 |
| 最近记录: |