為什麼我的 Amazon EMR 群集無法啟動並傳回錯誤「啟動程序動作傳回非零傳回代碼」?

1 分的閱讀內容
0

我為我的 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.logs3://example-log-location/example-cluster-id/node/example-instance-id/provision-node/apps-phase/0/{UUID}/puppet.log.gz中。


相關資訊

使用自訂啟動程序動作

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