我想在 Amazon EMR 叢集上執行 Apache Spark 作業,但核心節點的磁碟空間幾乎已滿。
解決方法
確定是否存在運作狀態不佳的核心節點
當至少附加一個 Amazon Elastic Block Store (Amazon EBS) 磁碟區的節點磁碟使用率超過 90% 時,就會將該節點視為運作狀態不佳。若要確定哪些節點的磁碟使用率已達 90%,請完成以下步驟:
- 檢查 MRUnhealthyNodes Amazon CloudWatch 指標。此指標會顯示 EMR 叢集中運作狀態不佳的節點數量。
**注意:**您也可以建立 CloudWatch Alarm 以監控 MRUnhealthyNodes 指標。
- 連線至主節點,並存取位於 /emr/instance-controller/log/instance-controller.log 的執行個體控制器日誌。
- 在執行個體控制器日誌中,搜尋 InstanceJointStatusMap 以識別哪些節點運作狀態不佳。
如需更多資訊,請參閱由於運作狀態不佳節點造成的高磁碟使用率章節,其位於 如何解決 Amazon EMR 上 Spark 的 "ExecutorLostFailure: Slave lost" 錯誤?中
- 若要判斷掛載點是否使用率過高,請登入核心節點,然後執行以下命令:
df -h
移除不必要的本機及暫存 Spark 應用程式檔案
當您執行 Spark 任務時,Spark 應用程式會建立本機檔案,佔用核心節點剩餘的磁碟空間。例如,如果 df -h 命令顯示 /mnt 使用超過 90% 的磁碟空間,請檢查哪些目錄或檔案使用率過高。
在核心節點上執行以下命令,以查看使用磁碟空間最多的前 10 個目錄:
cd /mnt
sudo du -hsx * | sort -rh | head -10
如果 /mnt/hdfs 目錄使用率過高,請檢查 Hadoop 分散式檔案系統 (HDFS) 的使用情況,並移除任何不必要的檔案,例如日誌檔案。若要檢查特定目錄的空間使用率,請執行以下命令:
hdfs dfsadmin -report
hadoop fs -du -s -h /path/to/dir
注意: 將 /path/to/dir 替換為您要檢查空間使用率的目錄路徑。
縮短 Spark 事件與 YARN 容器日誌的保留期間
/var/log 目錄會儲存 Spark 事件日誌與 YARN 容器日誌等日誌檔案。若要自動清理 HDFS 中的日誌檔案,請縮短保留期間。
縮短 Spark 作業歷史檔案的預設保留期間
預設情況下,Spark 作業歷史檔案位於 /var/log/spark/apps。當執行檔案系統歷史清理程序時,Spark 會刪除超過七天的作業歷史檔案。
若要在執行中的叢集上縮短預設保留期間,請完成以下步驟:
- 使用 SSH 連線至主節點。
- 在 /etc/spark/conf/spark-defaults.conf 中新增或更新以下值:
------spark.history.fs.cleaner.enabled true
spark.history.fs.cleaner.interval 12h
spark.history.fs.cleaner.maxAge 1d
------
上述組態會每 12 小時執行一次清理程序。組態會清除超過 1 天的檔案。您可以透過 spark.history.fs.cleaner.internval 與 spark.history.fs.cleaner.maxAge 參數自訂此時段。
- 重新啟動 Spark History Server。
若要在啟動叢集時縮短 Spark 作業歷史檔案的預設保留期間,請使用以下組態:
{
"Classification": "spark-defaults",
"Properties": {
"spark.history.fs.cleaner.enabled": "true",
"spark.history.fs.cleaner.interval": "12h",
"spark.history.fs.cleaner.maxAge": "1d"
}
}
您可以透過 spark.history.fs.cleaner.interval 與 spark.history.fs.cleaner.maxAge 參數自訂時間時段。
如需更多關於這些參數的資訊,請參閱 Apache Spark 網站上的監控與檢測。
縮短 YARN 容器日誌的預設保留期間
Spark 應用程式日誌即 Spark 作業的 YARN 容器日誌,位於核心節點的 /var/log/hadoop-yarn/apps。Spark 在應用程式執行完成後,會將這些日誌移至 HDFS。預設情況下,YARN 會在 HDFS 上將應用程式日誌保留 48 小時。若要縮短保留期間,請完成以下步驟:
- 使用 SSH 連線至主要節點、核心節點或任務節點。
- 在 Amazon EMR 叢集中的每個節點上 (主節點、核心節點和任務節點) 開啟 /etc/hadoop/conf/yarn-site.xml 檔案。
- 縮短所有節點上 yarn.log-aggregation.retain-seconds 屬性的值。
- 重新啟動 ResourceManager 常駐程式。
您也可以重新設定叢集,縮短保留期間。
減少 /mnt/yarn 的使用量
當 /mnt/yarn 目錄磁碟使用率過高時,可調整使用者快取保留或擴展節點上的 EBS 磁碟區。如需更多資訊,請參閱如何停止 Hadoop 或 Spark 作業的使用者快取,以避免快取佔用過多 Amazon EMR 的磁碟空間?
調整叢集大小或擴展 Amazon EMR
為避免 HDFS 空間問題,請擴展核心節點數量。如果 HDFS 以外的目錄空間已滿,請擴展核心或任務節點數量。如需更多資訊,請參閱使用 Amazon EMR 叢集自動擴展以應對工作負載變化。
您也可以擴展現有節點的 EBS 磁碟區或使用動態擴展指令碼。如需更多資訊,請參閱如何解決 Amazon EMR 上 Apache Spark 作業的「裝置上沒有剩餘空間」階段失敗?
相關資訊
設定 Amazon EMR 叢集硬體與網路
HDFS 組態
在 Amazon EMR 上使用儲存空間與檔案系統