如何在aws elastic mapreduce上使用python流创建“副作用”文件?

p1iqtdky  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(276)

我在amazon的elasticmapreduce上运行python流作业,它需要从reducer输出多个文件。我在网上找到的关于如何做到这一点的描述都已经过时了,所以它们引用了不推荐使用的属性 mapred.work.output.dir 但当我试图在现代对等目录中创建文件时, mapreduce.task.output.dir (即 mapreduce_task_output_dir 对于流式处理作业)我得到一个找不到的文件或目录错误:

OSError: [Errno 2] No such file or directory: 's3://mybucket-data/output/encounter/_temporary/1/_temporary/attempt_1416321762038_0001_r_000003_0'

fileoutputformat.getworkoutputpath()的文档似乎表明这仍然可以工作。
我怀疑这个问题与指向s3有关,但我不知道我是否应该使用不同的(即本地)目录(如果是,我需要什么属性?)或者如何让python写入s3或者。。。?

gc0ot86w

gc0ot86w1#

当我在过去收到这个错误时,是因为我没有为我的emr集群正确定义iam角色。
您的emr集群的iam角色操作中是否包含“s3:*”?
例如:

{
  "Statement": [
    {
      "Action": [
        "cloudwatch:*",
        "ec2:Describe*",
        "elasticmapreduce:Describe*",
        "s3:*",
        "sdb:*",
        "sns:*",
        "sqs:*"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}

通过iam角色,aws服务具有对其他aws资源进行操作的权限。在您的示例中,您可能需要为emr集群授予写入s3的权限,否则您将得到一个错误,说明没有找到s3存储桶。
amazon提供了有关设置emr iam角色的基础知识的快速教程:http://docs.aws.amazon.com/elasticmapreduce/latest/developerguide/emr-iam-roles.html

相关问题