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

时间:2015-01-14 22:25:00

标签: amazon-web-services amazon-s3 hive

创建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 /输入,-d-LIBS = S3:// MY_BUCKET / serde_libs]

请注意,我没有指定hive *。q 文件。制作S3和EMR群集后,我将登录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"
        }

什么会导致此错误?我是否需要在S3存储桶上打开权限才能让EMR集群访问它?

2 个答案:

答案 0 :(得分:18)

问题不在于存储桶,而是缺少预期的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代码和amazon annoucments:

      创建的帐户需要

    实例配置文件和服务角色   在2015年4月6日之后,最终将需要所有帐户

答案 1 :(得分:0)

我在创建自定义服务角色并分配错误的主体服务时突然发现此问题。

此示例将生成该错误:

{
   "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