我收到错误 java.io.FileNotFoundException: No such file or directory in S3 存储桶,试图从 AWS EMR 集群访问它

问题描述

我正在开发一个使用 Hadoop Map Reduce 框架的独立 Java 应用程序。我在 AWS EMR 集群上运行此应用程序,并且输入文件存在于 S3 存储桶中。我已经很久没有遇到这个问题了,但突然我收到了以下错误

Error: java.io.FileNotFoundException: No such file or directory <S3_Bucket_Path>

当我检查时,文件存在于特定的 S3 存储桶文件夹中。如果文件已经存在,为什么会出现 FileNotFoundException。

我使用下面的代码列出 S3 存储桶中存在的所有对象,并将这些 S3 对象的完整路径存储到 List<String> inputFilesList

    List<S3ObjectBean> fullInputFilesS3ObjectBeanList = new ArrayList<>();
    ObjectListing objectListing = s3client.listObjects(S3_BUCKET,prefix);
List<S3ObjectSummary> objects = objectListing.getobjectSummaries();
    //To fetch more than 1000 files from AWS S3 bucket
    while(objectListing.isTruncated()) {
        objectListing = s3client.listNextBatchOfObjects(objectListing); 
        objects.addAll(objectListing.getobjectSummaries());
    }

在获得 inputFiles 列表后,我将 thos 提供给 Hadoop MapReduce 应用程序中的映射器。代码如下。

private void setMapper(Job job,Class<? extends Mapper<Object,Text,Text>> mapperClass,List<String> inputFilesList) {
    for (String inputFile : inputFilesList) { 
        MultipleInputs.addInputPath(job,new Path(inputFile),TextInputFormat.class,mapperClass);
    } 
}

变量列表 inputFilesList 包含数据文件完整路径 S3 对象,如“s3://bucket_name/folder/fileName1.txt”、“s3://bucket_name/folder/fileName2.txt”

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)