创建 EMR 集群时“EMR 服务角色无效”

`EMR service role is invalid` when Creating EMR Cluster

创建 Amazon S3 Bucket 后,my_bucket,我通过 cli 创建了一个 Elastic Map Reduce 集群:

aws emr create-cluster --name "Hive testing" --ami-version 3.3 --applications Name=Hive --use-default-roles --instance-type m3.xlarge --instance-count 3 --steps Type=Hive,Name="Hive Program",Args=[-d,INPUT=s3://my_bucket/input,-d.OUTPUT=s3://my_bucket/input,-d-LIBS=s3://my_bucket/serde_libs]

请注意,我没有指定 hive *.q 文件。做好S3和EMR Cluster后,我就登陆EMR盒子,然后运行hive交互

注意- 我假设有一个我可以登录的 EMR 盒子。

但是,当我 运行 aws emr describe-cluster --cluster-id XYZ 时,我在输出中看到了这个错误:

   "State": "TERMINATED_WITH_ERRORS", 
        "StateChangeReason": {
            "Message": "EMR service role arn:aws:iam::xyz:role/EMR_DefaultRole 
                         is invalid", 
            "Code": "VALIDATION_ERROR"
        }

什么会导致这个错误?是否需要为 EMR 集群打开 S3 存储桶的权限才能访问它?

问题不在于存储桶,而是缺少预期的 IAM 角色。

http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-iam-roles-creatingroles.html#emr-iam-roles-createdefaultwithcli

发出 AWS CLI 命令:

aws emr create-default-roles 

然后重新创建集群。这是创建默认角色所需的一次性步骤。

  • 注意: 当心使用最新版本的 aws cli,我在使用 1.4(debian jessie 包)

  • 时遇到了问题
  • 注 2:取自 mrjob 代码和亚马逊公告:

    instance profile and service role are required for accounts created after April 6, 2015, and will eventually be required for all accounts

我发现这个问题在您创建自定义服务角色并分配错误的主要服务时突然出现。

此示例将产生该错误:

{
   "Version": "2012-10-17",
   "Statement": [
     {
       "Action": "sts:AssumeRole",
       "Principal": {
         "Service": "ec2.amazonaws.com"
       },
       "Effect": "Allow",
       "Sid": "Invalid"
     }
   ]
}

这个例子不会:

{
   "Version": "2012-10-17",
   "Statement": [
     {
       "Action": "sts:AssumeRole",
       "Principal": {
         "Service": "elasticmapreduce.amazonaws.com"
       },
       "Effect": "Allow",
       "Sid": "Valid"
     }
   ]
}

有关详细信息,请参阅此处:http://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-mgmt.pdf#emr-plan-access-iam