创建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集群访问它?
答案 0 :(得分:18)
问题不在于存储桶,而是缺少预期的IAM角色。
发出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