我想在我的EMR Hadoop作业中读取S3中的文件。我正在使用Custom JAR选项。
我尝试了两种解决方案:
org.apache.hadoop.fs.S3FileSystem
:抛出NullPointerException
。com.amazonaws.services.s3.AmazonS3Client
:抛出异常,说“拒绝访问”。我无法理解的是我从控制台开始工作,所以显然我应该拥有必要的权限。但是,映射器可用的环境变量(System.getenv()
)中缺少AWS _ * _ KEY键。
我确信我做错了什么,只是不确定是什么。
答案 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