1

我正在使用伪集群模式下的 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)

这会产生一个损坏的管道错误,该错误会在多次尝试后中止应用程序(所有尝试都显示相同的行为)。

有趣的是,在运行这项工作之前,我运行了另一个完美运行的工作。我已经阅读了一些关于密集型 CPU 映射器(这基本上是我所拥有的)的内容,因为连接在超时后关闭,但我还没有找到解决方案。

我将不胜感激任何更好的诊断指南和解决此问题的提示。是否有任何配置参数或代码可以修改以消除超时?

提前致谢,

里奥

++++ 编辑 ++++

做更多的研究我发现这个版本支持将超时设置为零。可以在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也应该修改。

我希望它有所帮助。

问候。

4

0 回答 0