【问题标题】:How to read a file from s3 in EMR?如何在 EMR 中从 s3 读取文件?
【发布时间】:2014-08-02 19:10:12
【问题描述】:

我想在我的 EMR Hadoop 作业中从 S3 读取文件。我正在使用自定义 JAR 选项。

我尝试了两种解决方案:

  • org.apache.hadoop.fs.S3FileSystem:抛出NullPointerException
  • com.amazonaws.services.s3.AmazonS3Client:抛出异常,说“访问被拒绝”。

我没有掌握的是我是从控制台开始工作的,所以显然我应该拥有必要的权限。但是,映射器可用的环境变量 (System.getenv()) 中缺少 AWS_*_KEY 键。

我确定我做错了什么,只是不确定是什么。

【问题讨论】:

    标签: java hadoop amazon-s3 elastic-map-reduce


    【解决方案1】:

    可能有点晚了,但是... 对 AmazonS3Client 使用 InstanceProfileCredentialsProvider

    【讨论】:

    • 为什么这会遭到反对,这超出了我的理解,非常有帮助。
    • 这是救命
    【解决方案2】:

    我认为您的 EMR 集群需要能够访问 S3,您可以为您的 EMR 集群创建一个 IAM 角色并为其授予对 S3 的访问权限。 检查此链接:http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-iam-roles.html

    【讨论】:

    • 这是正确的方法。如果没有角色,唯一的解决方案是将访问密钥直接写入代码(或 jar 中的文件等)。使用角色没有暴露凭据的危险。
    【解决方案3】:

    我认为语法是

    hadoop jar your.jar com.your.main.Class -Dfs.s3n.awsAccessKeyId=<access-id> -Dfs.s3n.awsSecretAccessKey=<secrect-key>
    

    那么你希望读取的公共前缀的路径应该是格式

    s3n://bucket-name/common/prefix/path
    

    【讨论】:

    • 我在 EMR 上运行 JAR。据我所知,我那里没有hadoop 命令。
    • EMR 糟透了......让开发人员为您构建一个合适的 EC2 集群 :) @DavidNemeskey
    • hadoop 命令存在于 EMR 实例中(至少在版本 5.3.0 中)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多