Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在EMR中从s3读取文件?_Java_Hadoop_Amazon S3_Elastic Map Reduce - Fatal编程技术网

Java 如何在EMR中从s3读取文件?

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键 我肯定我做错了

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

我尝试了两种解决方案:

  • 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集群:)@DavidNemeskey
hadoop
命令出现在EMR实例中(至少在版本5.3.0中),这是正确的方法。没有角色,唯一的解决方案是将访问密钥直接写入代码(或jar中的文件等)。使用角色没有暴露凭据的危险。我无法理解为什么这会获得否决票,这非常有用。这是救命之举
s3n://bucket-name/common/prefix/path