python - 如何在AWS Elastic MapReduce上使用Python流创建 “side-effect”文件?

标签 python hadoop amazon-web-services amazon-s3 emr

我正在Amazon的Elastic MapReduce上运行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还是...?

最佳答案

过去收到此错误时,是因为我没有为我的EMR群集正确定义IAM角色。

您的IAM角色针对EMR群集的操作中是否包含“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

关于python - 如何在AWS Elastic MapReduce上使用Python流创建 “side-effect”文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27000230/

相关文章:

python - 使用 python 操作网页

python - 让 RandomForestClassifier 在训练期间确定选择一个变量

python - 从同一个模块导入同一个对象,在两个不同的模块 :

hadoop - 从AVSC创建Hive表,其中包含对先前定义的架构的引用作为一种类型

hadoop - 无法在 spark 中使用配置单元支持创建 sql 上下文

hadoop - mapreduce 的多表输入

python - 以奇怪的角度发射的子弹pygame

amazon-web-services - AWS Cloudformation IAM - 无法创建 iam 用户

amazon-web-services - 与 Amazon ElastiCache Redis 集群的 redis-cli 连接挂起

python-3.x - 使用 Dynamorm 在 Python 中构建 AWS SAM 嵌套应用程序