我使用的hadoop pipes mapreduce应用程序处于伪群集模式,该应用程序引发以下错误:
2013-06-24 11:04:41,026 ERROR org.apache.hadoop.mapred.pipes.BinaryProtocol: java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:189)
at java.net.SocketInputStream.read(SocketInputStream.java:121)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)
at java.io.BufferedInputStream.read(BufferedInputStream.java:254)
at java.io.DataInputStream.readByte(DataInputStream.java:265)
at org.apache.hadoop.io.WritableUtils.readVLong(WritableUtils.java:299)
at org.apache.hadoop.io.WritableUtils.readVInt(WritableUtils.java:320)
at org.apache.hadoop.mapred.pipes.BinaryProtocol$UplinkReaderThread.run(BinaryProtocol.java:121)
这将产生一个中断管道错误,在多次尝试后中止应用程序(所有尝试都显示相同的行为)。
有趣的是,在运行这个作业之前,我运行了另一个非常有效的作业。我读过一些关于密集型cpuMap器(这基本上是我得到的)的问题,因为连接在超时后关闭,但我没有找到解决这个问题的方法。
如果您能提供更好的诊断指南和解决此问题的提示,我将不胜感激。是否有任何配置参数或代码我可以修改,以摆脱超时?
提前谢谢,
río
编辑
做了更多的研究,我发现这个版本支持将超时设置为零。可以在hadoop home/conf/hdfs-site.xml中修改套接字超时,在配置标记中添加如下内容:
<property>
<name>dfs.socket.timeout</name>
<value>0</value>
</property>
使用零值和高值对我来说都很有效。
编辑2
dfs.socket.timeout仅适用于读取套接字,因此还应修改dfs.datanode.socket.write.timeout。
希望对你有帮助。
当做。
暂无答案!
目前还没有任何答案,快来回答吧!