我想要解決使用自動終止政策時,Amazon EMR 叢集不會終止或比預期更早終止的問題。
簡短說明
建立 Amazon EMR 叢集時,您可以開啟自動終止政策。自動終止原則會在特定閒置時間後終止叢集。
在 Amazon EMR 版本 5.34 至 5.36 和 6.4.0 或更高版本中,叢集會因以下原因而閒置:
- YARN 應用程式未處於作用中狀態。
- HDFS 的使用率低於 10%。
- Amazon EMR Notebook 或 EMR Studio 連線未處於作用中狀態。
- 叢集應用程式使用者介面未在使用中。
在 Amazon EMR 版本 5.30.0 至 5.33.1 和 6.1.0 至 6.3.0 中,叢集會因為以下原因而閒置:
- YARN 應用程式未處於作用中狀態。
- HDFS 的使用率低於 10%。
- 叢集 Spark 工作未處於作用中狀態。
解決方案
若要解決使用自動終止政策時,Amazon EMR 叢集未終止或比預期更早終止的問題,請完成下列步驟:
-
確認 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體設定檔角色 EMR_EC2_DefaultRole 具有下列權限。如果執行個體設定檔角色沒有下列權限,叢集就會在達到閒置逾時期間後仍保持作用中狀態。
{
"Version": "2012-10-17",
"Statement": {
"Sid": "AllowAutoTerminationPolicyActions",
"Effect": "Allow",
"Action": [
"elasticmapreduce:PutAutoTerminationPolicy",
"elasticmapreduce:GetAutoTerminationPolicy",
"elasticmapreduce:RemoveAutoTerminationPolicy"
],
"Resource": "your-resources"
}
}
-
對於所有 Amazon EMR 版本,請確定 metrics-collector 程序正在執行中。metrics-collector 程序會收集測量結果,以判斷是否要自動終止。
若要檢查 metrics-collector 程序,請執行下列命令:
ps -ef|grep metrics-collector
-or-
systemctl status metricscollector.service
如需詳細資訊,請參閱如何在 Amazon EMR 中重新啟動服務?
-
檢視 Amazon EMR 叢集的 CloudWatch 指標。請確定 AutoTerminationClusterIdle CloudWatch 測量結果在叢集中顯示 1。如果測量結果顯示 1,則叢集符合自動終止的資格。如果測量結果顯示 為 0,則叢集處於作用中狀態,而且不符合自動終止的資格。
-
對於早於 6.15.0 的 Amazon EMR 版本,請檢查您是否覆寫 EMR 叢集上的預設 Java 版本。如果您覆寫 Amazon EMR 中使用的預設 Java 版本,則自動終止不會如預期運作。
若要解決此問題,請在執行中叢集的主要執行個體上執行下列指令碼,或在新叢集上作為啟動程序動作:
#Change EMR daemon startup scripts to use JDK8
sudo sed -i 's#$JAVA_HOME#/usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre#g' /usr/bin/logpusher
sudo sed -i 's#$JAVA_HOME#/usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre#g' /usr/bin/instance-controller
sudo sed -i 's#/usr/bin/java#/usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre/bin/java#g' /usr/bin/metricscollector
#Restart the daemons
sudo systemctl restart instance-controller
sudo systemctl restart logpusher
sudo systemctl restart metricscollector.service