為什麼我的 Amazon EMR 叢集在「應用程式佈建失敗」錯誤的情況下終止?

3 分的閱讀內容
0

我的 Amazon EMR 叢集在「應用程式佈建失敗」錯誤的情況下終止。這個錯誤是什麼意思,我要如何修正此錯誤?

解決方案

當 Amazon EMR 啟動 EMR 叢集時無法安裝、設定或啟動指定的軟體時,您會看到「應用程式佈建失敗」錯誤。以下各節會向您展示如何尋找和檢閱佈建日誌。各節也會向您展示不同類型的錯誤和可以採取的步驟,以解決這些錯誤。

檢閱儲存在 Amazon S3 中的 Amazon EMR 佈建日誌

Amazon EMR 佈建日誌儲存在叢集啟動時指定的 Amazon Simple Storage Service (Amazon S3) 儲存貯體中。日誌的儲存位置使用以下 Amazon S3 URI 語法:

s3://example-log-location/example-cluster-ID/node/example-primary-node-ID/provision-node/apps-phase/0/example-UUID/puppet.log.gz

**備註:**將 example-log-locationexample-cluster-IDexample-primary-node-IDexample-UUID 替換為您系統的命名。

  1. 開啟 Amazon EMR 主控台。在導覽窗格中,選擇叢集。然後,選擇失敗的 EMR 叢集以查看叢集詳細資料。
  2. 摘要區段中,選擇「因錯誤而終止」,並記下錯誤訊息中包含的主節點 ID。
  3. 叢集日誌區段中,選擇要重新導向至 Amazon S3 主控台中叢集日誌的 Amazon S3 位置 URL。
  4. 按照以下路徑來導覽至您的 UUID 資料夾:node/example-primary-node-ID/provision-node/apps-phase/0/example-UUID/
    **備註:**將 example-primary-node-IDexample-UUID 替換為您系統的命名。
  5. 在產生的清單中,選取 puppet.log.gz 並選擇開啟以在新的瀏覽器標籤上查看佈建。

識別佈建日誌時失敗的原因

不支援的組態參數會導致錯誤。錯誤也可能是由錯誤的主機名稱,不正確的密碼或一般作業系統問題所造成。搜尋日誌中的相關關鍵字,包含「錯誤」或「失敗」。

以下是常見錯誤類型的清單:

  • 使用 Amazon Relational Database Service (Amazon RDS) 執行個體連線至外部中繼存放區時發生問題。
  • 連線至外部金鑰發佈中心 (KDC) 時發生問題。
  • 啟動服務時發生問題,例如 YARN ResourceManager 和 Hadoop NameNode。
  • 下載或安裝應用程式時發生問題。
  • S3 日誌無法使用。

使用 Amazon RDS 執行個體連線至外部中繼存放區時發生問題

部分 Amazon EMR 應用程式 (例如 Hive、Hue 或 Oozie) 可以設定為將資料儲存在外部資料庫中,例如 Amazon RDS。當連線時發生問題,就會顯示訊息。

以下是來自 Hive 的範例錯誤訊息:

2022-11-26 02:59:36 +0000 /Stage[main]/Hadoop_hive::Init_metastore_schema/Exec[init hive-metastore schema]/returns (notice): org.apache.hadoop.hive.metastore.HiveMetaException: Failed to get schema version.
2022-11-26 02:59:36 +0000 /Stage[main]/Hadoop_hive::Init_metastore_schema/Exec[init hive-metastore schema]/returns (notice): Underlying cause: java.sql.SQLNonTransientConnectionException : Could not connect to address=(host=hostname)(port=3306)(type=master) : Socket fail to connect to host:hostname, port:3306. hostname
2022-11-26 02:59:36 +0000 /Stage[main]/Hadoop_hive::Init_metastore_schema/Exec[init hive-metastore schema]/returns (notice): SQL Error code: -1

若要解決此類型的錯誤:

  • 確認 RDS 執行個體主機名稱、使用者、密碼和資料庫是否正確。
  • 確認 RDS 執行個體安全群組輸入規則允許來自 Amazon EMR 主節點安全群組的連線。

連線至外部 KDC 時發生問題

您可以使用 Amazon EMR 設定外部 KDC,來提供額外的一層安全機制。您也可以建立與 Active Directory 伺服器的信任關係。當聯絡 KDC 或加入網域時發生問題,就會顯示訊息。

以下是來自 Puppet 的範例錯誤訊息:

2022-11-26 03:02:01 +0000 Puppet (err): 'echo "${AD_DOMAIN_JOIN_PASSWORD}" | realm join -v -U "${AD_DOMAIN_JOIN_USER}"@"${CROSS_REALM_TRUST_REALM}" "${CROSS_REALM_TRUST_DOMAIN}"' returned 1 instead of one of [0]
2022-11-26 03:02:01 +0000 /Stage[main]/Kerberos::Ad_joiner/Exec[realm_join]/returns (err): change from 'notrun' to ['0'] failed: 'echo "${AD_DOMAIN_JOIN_PASSWORD}" | realm join -v -U "${AD_DOMAIN_JOIN_USER}"@"${CROSS_REALM_TRUST_REALM}" "${CROSS_REALM_TRUST_DOMAIN}"' returned 1 instead of one of [0]

若要解決此類型的錯誤:

  • 確認 Kerberos 領域是否拼寫正確。
  • 確認 KDC 管理密碼是否拼寫正確。
  • 確認 Active Directory 加入使用者和密碼是否拼寫正確。
  • 確認 Active Directory 加入使用者存在於 Active Directory 中,且具有正確的權限。
  • 確認 KDC 和 Active Directory 伺服器位於 Amazon EC2 上。然後,確認 KDC 和 Active Directory 安全群組輸入規則允許來自 Amazon EMR 主節點安全群組的連線。
  • 確認 KDC 和 Active Directory 不在 Amazon EC2 上。然後,確認 KDC 和 Active Directory 允許來自 EMR 叢集虛擬私有雲端 (VPC) 和子網路的連線。

啟動服務時發生問題,例如 YARN ResourceManager、Hadoop NameNode 或 Spark History Server

Amazon EMR 允許在 EMR 叢集啟動時對所有應用程式執行自訂組態。但是,有時這些組態會防止服務啟動。當防止服務啟動時發生問題,就會顯示訊息。

以下是來自 Spark History Server 的範例錯誤訊息:

2022-11-26 03:34:13 +0000 Puppet (err): Systemd start for spark-history-server failed!
journalctl log for spark-history-server:
-- Logs begin at Sat 2022-11-26 03:27:57 UTC, end at Sat 2022-11-26 03:34:13 UTC. --
Nov 26 03:34:10 ip-192-168-1-32 systemd[1]: Starting Spark history-server...
Nov 26 03:34:10 ip-192-168-1-32 spark-history-server[1076]: Starting Spark history-server (spark-history-server):[OK]
Nov 26 03:34:10 ip-192-168-1-32 su[1112]: (to spark) root on none
Nov 26 03:34:13 ip-192-168-1-32 systemd[1]: spark-history-server.service: control process exited, code=exited status=1
Nov 26 03:34:13 ip-192-168-1-32 systemd[1]: Failed to start Spark history-server.
Nov 26 03:34:13 ip-192-168-1-32 systemd[1]: Unit spark-history-server.service entered failed state.
Nov 26 03:34:13 ip-192-168-1-32 systemd[1]: spark-history-server.service failed.
2022-11-26 03:34:13 +0000 /Stage[main]/Spark::History_server/Service[spark-history-server]/ensure (err): change from 'stopped' to 'running' failed: Systemd start for spark-history-server failed!
journalctl log for spark-history-server:

若要解決此類型的錯誤:

  • 確認無法啟動的服務。檢查提供的組態是否拼寫正確。
  • 導覽到以下路徑以查看 S3 日誌來調查失敗原因:s3://example-log-location/example-cluster-ID/node/example-primary-node-ID/applications/example-failed-application/example-failed-service.gz
    **備註:**將 example-log-locationexample-cluster-IDexample-primary-node-IDexample-failed-applicationexample-failed-service 替換為您系統的命名。

下載或安裝應用程式時發生問題

Amazon EMR 可以安裝許多應用程式。但是,有時當應用程式無法下載或安裝時會發生問題。這可能會導致 EMR 叢集失敗。發生此失敗時,佈建日誌不會完成。您必須改為檢閱 stderr.gz 日誌,才能找出由 yum 安裝失敗所造成的類似訊息。

以下是來自 stderr.gz 的範例錯誤訊息:

stderr.gz
Error Summary
-------------
Disk Requirements:
  At least 2176MB more space needed on the / filesystem.
  
2022-11-26 03:18:44,662 ERROR Program: Encountered a problem while provisioning
java.lang.RuntimeException: Amazon-linux-extras topics enabling or yum packages installation failed.

若要解決此類型的錯誤,請在 EMR 叢集啟動期間增加 Amazon Elastic Block Store (Amazon EBS) 根磁碟區。

S3 日誌無法使用

Amazon EMR 無法佈建應用程式,而且 Amazon S3 中沒有產生任何日誌。在這個案例中,很可能是網路錯誤導致 S3 記錄失敗。

若要解決此類型的錯誤:

  • 確認在 EMR 叢集啟動期間已開啟記錄選項。如需詳細資訊,請參閱設定叢集記錄和偵錯
  • 使用自訂 AMI 時,請確認沒有防火牆規則會影響所需的 Amazon EMR 網路設定。如需詳細資訊,請參閱使用 Amazon EMR 管理的安全群組
  • 使用自訂 AMI 時,請檢查是否有任何失敗的主節點。開啟 Amazon EMR 主控台,然後在導覽窗格中選擇硬體以判斷叢集是否無法啟動任何主節點。
  • 使用自訂 AMI 時,請確認您遵循最佳實務。如需詳細資訊,請參閱使用自訂 AMI

相關資訊

EMR 叢集無法佈建

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