2011-11-28 69 views
3

在我们的hadoop设置中,当数据节点崩溃(或)hadoop在datanode上没有响应时,reduce任务将失败,无法从失败的节点读取(以下例外)。我认为hadoop处理数据节点故障,这是创建hadoop的主要目的。有人遇到类似的问题吗?如果您有解决方案,请告诉我。hadoop是否真的处理datanode失败?

java.net.SocketTimeoutException: Read timed out 
    at java.net.SocketInputStream.socketRead0(Native Method) 
    at java.net.SocketInputStream.read(Unknown Source) 
    at java.io.BufferedInputStream.fill(Unknown Source) 
    at java.io.BufferedInputStream.read1(Unknown Source) 
    at java.io.BufferedInputStream.read(Unknown Source) 
    at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source) 
    at sun.net.www.http.HttpClient.parseHTTP(Unknown Source) 
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) 
    at org.apache.hadoop.mapred.ReduceTask$ReduceCopier$MapOutputCopier.getInputStream(ReduceTask.java:1547) 
    at org.apache.hadoop.mapred.ReduceTask$ReduceCopier$MapOutputCopier.setupSecureConnection(ReduceTask.java:1483) 
    at org.apache.hadoop.mapred.ReduceTask$ReduceCopier$MapOutputCopier.getMapOutput(ReduceTask.java:1391) 
    at org.apache.hadoop.mapred.ReduceTask$ReduceCopier$MapOutputCopier.copyOutput(ReduceTask.java:1302) 
    at org.apache.hadoop.mapred.ReduceTask$ReduceCopier$MapOutputCopier.run(ReduceTask.java:1234) 
+0

“NameNode将DataNode标记为没有最近Heartbeats为死,并且不会向它们转发任何新的IO请求,任何注册到死DataNode的数据都不再可用于HDFS。 [HDFS体系结构](http://hadoop.apache.org/common/docs/r0.20.2/hdfs_design.html) –

+0

这些日志来自哪里? DataNode或NameNode? – wlk

+0

它来自reduce任务,请看stacktrace。 –

回答

2

当MapReduce工作的任务失败的Hadoop将重试 你可以看看JobTracker的另一个节点上(:50030/jobtracker.jsp),看到了列入黑名单的节点(即有问题的节点他们保持活跃状态​​)或钻取到正在运行/已完成的作业,并查看已终止的任务/重试次数以及死点,已解散的节点等。

1

我在执行任务失败的群集上遇到类似问题一些节点由于“内存不足”问题。他们肯定在其他节点上重新启动。计算最终失败了,因为它设计的很糟糕,导致所有节点的内存不足,最终达到了取消作业的阈值。