我在 Amazon EMR 叢集上執行 Apache Spark 任務,而核心節點的磁碟空間幾乎用完了。
解決方法
判斷哪些核心節點運作狀態不佳
至少附加一個 Amazon Elastic Block Store (Amazon EBS) 磁碟區的節點,如果磁碟使用率達到 90% 以上,就會視為運作狀態不佳。若要判斷哪些節點的磁碟使用率可能已達到 90%,請執行下列動作:
1. 檢查 Amazon CloudWatch 指標 MRUnhealthyNodes。此指標表示 EMR 叢集中運作狀態不佳的節點數目。
**注意事項:**您可以建立 CloudWatch 警示以監控 MRUnhealthyNodes 指標。
2. 連線至主節點,並存取位於 /emr/instance-controller/log/instance-controller.log 的執行個體控制器日誌。在執行個體控制器日誌中,搜尋 InstanceJointStatusMap 以識別哪些節點運作狀態不佳。
如需詳細資訊,請參閱如何解決 Amazon EMR 上 Spark 中的 ExecutorLostFailure「從屬遺失」錯誤?的**「高磁碟使用率」**
3. 登入核心節點,然後執行下列命令以判斷掛載是否具有高使用率:
df -h
移除不必要的本機和臨時 Spark 應用程式檔案
當您執行 Spark 任務時,Spark 應用程式會建立本機檔案,這些檔案會使用核心節點上剩餘的磁碟空間。例如,如果 df-h 命令顯示 /mnt 使用超過 90% 的磁碟空間,請檢查哪些目錄或檔案的使用率過高。
請在核心節點上執行下列命令,查看使用最多磁碟空間的前 10 個目錄:
cd /mnt
sudo du -hsx * | sort -rh | head -10
如果 /mnt/hdfs 目錄的使用率過高,請檢查 HDFS 使用情況並移除任何不必要的檔案,例如日誌檔。縮短保留期有助於從 HDFS 自動清理日誌檔。
hdfs dfsadmin -report
hadoop fs -du -s -h /path/to/dir
縮短 Spark 事件和 YARN 容器日誌的保留期
HDFS 使用的常見原因是 /var/log 目錄。/var/log 目錄是存放 Spark 事件日誌和 YARN 容器日誌等日誌檔的位置。您可以變更這些檔案的保留期以節省空間。
下列命令範例顯示 /var/log/spark 的使用量。
注意:/var/log/spark 是預設的 Spark 事件日誌目錄。
hadoop fs -du -s -h /var/log/spark
縮短 Spark 任務歷史記錄檔案的預設保留期
Spark 任務歷史記錄檔案預設位於 /var/log/spark/apps。檔案系統歷史記錄清除工具執行時,Spark 會刪除超過七天的任務歷史記錄檔案。若要縮短預設保留期,請執行下列動作:
在執行中的叢集上:
1. 使用 SSH 連線至主節點。
2. 在 /etc/spark/conf/spark-defaults.conf 中新增或更新下列值。下列組態每 12 小時執行一次清理程序。清除超過一天的配置清除檔案。您可以視您的個人使用案例,在 spark.history.fs.cleaner.internval 和 spark.history.fs.cleaner.maxAge 參數中自訂此時間長度。
------
spark.history.fs.cleaner.enabled true
spark.history.fs.cleaner.interval 12h
spark.history.fs.cleaner.maxAge 1d
------
3. 重新啟動 Spark 歷史記錄伺服器。
叢集啟動期間:
請使用以下組態。您可以視您的個人使用案例,在 spark.history.fs.cleaner.internval 和 spark.history.fs.cleaner.maxAge 參數中自訂時間長度。
{
"Classification": "spark-defaults",
"Properties": {
"spark.history.fs.cleaner.enabled":"true",
"spark.history.fs.cleaner.interval":"12h",
"spark.history.fs.cleaner.maxAge":"1d"
}
}
如需有關這些參數的詳細資訊,請參閱 Spark 文件中的監控和檢測。
縮短 YARN 容器日誌的預設保留期
Spark 應用程式日誌,也就是您的 Spark 任務的 YARN 容器日誌,位於核心節點的 /var/log/hadoop-yarn/apps 目錄中。當應用程式執行完成時,Spark 會將這些日誌移至 HDFS。預設情況下,YARN 會在 HDFS 上將應用程式日誌保留 48 小時。若要縮短保留期:
1. 使用 SSH 連線至主要節點、核心節點或任務節點。
2. 在 Amazon EMR 叢集中的每個節點上 (主要節點、核心節點和任務節點) 開啟 /etc/hadoop/conf/yarn-site.xml 檔案。
3. 在所有節點上縮減 yarn.log-aggregation.retain-seconds 屬性的值。
4. 重新啟動 ResourceManager 常駐程式。如需詳細資訊,請參閱檢視並重新啟動 Amazon EMR 和應用程式程序。
您也可以透過重新設定叢集來縮短保留期。如需詳細資訊,請參閱重新設定執行中叢集中的執行個體群組。
減少 /mnt/yarn 使用量
如果高度使用 /mnt/yarn 目錄,請調整使用者快取保留或擴展節點上的 EBS 磁碟區。如需詳細資訊,請參閱如何防止 Hadoop 或 Spark 任務的使用者快取在 Amazon EMR 中耗用過多磁碟空間?
調整叢集大小或擴展 Amazon EMR
請新增更多核心節點以緩解 HDFS 空間問題。此外,如果 HDFS 目錄以外的目錄已滿,請新增任何核心或任務節點。如需詳細資訊,請參閱擴展叢集資源。
您也可以擴充現有節點中的 EBS 磁碟區,或使用動態擴展指令碼。如需詳細資訊,請參閱下列內容:
相關資訊
設定叢集硬體和網路
HDFS 組態
使用儲存空間和檔案系統