当前位置: 首页 > 知识库问答 >
问题:

无法保存到S3,错误为“java.io.ioException:scheme:s3a没有文件系统”

吴谦
2023-03-14

我试图将一些测试数据从我的本地笔记本电脑上用Java保存到S3上,得到以下错误:

下面是我的代码

private void testSaveToS3(SysS3Configuration s3Configuration) {
            try {
                Schema avroSchema = TestDTO.getClassSchema();
    
                Path path = new Path("s3a://" + s3Configuration.getBucketName()+"/test.parquet");
    
    
                Configuration config = new Configuration();
                config.set("fs.s3a.access.key", s3Configuration.getAccessKeyId());
                config.set("fs.s3a.secret.key", s3Configuration.getSecretKey());
    
                ParquetWriter writer = AvroParquetWriter.<GenericData.Record>builder(path)
                        .withSchema(avroSchema)
                        .withConf(config)
                        .withCompressionCodec(CompressionCodecName.SNAPPY)
                        .withWriteMode(ParquetFileWriter.Mode.OVERWRITE)
                        .build();
    
                List<TestDTO> list = new ArrayList<>();
                TestDTO l1 = new TestDTO();
                l1.setId(1);
                l1.setValue(11);
    
                TestDTO l2 = new TestDTO();
                l2.setId(2);
                l2.setValue(22);
    
                list.add(l1);
                list.add(l2);
    
                for (TestDTO d : list) {
                    final GenericRecord record = new GenericData.Record(avroSchema);
                    record.put("id", d.getId());
                    record.put("value", d.getValue());
                    writer.write(record);
                }
            
                writer.close();
    
            } catch (Exception e) {
            
                e.printStackTrace();
            }
        }

我搜索了一下,但没有得到答案。有什么想法吗?提前道谢。

更新:

    null
compile 'com.amazonaws:aws-java-sdk:1.11.747'
compile 'org.apache.parquet:parquet-avro:1.8.1'
compile 'org.apache.hadoop:hadoop-aws:3.3.0'
java.io.IOException: No FileSystem for scheme: s3a
    at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2421)
    at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2428)
......
java.io.IOException: The s3n:// client to Amazon S3 is no longer available: please migrate to the s3a:// client
    at org.apache.hadoop.fs.s3native.NativeS3FileSystem.initialize(NativeS3FileSystem.java:82)
    at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2433)

共有1个答案

柯梓
2023-03-14

首先要检查的是依赖关系,s3文件系统实现与Hadoop的其他部分在一个单独的工件中。例如在gradle语法中:

api("org.apache.hadoop:hadoop-aws:$hadoopVersion")

更新:由于您添加了依赖项,hadoop 1.2.1版本确实很旧,截至2020年8月的当前版本是3.3.0。在旧版本中,您可能可以使用带有s3:/s3n:/前缀的s3,但您确实应该更新,因为较新的s3a实现包含大量改进。

 类似资料:
  • 我尝试使用Java将一些测试数据从本地笔记本电脑保存到S3,出现以下错误: org.apache.parquet.hadoop.IOException:无FileSystem方案:s3auilder.buildFileSriter.java:489FileSystem(FileSystem.java:1443)org.apache.hadoop.fs.FileSystem.access200美元(

  • 我们在Azure中运行HDInsight集群,但它不允许在集群创建时向上旋转边缘/网关节点。所以我创建这个边缘/网关节点的方法是安装 然后我复制了 但是当我运行时,我得到以下错误 这里是完整的堆栈https://gist.github.com/anonymous/ebb6c9d71865c9c8e125aadbbdd6a5bc 我不确定这里缺少了哪个包/罐子。

  • 问题内容: 我目前利用以下内容将文件上传到S3: 上面的方法工作正常,但我想直接将a保存到S3以从应用程序中删除几秒钟,但是我不知道如何执行此操作?这是我当前将图像保存到文件中的方式: 有没有一种方法可以直接以流的形式直接写入Amazon S3,如果可以,有人可以显示示例吗? 另外,这是个好主意吗?如果它容易出错,我将继续使用当前方法。任何建议表示赞赏。 问题答案: 以下(或类似的东西)应该可以正

  • 我尝试用以下代码保存从internet下载的文件 但在运行时,我得到的错误如下 03-04 20:42:51.080 8972-8972/com.example.me.demo2 E/BitmapFactory:无法解码流:java.io.FileNotFoundExcoop: /storage/emulated/0/.tanks/4a100abb-0e55-4062-8c37-f11f4189e

  • 如果有人帮我解决这个问题,我会非常感激。 我正在为我的项目使用codeigniter框架。并想将我的图像上传到amazon s3桶中。当我尝试使用S3.php文件时 string(92)“不支持您提供的授权机制。请使用AWS4-HMAC-SHA256。” 有人能帮我解决这个问题吗。

  • 我使用数据砖在R中开发了一个模型。我想将输出数据文件保存在 AWS S3 存储桶上,但当我保存文件如下时,它不会保存到挂载的驱动器。 使用R将数据挂载到S3的最佳方法是什么? 我已经尝试了下面的示例代码,它可以工作,所以我知道我在AWS和Database ricks之间的连接可以工作。