為什麼我在 Amazon EMR 中的 Yarn 應用程式仍處於「已接受」狀態?
我的 Amazon EMR 作業卡在「已接受」狀態,並且日誌顯示「WARN YarnScheduler:初始作業未接受任何資源;請檢查叢集 UI 以確保工作者已註冊並擁有足夠的資源」。
簡短描述
如果叢集沒有足夠的資源來滿足作業要求,EMR 工作就會卡在「已接受」狀態。發生這種情形的可能原因如下:
- YARNMemoryAvailablePercentage 非常低,且許多容器都在擱置中。
- 由於核心節點上的資源不足,應用程式無法啟動應用程式主節點。這會發生在 Amazon EMR 5.19.0 和更新版本上,不包括 Amazon EMR 6.x 系列。
- 核心節點運作狀態不良。
- 一個 EMR 作業正在消耗所有資源。
解決方案
叢集沒有足夠的資源來滿足作業要求
1. 連線到 Resource Manager UI 或從任何節點使用下列命令來檢查資源:
yarn top 10
2. 檢查 Used Resources (使用的資源) 是否幾乎等同於 Total Resources (總資源)。您也可以檢查 Amazon CloudWatch 指標的 YARNMemoryAvailablePercentage 和 MemoryAvailableMB。
4. 如有需要,請為叢集新增更多容量。您可以使用 EMR 受管擴展或自動擴展,根據資源使用率自動新增或縮小容量。
核心節點上的資源不足。
在 EMR 5.19.0 和更新版本 (不包括 6.0 系列) 上,應用程式主節點預設會在核心節點上執行。 在 EMR 6.x 系列中,應用程式主節點可以同時在核心和任務節點上執行。
由於提交的作業數量增加且核心節點較少,核心節點無法配置另一個應用程式主容器。因此,即使任務節點有足夠的記憶體,作業也可能會卡住。如果發生這種情況,您可能會在容器日誌中看到下列訊息:
Application is Activated, waiting for resources to be assigned for AM. Last Node which was processed for the application : ip-xxxx:8041 ( Partition : [], Total resource : <memory:516096, vCores:64>, Available resource : <memory:516096,vCores:64> ). Details : AM Partition = CORE ; Partition Resource = <memory:516096, vCores:64> ; Queue's Absolute capacity = 100.0 % ; Queue's Absolute used capacity = 99.53497 % ; Queue's Absolute max capacity =100.0 %
如果發生這種情況,請終止作業以釋放一些資源。或者,將更多核心節點新增至叢集。
此外,您可以在 Amazon EMR 5.x 中關閉 YARN 標籤。
核心節點運作狀態不良
如果核心節點的磁碟空間不足,而且掛載點的磁碟使用率超過 90%,Amazon EMR 會將節點視為運作狀態不良。新的容器不會在運作狀態不良的節點上排程。如果發生這種情況,下列訊息會出現在主要執行個體的控制器日誌中。日誌位於 /emr/instance-controller/log。
Yarn unhealthy Reason : 1/4 local-dirs usable space is below configured utilization percentage/no more usable space [ /mnt/yarn : used space above threshold of 90.0% ] ; 1/1 log-dirs usable space is below configured utilization percentage/no more usable space [ /var/log/hadoop-yarn/containers : used space above threshold of 90.0% ]
若要修正運作狀態不良的節點,請移除舊的容器日誌或 Spark 事件日誌,以減少磁碟使用量。 您也可以根據磁碟使用率動態擴展儲存空間。
一項作業正在消耗所有資源或 Spark 參數設定超出叢集限制
「Spark 動態配置」在 Amazon EMR 中預設為開啟。如果 Spark 作業未正確設定,則該作業可能會耗用叢集的所有資源。例如,如果執行程式上限 (spark.dynamicAllocation.maxExecutors) 限制不夠高,您會收到此錯誤。對於 Spark 作業,請調整記憶體限制,以避免一項作業耗用叢集的所有資源。
如果執行程式記憶體或驅動程式記憶體超過 Yarn 設定的參數,則作業接受會失敗。Yarn 設定參數是 yarn.scheduler.maximum-allocation-mb 和 yarn.nodemanager.resource.memory-mb。如果發生這種情況,您會看到類似於以下內容的錯誤訊息:
22/01/03 20:05:05 INFO Client: Verifying our application has not requested more than the maximum memory capability of the cluster (24576 MB per container) Exception in thread "main" java.lang.IllegalArgumentException: Required executor memory (49152),overhead (6144 MB), and PySpark memory (0 MB) is above the max threshold (24576 MB) of this cluster! Please check the values of 'yarn.scheduler.maximum-allocation-mb' and/or 'yarn.nodemanager.resource.memory-mb'.
若要解決此錯誤,請執行下列動作:
- 在變更記憶體值之前,確認 yarn 每個執行個體記憶體類型 的數量。
- 實作 CapacityScheduler 佇列以限制作業所使用的作業資源。

相關內容
- 已提問 5 個月前lg...
- 已提問 5 個月前lg...
- 已提問 5 個月前lg...
- 已提問 4 個月前lg...
- 已提問 5 個月前lg...
- AWS 官方已更新 3 個月前
- AWS 官方已更新 2 個月前
- AWS 官方已更新 3 個月前
- AWS 官方已更新 3 個月前