java - 我收到错误 java.io.FileNotFoundException: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 列表后,我将这些内容提供给 Hadoop MapReduce 应用程序中的映射器。代码如下。
private void setMapper(Job job, Class<? extends Mapper<Object, Text, Text, Text>> mapperClass, List<String> inputFilesList) {
for (String inputFile : inputFilesList) {
MultipleInputs.addInputPath(job, new Path(inputFile), TextInputFormat.class, mapperClass);
}
}
变量 List inputFilesList 包含数据文件完整路径 S3 对象,例如“s3://bucket_name/folder/fileName1.txt”、“s3://bucket_name/folder/fileName2.txt”
解决方案
推荐阅读
- heroku - 从通用 Heroku 域重定向到自定义域
- javascript - jQuery 使用状态吗?
- java - 标记值为 00E11 的 XML 到 JSON 转换给出 0
- reactjs - 在 mac 上为 react-native 环境安装 android studio 的问题
- javascript - 显示损坏的图标而不是带有替代文字的图像 - React
- excel - ExcelScript(在线):获取当前文件名
- swift - 获取段落的范围 NSAttributedString
- c# - Async Delegate EndInvoke 比预期提前终止循环
- c++ - 移动捕获调用 std::promise 的复制构造函数,而 std::unordered_map::emplace()
- javascript - 从单元格中获取字符串并进行比较以执行操作的函数