為什麼我在 Amazon EMR 中的 Yarn 應用程式仍處於「已接受」狀態?

2 分的閱讀內容
0

我的 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 指標YARNMemoryAvailablePercentageMemoryAvailableMB

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-mbyarn.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'.

若要解決此錯誤,請執行下列動作:


AWS 官方
AWS 官方已更新 1 年前