如何在EMR中从S3读取文件?

6
我想在我的EMR Hadoop作业中从S3读取文件。我正在使用自定义JAR选项。
我尝试过两种解决方案:
1. org.apache.hadoop.fs.S3FileSystem:抛出NullPointerException。 2. com.amazonaws.services.s3.AmazonS3Client:抛出异常,显示“拒绝访问”。
我无法理解的是,我是从控制台启动作业,所以显然我应该具备必要的权限。然而,对于Mapper可用的环境变量(System.getenv()),AWS_*_KEY键值缺失。
我确定我做错了什么,只是不确定是什么。
3个回答

4
也许有点晚了,但是... 在AmazonS3Client中使用InstanceProfileCredentialsProvider

1
为什么这个被踩了我不理解,它非常有帮助。 - Harel Gliksman
这是救命之恩。 - belka

2

这是正确的做法。如果没有角色,唯一的解决办法是将访问密钥直接编写到代码中(或者在 jar 文件中的文件中等)。使用角色可以避免暴露凭据。 - David Nemeskey

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

我正在EMR上运行JAR。据我所知,那里没有hadoop命令。 - David Nemeskey
EMR很糟糕...找一个DevOps为您构建一个合适的EC2集群 :) @DavidNemeskey - samthebest
2
EMR实例中存在hadoop命令(至少在版本5.3.0中)。 - ssedano

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接