gpt4 book ai didi

由于来自 inputStream 的过早 EOF,Hadoop MapReduce 作业 I/O 异常

转载 作者:可可西里 更新时间:2023-11-01 14:16:51 26 4
gpt4 key购买 nike

我使用命令 hadoop jar <jar> [mainClass] path/to/input path/to/output 运行了一个 MapReduce 程序.但是,我的工作卡在:INFO mapreduce.Job: map 100% reduce 29% .

很久以后,我终止并检查了数据节点日志(我在伪分布式模式下运行)。它包含以下异常:

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)

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

我找到了 this这表明 dfs.datanode.max.xcievers可能需要增加。但是,它已被弃用,新属性称为 dfs.datanode.max.transfer.threads默认值为 4096。如果更改此值可以解决我的问题,我应该将其设置为什么新值?

This表示 ulimit对于数据节点可能需要增加。我的ulimit -n (打开的文件)是 1024。如果增加此值可以解决我的问题,我应该将其设置为什么?

最佳答案

过早的 EOF 可能由于多种原因而发生,其中之一是产生大量线程以使用 FileOutputCommitter 在一个 reducer 节点上写入磁盘。 MultipleOutputs 类允许您写入具有自定义名称的文件并实现这一点,它为每个文件生成一个线程并将一个端口绑定(bind)到它以写入磁盘。现在,这限制了可以在一个 reducer 节点上写入的文件数量。当一个 reducer 节点上的文件数量大致超过 12000 时,我遇到了这个错误,因为线程被杀死并且 _temporary 文件夹被删除导致这些异常消息过多。我的猜测是——这不是内存过冲问题,也不能通过允许 hadoop 引擎生成更多线程来解决。减少在一个节点上一次写入的文件数量解决了我的问题 - 通过减少实际写入的文件数量,或增加 reducer 节点。

关于由于来自 inputStream 的过早 EOF,Hadoop MapReduce 作业 I/O 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32060049/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com