

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

# Amazon EMR 叢集操作期間的資源錯誤
<a name="emr-troubleshoot-error-resource"></a>

以下錯誤通常肇因為叢集上的限制資源。本指南說明每個錯誤並提供故障診斷說明。

**Topics**
+ [Amazon EMR 叢集終止 NO\$1SLAVE\$1LEFT 和核心節點 FAILED\$1BY\$1MASTER](emr-cluster-NO_SLAVE_LEFT-FAILED_BY_MASTER.md)
+ [Amazon EMR 叢集錯誤：無法複寫區塊，僅受管複寫至零節點。](enough-hdfs-space.md)
+ [Amazon EMR 叢集錯誤：超過 EC2 QUOTA](emr-EC2.md)
+ [Amazon EMR 叢集錯誤：擷取失敗太多](emr-troubleshoot-error-resource-1.md)
+ [Amazon EMR 叢集錯誤：檔案只能複寫至 0 個節點而非 1 個節點](emr-troubleshoot-error-resource-2.md)
+ [Amazon EMR 叢集錯誤：拒絕列出的節點](emr-troubleshoot-error-resource-3.md)
+ [使用 Amazon EMR 叢集調節錯誤](emr-throttling-error.md)
+ [Amazon EMR 叢集錯誤：不支援執行個體類型](emr-INSTANCE_TYPE_NOT_SUPPORTED-error.md)
+ [Amazon EMR 叢集錯誤：EC2 容量不足](emr-EC2_INSUFFICIENT_CAPACITY-error.md)
+ [Amazon EMR 叢集錯誤：HDFS 複寫因素錯誤](emr-hdfs-insufficient-replication.md)
+ [Amazon EMR 叢集錯誤：HDFS 空間不足錯誤](emr-hdfs-insufficient-space.md)

# Amazon EMR 叢集終止 NO\$1SLAVE\$1LEFT 和核心節點 FAILED\$1BY\$1MASTER
<a name="emr-cluster-NO_SLAVE_LEFT-FAILED_BY_MASTER"></a>

通常會發生這種情況，是因為終止保護已停用，而且所有核心節點超過`yarn-site.xml` 檔案相對應的 `yarn-site` 組態分類之中使用率閾值上限所指定的磁碟儲存容量。此值預設為 90%。核心節點的磁碟使用率超過使用率閾值時，YARN NodeManager 運作狀態服務會報告節點為 `UNHEALTHY`。在此狀態中，Amazon EMR 會將節點列入拒絕清單，而不會對其分配 YARN 容器。如果節點維持運作狀態不佳的狀態持續 45 分鐘，Amazon EMR 會將終止的關聯 Amazon EC2 執行個體標記為 `FAILED_BY_MASTER`。與核心節點關聯的所有 Amazon EC2 執行個體都已標示為終止時，叢集會以 `NO_SLAVE_LEFT` 狀態終止，因為沒有資源可執行作業。

一個核心節點超出磁碟使用率可能會導致連鎖反應。如果單一節點由於 HDFS 超出磁碟使用率閾值，則其他節點也可能已接近閾值。第一個節點超出磁碟使用率閾值，因此 Amazon EMR 將其列入拒絕清單。這會對於其餘節點增加磁碟使用率的負擔，因為其餘節點會開始複製在列入拒絕清單的節點上彼此之間缺少的 HDFS 資料。每個節點接著都會以類似的方式變成 `UNHEALTHY`，叢集最終會終止。

## 最佳實務與建議
<a name="w2aac36c21c13b7b7"></a>

### 設定叢集硬體的足夠儲存
<a name="w2aac36c21c13b7b7b3"></a>

您建立叢集時，請確保有足夠的核心節點，而且每個產品都擁有對於 HDFS 充足的執行個體存放區和 EBS 儲存磁碟區。如需詳細資訊，請參閱[計算叢集的必要 HDFS 容量](emr-plan-instances-guidelines.md#emr-plan-instances-hdfs)。您也可以手動或使用自動擴展將核心執行個體新增到現有的執行個體群組。新的執行個體具有與執行個體群組中的其他執行個體相同的儲存體組態。如需詳細資訊，請參閱[使用 Amazon EMR 叢集擴展來調整不斷變化的工作負載](emr-scale-on-demand.md)。

### 啟用終止保護
<a name="w2aac36c21c13b7b7b5"></a>

啟用終止保護。如此一來，如果某個核心節點被列入拒絕清單，您可以使用 SSH 連接到關聯的 Amazon EC2 執行個體，以進行疑難排解並復原資料。如果您啟用終止保護，請注意 Amazon EMR 不會以新的執行個體取代 Amazon EC2 執行個體。如需詳細資訊，請參閱[使用終止保護來保護 Amazon EMR 叢集免於意外關閉](UsingEMR_TerminationProtection.md)。

### 為 MRUnhealthyNodes CloudWatch 指標建立警示
<a name="w2aac36c21c13b7b7b7"></a>

這個指標會報告呈報 `UNHEALTHY` 狀態的節點數量。這是相當於 YARN 指標 `mapred.resourcemanager.NoOfUnhealthyNodes`。您可以設定此警示的通知在達到 45 分鐘逾前告知您運作狀態不佳的節點。如需詳細資訊，請參閱[使用 CloudWatch 來監控 Amazon EMR 指標](UsingEMR_ViewingMetrics.md)。

### 使用 yarn-site 調整設定
<a name="w2aac36c21c13b7b7b9"></a>

您可以根據您的應用程式需求調整下列節點。例如，對於節點報告 `UNHEALTHY` 的情況，您可能想要增加 `yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage` 的值來提高磁碟使用率閾值。

您可以在使用 `yarn-site` 組態分類建立叢集時設定這些值。如需詳細資訊，請參閱《Amazon EMR 版本指南》**中的[設定應用程式](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps.html)。您也可以使用 SSH 連接到與核心節點關聯的 Amazon EC2 執行個體，然後使用文字編輯器在 `/etc/hadoop/conf.empty/yarn-site.xml` 中新增值。變更後，您必須重新啟動 Hadoop-yarn-nodemanager，如下所示。

**重要**  
您重新啟動 NodeManager 服務時，除非在您您建立叢集時 `yarn.nodemanager.recovery.enabled` 是使用 `yarn-site` 組態分類的設定為 `true`，否則會終止作用中的 YARN 容器。您也必須使用 `yarn.nodemanager.recovery.dir` 屬性指定目錄來存放容器狀態。

```
sudo /sbin/stop hadoop-yarn-nodemanager
sudo /sbin/start hadoop-yarn-nodemanager
```

如需目前 `yarn-site` 屬性和預設值的詳細資訊，請參閱 Apache Hadoop 文件中的 [YARN 預設設定](http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-common/yarn-default.xml)。


| 屬性 | 預設值 | Description | 
| --- | --- | --- | 
|  yarn.nodemanager.disk-health-checker.interval-ms  |  120000  |  磁碟執行運作狀態檢查的頻率 (以秒為單位)。  | 
|  yarn.nodemanager.disk-health-checker.min-healthy-disks  |  0.25  |  NodeManager 啟動新的容器時必須達到的最低正常運作磁碟數量。這對應於 yarn.nodemanager.local-dirs (預設為 Amazon EMR 中的 `/mnt/yarn`) 和 yarn.nodemanager.log-dirs (預設為 `/var/log/hadoop-yarn/containers`，這會透過符號連結來連結到 Amazon EMR 中的 `mnt/var/log/hadoop-yarn/containers`)。  | 
|  `yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage`  |  90.0  |  磁碟標示為錯誤之前允許的磁碟空間使用率百分比上限。值可介於 0.0 到 100.0 之間。如果值大於或等於 100，NodeManager 會檢查整個磁碟。這適用於 `yarn-nodemanager.local-dirs` 和 `yarn.nodemanager.log-dirs`。  | 
|  `yarn.nodemanager.disk-health-checker.min-free-space-per-disk-mb`  |  0  |  磁碟提供的空間下限。這適用於 `yarn-nodemanager.local-dirs` 和 `yarn.nodemanager.log-dirs`。  | 

# Amazon EMR 叢集錯誤：無法複寫區塊，僅受管複寫至零節點。
<a name="enough-hdfs-space"></a>

「無法複寫區塊，僅能設法複寫到零節點。」錯誤 通常在叢集沒有足夠的 HDFS 儲存時發生。當您在叢集中產生的資料量超過可存放在 HDFS 中的資料量時會發生此錯誤。您僅會在該叢集執行時看到此錯誤，因為當該任務終止時，它將會釋放該任務所使用的 HDFS 空間。

叢集可使用的 HDFS 空間數量視用作核心節點的 Amazon EC2 執行個體類型數量而定。任務節點並不用於 HDFS 儲存體。在每個 Amazon EC2 執行個體上的所有磁碟空間 (包括附接的 EBS 儲存磁碟區) 都可供 HDFS 使用。如需每個 EC2 執行個體類型本機儲存體數量的詳細資訊，請參閱《*Amazon EC2 使用者指南*》中的[執行個體類型和系列](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html)。

影響 HDFS 空間可用量的另一個因素是複寫因素，它是存放在 HDFS 中用於備援的每個資料區塊的複本數量。複寫因素依叢集中的節點數量而增加：對於有 10 個或更多節點的叢集，每個資料區塊有 3 個複本，有 4 到 9 個節點的叢集，每個區塊有 2 個複本，有 3 個或更少節點的叢集，有 1 個副本 (無備援)。總可用 HDFS 空間除以複寫因素。在某些情況，例如節點數量從 9 增加為 10 的時候，增加的複寫因素可確實導致可用 HDFS 空間減少。

例如，一個擁有 10 個 m1.large 類型核心節點叢集，會有可供 HDFS 使用的 2833 GB 空間 ((10 個節點 X 每個節點 850 GB) 除以 3 個複寫因素)。

若您的叢集超出 HDFS 可用空間量，您可新增額外核心節點至您的叢集，或使用資料壓縮以建立更多 HDFS 空間。如果您的叢集是可以停止和重新啟動的叢集，您可以考慮使用較大的 Amazon EC2 執行個體類型的核心節點。或者您也可以考慮調整複寫因素。但請注意，減少複寫因素便會減少 HDFS 資料備援，以及您從遺失或毀損的 HDFS 區塊中復原的叢集能力。

# Amazon EMR 叢集錯誤：超過 EC2 QUOTA
<a name="emr-EC2"></a>

如果您看到了 `EC2 QUOTA EXCEEDED` 訊息，這可能有數個原因。依據其組態的不同，之前的叢集可能需要 5-20 分鐘時間才會終止並釋出配置資源。如果您在嘗試啟動叢集時收到了 `EC2 QUOTA EXCEEDED` 錯誤，原因可能是剛終止的叢集尚未釋出資源。此訊息也可能是因為執行個體群組，或執行個體機群大小調整為大於該帳戶目前執行個體配額的目標大小所導致。這可以透過自動調整規模來手動或自動進行。

請考量下列選項來解決這個問題：
+ 遵循《Amazon Web Services 一般參考》**中的 [AWS 服務配額](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)中的指示進行操作，以請求增加服務限制。對於某些 API 而言，設定 CloudWatch 事件可能比增加限制更好。如需詳細資訊，請參閱[何時在 CloudWatch 中設定 EMR 事件](emr-service-limits-cloudwatch-events.md)。
+ 如果一個或多個正在執行的叢集未達到容量，請調整執行個體群組的大小，或降低執行個體機群中的目標容量以執行叢集。
+ 以較少的 EC2 執行個體或減少的目標容量來建立叢集。

# 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 叢集中進行機器間的通訊。

# Amazon EMR 叢集錯誤：檔案只能複寫至 0 個節點而非 1 個節點
<a name="emr-troubleshoot-error-resource-2"></a>

當檔案被寫入至 HDFS 時，它即被複寫至多個核心節點。當您看到此錯誤時，即代表 NameNode 協助程式沒有任何可用的 DataNode 執行個體將資料寫入至 HDFS。意即並未發生區塊複寫。這錯誤可能是由於多個問題所致：
+ 該 HDFS 檔案系統可能已將空間用盡。這是最可能的原因。
+ DataNode 執行個體在任務執行時可能不可用。
+ DataNode 執行個體可能已被封鎖與主節點通訊。
+ 在核心執行個體群組中的執行個體可能無法使用。
+ 可能遺失權限。例如，JobTracker 協助程式可能沒有建立任務追蹤器資訊的許可。
+ DataNode 執行個體保留的空間設定可能不足。透過檢查 dfs.datanode.du.reserved 組態設定來檢查是否屬於這種情況。

若要檢查此問題是否因 HDFS 磁碟空間不足引起的，請查看 CloudWatch 中的 `HDFSUtilization` 指標。若此數值過高，您可新增額外核心節點至該叢集。如果您認為可能有一個叢集已用盡 HDFS 磁碟空間，您可在 CloudWatch 中設定警示，以在 `HDFSUtilization` 值超出特定層級時提醒您。如需詳細資訊，請參閱[手動調整執行中 Amazon EMR 叢集的大小](emr-manage-resize.md)及[使用 CloudWatch 來監控 Amazon EMR 指標](UsingEMR_ViewingMetrics.md)。

若 HDFS 空間用盡並非問題，檢查 DataNode 日誌、NameNode 日誌與網路連線，以了解可能阻止 HDFS 複製資料的其他問題。如需詳細資訊，請參閱[檢視 Amazon EMR 日誌檔案](emr-manage-view-web-log-files.md)。

# Amazon EMR 叢集錯誤：拒絕列出的節點
<a name="emr-troubleshoot-error-resource-3"></a>

NodeManager 協助程式負責於核心節點和任務節點啟動和管理容器。該容器是由主節點上執行的 ResourceManager 協助程式分配給 NodeManager 協助程式。ResourceManager 透過活動訊號監控 NodeManager 節點。

在幾種情況下，ResourceManager 常駐程式會將 NodeManager 節點列入拒絕清單，將其從可用於處理任務的節點集區中移除：
+ 如果 NodeManager 尚未在過去 10 分鐘 (60 萬毫秒) 內傳送活動訊號至 ResourceManager 常駐程式。可使用 `yarn.nm.liveness-monitor.expiry-interval-ms` 組態以設定此期間。如需有關變更 Yarn 組態設定的詳細資訊，請參閱《Amazon EMR 版本指南》**中的[設定應用程式](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps.html)。
+ NodeManager 檢查由 `yarn.nodemanager.local-dirs` 和 `yarn.nodemanager.log-dirs` 所決定的磁碟運作狀態。此檢查包含權限和可用磁碟空間 (< 90%)。如果某個磁碟未通過檢查，該 NodeManager 將停止使用該特定磁碟，但仍會回報該節點的運作狀態良好。如果多個磁碟未通過檢查，該節點會回報為運作狀態不佳至 ResourceManager，且新的容器不會指派給該節點。

如果出現超過三個以上的失敗任務，該應用程式主控也可以將 NodeManager 節點列入拒絕清單。您可以使用 `mapreduce.job.maxtaskfailures.per.tracker` 組態參數將此變更為較高數值。您可能變更的其他組態設定，控制了在將任務標記為失敗之前嘗試執行任務的次數：`mapreduce.map.max.attempts` 用於對應任務和 `mapreduce.reduce.maxattempts` 用於減少任務。如需有關變更組態設定的詳細資訊，請參閱《Amazon EMR 版本指南》**中的[設定應用程式](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps.html)。

# 使用 Amazon EMR 叢集調節錯誤
<a name="emr-throttling-error"></a>

在 Amazon EMR 由於其他服務已對活動限流而無法完成請求時，會發生「在啟動叢集時受到 *Amazon EC2* 限流」和「由於 *Amazon EC2* 限流而無法佈建執行個體」錯誤。Amazon EC2 是最常見的限流錯誤來源，但其他服務也可能是導致限流錯誤的原因。[AWS 服務限制](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)適用於每個區域以提高效能，而限流錯誤表示您已超出該區域中帳戶的服務限制。

## 可能原因
<a name="emr-failed-to-provision-instances-due-to-throttling-causes"></a>

Amazon EC2 限流錯誤最常見的來源，就是大量叢集執行個體的啟動，造成您的 EC2 執行個體服務超出限制。叢集執行個體可能會因為下列原因而啟動：
+ 新叢集的建立。
+ 手動調整叢集規模。如需詳細資訊，請參閱[手動調整執行中 Amazon EMR 叢集的大小](emr-manage-resize.md)。
+ 因為自動擴展規則，導致叢集中的執行個體群組新增執行個體 (向外擴展)。如需詳細資訊，請參閱[了解自動擴展規則](emr-automatic-scaling.md#emr-scaling-rules)。
+ 叢集中的執行個體機群新增執行個體，以滿足增加的目標容量。如需詳細資訊，請參閱[為您的 Amazon EMR 叢集規劃和設定執行個體機群](emr-instance-fleet.md)。

也有可能是因為向 Amazon EC2 進行的 API 請求頻率或類型導致限流錯誤。如需有關 Amazon EC2 如何對 API 請求限流的詳細資訊，請參閱《Amazon EC2 API 參考》**中的[查詢 API 請求率](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/query-api-troubleshooting.html#api-request-rate)。

## 解決方案
<a name="emr-throttling-error-solutions"></a>

請考量下列解決方案：
+ 遵循《Amazon Web Services 一般參考》**中的 [AWS 服務配額](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)中的指示進行操作，以請求增加服務限制。對於某些 API 而言，設定 CloudWatch 事件可能比增加限制更好。如需詳細資訊，請參閱[何時在 CloudWatch 中設定 EMR 事件](emr-service-limits-cloudwatch-events.md)。
+ 如果您的叢集以相同排程啟動 (例如，在整點)，則請考慮錯開啟動時間。
+ 如果您有針對尖峰需求設定大小的叢集，並且定期擁有執行個體容量，請考慮指定自動擴展以隨需新增和移除執行個體。如此便能更有效地使用執行個體，並根據需求設定檔，可以在帳戶的指定時間請求更少的執行個體。如需詳細資訊，請參閱[使用自動擴展搭配 Amazon EMR 中執行個體群組的自訂政策](emr-automatic-scaling.md)。

# Amazon EMR 叢集錯誤：不支援執行個體類型
<a name="emr-INSTANCE_TYPE_NOT_SUPPORTED-error"></a>

如果您建立叢集，但建立失敗並顯示錯誤訊息「請求的可用區域不支援請求的執行個體類型 *InstanceType*」，這表示您已建立叢集並為建立叢集的區域和可用區域中的 Amazon EMR 不支援的一或多個執行個體群組指定了執行個體類型。Amazon EMR 可能支援區域內一個可用區域中的執行個體類型，但不支援另一個可用區域中的執行個體類型。您為叢集選擇的子網路決定了區域內的可用區域。

## 解決方案
<a name="emr-INSTANCE_TYPE_NOT_SUPPORTED-error-solutions"></a>

**使用 判斷可用區域中的可用執行個體類型 AWS CLI**
+ 搭配使用 `ec2 run-instances` 命令與 `--dry-run` 選項。在下面的範例中，將 *m5.xlarge* 取代為您要使用的執行個體類型，將 *ami-035be7bafff33b6b6* 取代為與該執行個體類型關聯的 AMI，並將 *subnet-12ab3c45* 取代為可用區域中您要查詢的子網路。

  ```
  aws ec2 run-instances --instance-type m5.xlarge --dry-run --image-id ami-035be7bafff33b6b6 --subnet-id subnet-12ab3c45
  ```

  如需有關尋找 AMI ID 的指示，請參閱[尋找 Linux AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html)。若要尋找子網路 ID，您可以使用 [describe-subnets](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/describe-subnets.html) 命令。

若要進一步了解如何探索可用執行個體類型，請參閱[尋找 Amazon EC2 執行個體類型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-discovery.html)。

在您決定可用的執行個體類型後，您便可執行任何以下的操作：
+ 在同一個區域和 EC2 子網路中建立叢集，並選擇與初始選擇具備類似功能的不同執行個體類型。如需支援的執行個體類型清單，請參閱 [Amazon EMR 支援的執行個體類型](emr-supported-instance-types.md)。若要比較 EC2 執行個體類型的功能，請參閱 [Amazon EC2 執行個體類型](https://aws.amazon.com/ec2/instance-types/)。
+ 在可用區域中選擇叢集的子網路，該可用區域的執行個體類型為可用且受 Amazon EMR 支援。

**緩解執行個體機群叢集啟動失敗，因為 Amazon EMR 中不支援的主要執行個體類型**

主要節點在 Amazon EMR 叢集中至關重要。EMR 叢集啟動可能會失敗，並顯示`instance type not supported`錯誤，其中 Amazon EMR 嘗試在不支援主要執行個體類型的可用區域中啟動叢集。Amazon EMR 中執行個體機群叢集的增強型可用區域選擇會自動為您在叢集組態中指定的主要執行個體類型篩選掉不支援的AZs。這表示 Amazon EMR 不會選擇不支援已設定主要執行個體類型的可用區域，這可防止叢集啟動失敗，因為執行個體類型不受支援。

若要啟用此改善，請將必要的許可新增至叢集的服務角色或政策。的最新版本`AmazonEMRServicePolicy_v2`包含此許可，因此如果您使用該政策，則改進已經可用。如果您使用自訂服務角色或政策，請在啟動叢集`ec2:DescribeInstanceTypeOfferings`時新增 許可。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "ec2:DescribeInstanceTypeOfferings"
      ],
      "Effect": "Allow",
      "Resource": [
        "*"
      ],
      "Sid": "AllowEC2Describeinstancetypeofferings"
    }
  ]
}
```

------

# Amazon EMR 叢集錯誤：EC2 容量不足
<a name="emr-EC2_INSUFFICIENT_CAPACITY-error"></a>

當您嘗試在不再具有指定 *EC2 執行個體類型的可用區域中建立叢集或將執行個體新增至叢集時，EC2 容量會因 *InstanceType** 錯誤而不足。 EC2 您為叢集選擇的子網路決定了可用區域。

若要建立叢集，請執行下列其中一個操作：
+ 指定具有類似功能的不同執行個體類型
+ 在不同的區域中建立叢集
+ 在可用區域中選取可以提供您所需執行個體類型的子網路。

若要將執行個體新增至執行中的叢集，請執行下列其中一個操作：
+ 修改執行個體群組組態或執行個體機群組態，以新增具有類似功能的可用執行個體類型。如需支援的執行個體類型清單，請參閱 [Amazon EMR 支援的執行個體類型](emr-supported-instance-types.md)。若要比較 EC2 執行個體類型的功能，請參閱 [Amazon EC2 執行個體類型](https://aws.amazon.com/ec2/instance-types/)。
+ 終止叢集並在執行個體類型可用的區域和可用區域中重新建立叢集。

# Amazon EMR 叢集錯誤：HDFS 複寫因素錯誤
<a name="emr-hdfs-insufficient-replication"></a>

當您從核心[執行個體群組](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-uniform-instance-group.html)或[執行個體機群](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-instance-fleet.html)移除核心節點時，Amazon EMR 可能會遇到 HDFS 複寫錯誤。當您移除核心節點，且核心節點數目低於 Hadoop 分散式檔案系統 (HDFS) 設定的 [dfs.replication 係數](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-hdfs-config.html)時，就會發生此錯誤。因此，Amazon EMR 無法安全地執行操作。若要判斷`dfs.replication`組態的預設值，[HDFS 組態](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-hdfs-config.html)。

## 可能原因
<a name="emr-hdfs-insufficient-replication-possible-causes"></a>

請參閱下列 HDFS 複寫因素錯誤的可能原因：
+ 如果您[手動調整核心執行個體群組或執行個體機群的大小](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-manage-resize.html)低於設定的`dfs.replication`因素。
+ 受[管擴展](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-managed-scaling.html)或[自動擴展](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-automatic-scaling.html)的政策可能允許擴展，以減少核心節點的數量低於 的閾值`dfs.replication`。
+ 當叢集具有 定義的最小核心節點數量時，如果 Amazon EMR 嘗試[取代](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-node-replacement.html)運作狀態不佳的核心節點，也可能發生此錯誤[]()。

## 解決方案和最佳實務
<a name="emr-hdfs-insufficient-replication-best-practices"></a>

如需解決方案和最佳實務，請參閱下列內容：
+ 當您手動調整 Amazon EMR 叢集的大小時，請勿縮減到低於 的大小，`dfs.replication`因為 Amazon EMR 無法安全地完成調整大小。
+ 當您使用受管擴展或自動擴展時，請確定叢集的最小容量不低於 `dfs.replication`係數。
+ 核心執行個體的數量應至少`dfs.replication`加 1。如果您啟用運作狀態不佳的核心取代，這可確保 Amazon EMR 可以成功取代運作狀態不佳的核心節點。

**重要**  
如果您`dfs.replication`將 設定為 1，單一核心節點故障可能會導致 HDFS 資料遺失。如果您的叢集有 HDFS 儲存體，建議您為生產工作負載設定至少四個核心節點的叢集，以避免資料遺失，並將`dfs.replication`係數設定為至少 2。

# Amazon EMR 叢集錯誤：HDFS 空間不足錯誤
<a name="emr-hdfs-insufficient-space"></a>

 如果您嘗試移除核心節點，但 Amazon EMR 因為 HDFS 中剩餘的空間不足而無法安全地完成操作，則可能會發生 Hadoop 分散式檔案系統 (HDFS) 空間不足錯誤。在 Amazon EMR 移除核心節點之前，節點上的所有 HDFS 資料必須傳輸到其他核心節點，以確保資料備援。不過，如果其他核心節點上沒有足夠的複寫空間，Amazon EMR 將無法正常解除委任節點。

## 可能原因
<a name="emr-hdfs-insufficient-space-possible-causes"></a>

 如需 HDFS 空間不足錯誤的可能原因清單，請參閱下列內容：
+ 如果您在縮減之前剩餘節點上沒有足夠的 HDFS 空間進行資料複寫時，手動縮減核心執行個體群組或執行個體機群。
+ 當沒有足夠的 HDFS 空間進行資料複寫時，受管擴展或自動擴展會縮減核心執行個體群組或執行個體機群。
+ Amazon EMR 會嘗試取代運作狀態不佳的核心節點，但由於 HDFS 空間不足而無法安全地取代節點。

## 解決方案和最佳實務
<a name="emr-hdfs-insufficient-space-best-practices"></a>

如需解決方案和最佳實務，請參閱以下內容：
+ 擴展 Amazon EMR 叢集中的核心節點數量。如果您使用受管擴展或自動擴展，請增加核心節點的最小容量。
+ 當您建立 EMR 叢集時，請為您的核心節點使用較大的 EBS 磁碟區。
+ 刪除 EMR 叢集中不需要的 HDFS 資料。我們建議您設定 CloudWatch `HDFSUtilization` 警示來監控叢集中的指標，以了解 EMR 叢集的空間是否不足。