如何从EMR中的s3读取文件?

时间:2014-06-12 12:43:59

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

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

我尝试了两种解决方案:

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

我无法理解的是我从控制台开始工作,所以显然我应该拥有必要的权限。但是,映射器可用的环境变量(System.getenv())中缺少AWS _ * _ KEY键。

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

我认为语法是

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

然后,您希望阅读的公共前缀的路径应为

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