選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

Amazon EMR 叢集操作期間的 VPC 錯誤

焦點模式
Amazon EMR 叢集操作期間的 VPC 錯誤 - Amazon EMR

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

以下是 Amazon EMR 中 VPC 組態常見的錯誤。

子網路組態無效

Cluster Details (叢集詳細資訊) 頁面上的 Status (狀態) 欄位中,您會看到類似下面這樣的錯誤:

The subnet configuration was invalid: Cannot find route to InternetGateway in main RouteTable rtb-id for vpc vpc-id.

若要解決這個問題,您必須建立網際網路閘道,並將它連接到您的 VPC。如需詳細資訊,請參閱將網際網路閘道新增至您的 VPC

或者,確認您已將 VPC 中的 Enable DNS resolution (啟用 DNS 解析)Enable DNS hostname support (啟用 DNS 主機名稱支援) 設定為啟用狀態。如需詳細資訊,請參閱以 VPC 使用 DNS

缺少 DHCP 選項集

您在叢集系統日誌 (syslog) 中看見發生類似以下錯誤的步驟失敗:

ERROR org.apache.hadoop.security.UserGroupInformation (main): PriviledgedActionException as:hadoop (auth:SIMPLE) cause:java.io.IOException: org.apache.hadoop.yarn.exceptions.ApplicationNotFoundException: Application with id 'application_id' doesn't exist in RM.

ERROR org.apache.hadoop.streaming.StreamJob (main): Error Launching job : org.apache.hadoop.yarn.exceptions.ApplicationNotFoundException: Application with id 'application_id' doesn't exist in RM.

若要解決這個問題,您必須設定包含 DHCP 選項集的 VPC,且其參數設定為以下值:

注意

如果您使用 AWS GovCloud (US-West) 區域,請將 domain-name 設定為 ,us-gov-west-1.compute.internal而不是下列範例中使用的值。

  • domain-name (domain-name) = ec2.internal

    如果您的區域是美國東部 (維吉尼亞北部),請使用 ec2.internal。若是其他區域,則使用 region-name.compute.internal。以 us-west-2 為例,使用 domain-name (domain-name)=us-west-2.compute.internal

  • domain-name-servers (domain-name-servers) = AmazonProvidedDNS

如需詳細資訊,請參閱 DHCP 選項集

許可錯誤

stderr 日誌中的步驟失敗,表示 Amazon S3 資源沒有適當的許可。這是 403 錯誤,且錯誤會像這樣:

Exception in thread "main" com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: REQUEST_ID

如果 ActionOnFailure 設為 TERMINATE_JOB_FLOW,那麼這可能會導致叢集終止,且狀態為 SHUTDOWN_COMPLETED_WITH_ERRORS

解決這個問題的幾種方法包括:

  • 如果您在 VPC 中使用的是 Amazon S3 儲存貯體政策,務必藉由建立 VPC 端點,並於建立端點時選取「政策」選項底下的全部允許,提供所有儲存貯體的存取權限。

  • 確認與 S3 資源相關聯的任何政策都包含您啟動叢集所在的 VPC。

  • 嘗試從叢集執行下列命令,確認您可以存取儲存貯體

    hadoop fs -copyToLocal s3://path-to-bucket /tmp/
  • 您可以在叢集的 log4j.logger.org.apache.http.wire 檔案中將 DEBUG 參數設定為 /home/hadoop/conf/log4j.properties,藉此取得更多特定的偵錯資訊。您嘗試從叢集存取儲存貯體之後,可以查看 stderr 日誌檔。日誌檔將提供更多詳細資訊:

    Access denied for getting the prefix for bucket - us-west-2.elasticmapreduce with path samples/wordcount/input/ 15/03/25 23:46:20 DEBUG http.wire: >> "GET /?prefix=samples%2Fwordcount%2Finput%2F&delimiter=%2F&max-keys=1 HTTP/1.1[\r][\n]" 15/03/25 23:46:20 DEBUG http.wire: >> "Host: us-west-2.elasticmapreduce.s3.amazonaws.com[\r][\n]"

導致 START_FAILED 的錯誤

在 AMI 3.7.0 以前,對於指定主機名稱的 VPC,Amazon EMR 會將子網路的內部主機名稱與自訂網域地址映射,如下所示:ip-X.X.X.X.customdomain.com.tld。例如,如果主機名稱是 ip-10.0.0.10 且 VPC 的域名稱選項設定為 customdomain.com,則得到的 Amazon EMR 所映射的主機名稱會是 ip-10.0.1.0.customdomain.com。在 /etc/hosts 中已新增項目,將主機名稱解析為 10.0.0.10。此行為對於 AMI 3.7.0 已變更,Amazon EMR 現在完全允許 VPC 的 DHCP 組態。以往客戶也可以使用引導操作來指定主機名稱映射。

如果您想要保留這種行為,則必須提供自訂網域所需的 DNS 和轉發解析設定。

叢集 Terminated with errors 和 NameNode 無法啟動

在使用自訂 DNS 網域名稱的 VPC 中啟動 EMR 叢集時,您的叢集可能會失敗,並且在主控台中出現以下錯誤訊息:

Terminated with errors On the master instance(instance-id), bootstrap action 1 returned a non-zero return code

失敗是由於 NameNode 無法啟動所導致的結果。這樣將會在 NameNode 日誌中產生下列錯誤訊息,其 Amazon S3 URI 的格式如下:s3://amzn-s3-demo-bucket/logs/cluster-id/daemons/master instance-id/hadoop-hadoop-namenode-master node hostname.log.gz

2015-07-23 20:17:06,266 WARN org.apache.hadoop.hdfs.server.namenode.FSNamesystem (main): Encountered exception loading fsimage java.io.IOException: NameNode is not formatted. at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead(FSImage.java:212) at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFSImage(FSNamesystem.java:1020) at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFromDisk(FSNamesystem.java:739) at org.apache.hadoop.hdfs.server.namenode.NameNode.loadNamesystem(NameNode.java:537) at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:596) at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:765) at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:749) at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1441) at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1507)

這是因為有一個潛在問題,那就是在 VPC 中啟動 EMR 叢集時,EC2 執行個體可能有多組完整域名稱,它會同時使用 AWS提供的 DNS 伺服器及使用者提供的自訂 DNS 伺服器。如果使用者提供的 DNS 伺服器未對 EMR 叢集中用來指定節點的任何 A 記錄提供任何指標 (PTR) 記錄,那麼叢集以此方式設定時,將會無法啟動。解決方法是針對 EC2 執行個體在 VPC 的任何一個子網路中啟動時所建立的每一個 A 記錄新增 1 個 PTR 記錄。

隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。