我為我的 Amazon EMR 叢集建立了自訂啟動程序動作。叢集無法啟動,並且啟動程序動作傳回如下錯誤:「啟動程序動作 1 傳回非零傳回代碼」。
簡短描述
在 Amazon EMR 佈建叢集中的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體之後執行啟動程序動作。啟動程序動作失敗時,Amazon EMR 會終止執行個體。如需詳細資訊,請參閱瞭解叢集生命週期。
如果啟動程序動作因為啟動程序指令碼中的錯誤而失敗,則叢集無法啟動。如需詳細資訊,請參閱啟動程序動作基礎知識。
解決方法
為確定啟動程序動作失敗的原因,請檢閱啟動程序動作的 stderr logs。這些日誌位於您先前在建立 Amazon EMR 叢集時設定的 Amazon Simple Storage Service (Amazon S3) 路徑或 LogUri 中。
範例:s3://example-log-location/example-cluster-id/node/example-instance-id/bootstrap-actions/
如果您在檢閱 stderr 日誌後無法確定指令碼為何失敗,請修改指令碼以提供其他偵錯資訊。例如,在 bash 指令碼中設定 -ex 參數。這可讓您檢視啟動程序動作日誌中的 bash 指令碼流程。
#!/bin/bash
set -x -e
**注意:**如果失敗的啟動程序動作不是您建立的啟動程序動作 (例如,如果您建立了六個啟動程序動作,但看到錯誤訊息為「啟動程序動作 7 失敗,結束代碼非零」),則該錯誤訊息表示 Amazon EMR 無法安裝應用程式或啟動服務。
若要對此問題進行疑難排解,請檢查 Amazon EMR 佈建日誌。Amazon EMR 使用 Puppet 在叢集上安裝和設定應用程式。日誌可能會提供叢集佈建期間所造成之錯誤的相關資訊。
如果將日誌設定為推送到 S3,則可以在叢集或 S3 上存取這些日誌。這些日誌儲存在磁碟上的 /var/log/provision-node/apps-phase/0/example-UUID}/puppet.log 和 s3://example-log-location/example-cluster-id/node/example-instance-id/provision-node/apps-phase/0/{UUID}/puppet.log.gz中。
相關資訊
使用自訂啟動程序動作