Java 如何在EMR中从s3读取文件?
我想在我的EMR Hadoop工作中从S3读取一个文件。我正在使用自定义JAR选项 我尝试了两种解决方案:Java 如何在EMR中从s3读取文件?,java,hadoop,amazon-s3,elastic-map-reduce,Java,Hadoop,Amazon S3,Elastic Map Reduce,我想在我的EMR Hadoop工作中从S3读取一个文件。我正在使用自定义JAR选项 我尝试了两种解决方案: org.apache.hadoop.fs.s3文件系统:抛出一个NullPointerException com.amazonaws.services.s3.AmazonS3Client:抛出异常,表示“访问被拒绝” 我没有理解的是,我是从控制台开始工作的,因此显然我应该拥有必要的权限。但是,映射程序可用的环境变量(System.getenv())中缺少AWS_*\u键 我肯定我做错了
:抛出一个org.apache.hadoop.fs.s3文件系统
NullPointerException
:抛出异常,表示“访问被拒绝”com.amazonaws.services.s3.AmazonS3Client
System.getenv()
)中缺少AWS_*\u键
我肯定我做错了什么,只是不确定是什么。我认为语法是错误的
hadoop jar your.jar com.your.main.Class -Dfs.s3n.awsAccessKeyId=<access-id> -Dfs.s3n.awsSecretAccessKey=<secrect-key>
我认为您的EMR集群需要访问S3,您可以为您的EMR集群创建IAM角色,并授予它访问S3的权限。
查看此链接:可能有点晚了,但是。。。
对AmazonS3Client使用
InstanceProfileCredentialsProvider
。我正在EMR上运行JAR。据我所知,我没有hadoop的命令。EMR很烂。。。获取一个devops来为您构建一个合适的EC2集群:)@DavidNemeskeyhadoop
命令出现在EMR实例中(至少在版本5.3.0中),这是正确的方法。没有角色,唯一的解决方案是将访问密钥直接写入代码(或jar中的文件等)。使用角色没有暴露凭据的危险。我无法理解为什么这会获得否决票,这非常有用。这是救命之举
s3n://bucket-name/common/prefix/path