2011-11-28 66 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

我在執行任務失敗的羣集上遇到類似問題一些節點由於「內存不足」問題。他們肯定在其他節點上重新啓動。計算最終失敗了,因爲它設計的很糟糕,導致所有節點的內存不足,最終達到了取消作業的閾值。