

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Amazon EMR 叢集錯誤：擷取失敗太多
<a name="emr-troubleshoot-error-resource-1"></a>

在步驟中或任務嘗試日誌中出現「**Too many fetch-failures (太多擷取失敗)**」 或「**Error reading task output (讀取任務輸出時出錯)**」錯誤訊息，代表正在執行的任務是依據另一個任務的輸出。當降低任務排入執行佇列，並需要輸出一個或多個映射任務且輸出尚不可用時，通常會發生這種情況。

有幾個可能導致輸出不可用的原因：
+ 該必要任務仍正在處理中。這通常是映射任務。
+ 若該資料位於不同的執行個體，由於網路連線不佳，資料可能無法使用。
+ 若 HDFS 已用於擷取輸出，則 HDFS 可能存在問題。

造成此錯誤最普遍的原因，是因為之前的任務尚在進行。如果減少任務首次嘗試執行時發生錯誤，則這種情況尤其可能發生。您可以透過檢視回傳錯誤的叢集步驟 syslog 日誌，來確認是否屬於此種狀況。若該 syslog 同時顯示映射與進行中的減少任務，這表示該減少階段已開始，同時有映射任務尚未完成。

在日誌中應注意查看的是達到 100%，且隨後降至較低數值的映射進行百分率。當映射百分比達 100% 時，並不表示所有映射任務已完成。那僅代表 Hadoop 正在執行所有的映射任務。若此數值降至 100% 以下，則代表映射任務已失敗，依據組態狀況，Hadoop 可能會嘗試重新排程任務。如果在日誌中映射百分比維持在 100%，請查看 CloudWatch 指標，特別是 `RunningMapTasks`，以檢查映射任務是否仍在進行。您也可在主節點上使用 Hadoop web 介面找到此訊息。

若您正看到此問題，您可以嘗試一些方法：
+ 引導該減少階段在開始之前等久一點。您可透過改變 Hadoop 組態設定 mapred.reduce.slowstart.completed.maps 至較長時間以達成此目的。如需詳細資訊，請參閱[建立引導操作，以使用 Amazon EMR 叢集安裝其他軟體](emr-plan-bootstrap.md)。
+ 讓縮減器計數符合該叢集的總縮減器功能。您可透過調整該任務 Hadoop 組態設定 mapred.reduce.tasks 以達成此目的。
+ 使用組合器類型代碼將需要擷取的輸出數量降至最小。
+ 檢查 Amazon EC2 服務並沒有會影響叢集網路效能的問題。您可使用[服務運作狀態儀表板](https://status.aws.amazon.com/)做到這點。
+ 檢視您叢集中的執行個體 CPU 與記憶體資源，以確認您的資料處理尚未對您的節點造成過大負擔。如需詳細資訊，請參閱[設定 Amazon EMR 叢集硬體和聯網](emr-plan-instances.md)。
+ 檢查您 Amazon EMR 叢集中使用的 Amazon Machine Image (AMI) 版本。若該版本介於 2.3.0 至 2.4.4，請更新至最新版本。特定範圍內 AMI 版本使用的 Jetty 版本，可能會造成無法從映射階段接收輸出。當縮減器無法從映射階段取得輸出時，將出現擷取錯誤。

  Jetty 是一個開放原始碼 HTTP 伺服器，以用來在 Hadoop 叢集中進行機器間的通訊。