如何防止 Hadoop 或 Spark 任務的使用者快取在 Amazon EMR 中耗用過多磁碟空間?

2 分的閱讀內容
0

我的 Apache Hadoop 或 Apache Spark 任務的使用者快取佔用了分割區上的所有磁碟空間。Amazon EMR 任務失敗或 HDFS NameNode 服務處於安全模式。

簡短說明

在 Amazon EMR 叢集上,YARN 設定為允許任務將快取資料寫入 /mnt/yarn/usercache。當您處理大量資料或執行多個並行任務時,/mnt 檔案系統可能會填滿。這會導致某些節點上的節點管理員失敗,然後導致任務凍結或失敗。

請使用下列其中一種方法來解決此問題:

  • 調整 YARN NodeManager 的使用者快取保留設定。如果您沒有長時間執行的任務或串流任務,請選擇此選項。
  • 擴展 Amazon Elastic Block Store (Amazon EBS) 磁碟區。如果您具有長時間執行的任務或串流任務,請選擇此選項。

解決方法

選項 1: 調整 NodeManager 的使用者快取保留設定

下列屬性定義快取清除設定:

  • **yarn.nodemanager.localizer.cache.cleanup.interval-ms:**這是快取清理間隔。預設值為 60 萬毫秒。在此間隔之後 (如果快取大小超過在 yarn.nodemanager.localizer.cache.target-size-mb 中設定的值),系統會刪除執行中的容器未使用的檔案。
  • **yarn.nodemanager.localizer.cache.target-size-mb:**這是快取允許的最大磁碟空間。預設值為 10,240 MB。在快取磁碟大小超過此值時,系統會按 yarn.nodemanager.localizer.cache.cleanup.interval-ms 中設定的間隔刪除執行中的容器未使用的檔案。

若要在執行中的叢集上設定清理間隔和最大磁碟空間大小,請執行以下操作:

1.    在每個核心和任務節點上開啟 /etc/hadoop/conf/yarn-site.xml,然後減少 yarn.nodemanager.localizer.cache.cleanup.intervalyarn.nodemanager.localizer.cache.target-size-mb 的值。例如:

sudo vim /etc/hadoop/conf/yarn-site.xml

yarn.nodemanager.localizer.cache.cleanup.interval-ms 400000
yarn.nodemanager.localizer.cache.target-size-mb 5120

2.    若要重新啟動 NodeManager 服務,請在每個核心和任務節點上執行下列命令:

sudo stop hadoop-yarn-nodemanager
sudo start hadoop-yarn-nodemanager

**注意:**在 Amazon EMR 發行版 5.21.0 和更新版本中,您也可以使用類似下列內容的組態物件覆寫叢集組態或為執行中的叢集指定其他組態分類。如需詳細資訊,請參閱重新設定執行中叢集中的執行個體群組

若要在新叢集上設定清理間隔和磁碟空間大小上限,請在啟動叢集時新增類似下列項目的組態物件

[
    {
      "Classification": "yarn-site",
     "Properties": {
       "yarn.nodemanager.localizer.cache.cleanup.interval-ms": "400000",
       "yarn.nodemanager.localizer.cache.target-size-mb": "5120"
      }
    }
]

請記住,刪除服務不會在執行中的容器上完成。這表示即使在您調整使用者快取保留設定之後,資料仍可能會溢出至下列路徑並填滿檔案系統:

{'yarn.nodemanager.local-dirs'}/usercache/user/appcache/application_id ,

選項 2: 擴展 EMR 叢集節點上的 EBS 磁碟區

若要擴展執行中 EMR 叢集上的儲存空間,請參閱動態擴展 Amazon EMR 叢集上的儲存存空間

若要擴展新 EMR 叢集上的儲存存空間,請在建立 EMR 叢集時指定較大的磁碟區大小。您也可以在將節點新增至現有叢集時執行此操作:

  • **Amazon EMR 發行版 5.22.0 和更新版本:**預設 EBS 儲存量會根據 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體的大小增加。如需有關依預設為每個執行個體類型配置的儲存空間量和磁碟區數量的詳細資訊,請參閱執行個體的預設 Amazon EBS 儲存空間
  • Amazon EMR 發行版 5.21 和更早版本:預設的 EBS 磁碟區大小為 32 GB。在此數量中,系統會為 /mnt 分割區保留 27 GB 的空間。HDFS、YARN、使用者快取以及所有應用程式都使用 /mnt 分割區。視需要增加 EBS 磁碟區的大小 (例如 100-500 GB 或更多)。您也可以指定多個 EBS 磁碟區。多個 EBS 磁碟區將會掛載為 /mnt1/mnt2 等等。

對於 Spark 串流任務,您也可以在處理完成且不再需要資料時執行 unpersist (RDD.unpersist())。或者,在 Scala (在 Python 中為 sc._jvm.System.gc()) 中明確呼叫 System.gc() 以啟動 JVM 垃圾回收並移除中繼隨機排序檔案。


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