本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
VPC错误
以下错误是在 Amazon 中VPC配置时常见的错误EMR。
无效子网配置
在 Cluster Details(集群详细信息)页面的 Status(状态)字段中,您会看到与以下内容相似的错误:
The subnet configuration was invalid: Cannot find route to InternetGateway in main RouteTable
rtb-id
for vpc vpc-id
.
要解决这个问题,你必须创建一个 Internet Gateway 并将其连接到你的VPC。有关更多信息,请参阅向您的添加互联网网关VPC。
或者,请确认您已将您的配置VPC为启用DNS解析和启用DNS主机名支持。有关更多信息,请参阅DNS与您一起使用VPC。
缺少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.
要解决此问题,必须配置包含选项集的VPC,该DHCP选项集的参数设置为以下值:
注意
如果您使用 AWS GovCloud (美国西部)区域,请将 domain-name 设置为,us-gov-west-1.compute.internal
而不是以下示例中使用的值。
-
domain-name =
ec2.internal
如果您所在的区域是美国东部(弗吉尼亚北部),请使用
ec2.internal
。对于其他地区,请使用region-name
.compute.internal
。 例如,在 us-west-2 中,使用域名 =。us-west-2.compute.internal
-
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
状态为。
可通过几种方法解决此问题,包括:
-
如果您在中使用 Amazon S3 存储桶策略VPC,请确保在创建终端节点时通过创建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 之前,VPCs如果指定了主机名,Amazon 会将子网的内部主机名EMR映射到自定义域地址,如下所示:。ip-
例如,如果主机名为,X.X.X.X.customdomain.com
.tldip-10.0.0.10
并且将域名选项设置为 customdomain.com,则亚马逊EMR映射的结果主机名将是。VPC ip-10.0.1.0.customdomain.com
这会在 /etc/hosts
中添加一个条目以将主机名解析为 10.0.0.10。在 AMI 3.7.0 版本中,此行为已更改,现在 Ama EMR zon 完全DHCP支持该VPC配置。以前,客户还可使用引导操作来指定主机名映射。
如果您想保留此行为,则必须提供自定义域名所需的DNS并向前解析设置。
集Terminated with
errors
群 NameNode 但无法启动
在中启动使用自定义DNS域名的EMR集群时,您的集群可能会失败,并在控制台中显示以下错误消息:VPC
Terminated with errors On the master instance(
instance-id
), bootstrap action 1 returned a non-zero return code
失败是由于 NameNode 无法启动造成的。这将导致在 NameNode 日志中发现以下错误,其 Amazon S3 URI 的格式为s3://
:mybucket
/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)
这是因为存在一个潜在的问题,即在同时使用提供的服务器和用户 AWS提供的DNS自定义DNS服务器的中启动EMR集群时VPC,一个EC2实例可能具有多组完全限定的域名。如果用户提供的DNS服务器没有为用于指定EMR集群中节点的任何 A 记录提供任何 pointer (PTR) 记录,则以这种方式配置集群将无法启动。解决方案是为在中的任何子网中启动EC2实例时创建的每个 A 记录添加 1 PTR 条记录。VPC