我尝试使用Java将一些测试数据从本地笔记本电脑保存到S3,出现以下错误:
org.apache.parquet.hadoop.IOException:无FileSystem方案:s3auilder.buildFileSriter.java:489FileSystem(FileSystem.java:1443)org.apache.hadoop.fs.FileSystem.access200美元(FileSystem.java:67)org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:1464)org.apache.hadoop.fs.FileSystem.get(FileSystem.java:263)org.apache.hadoop.fs.Path.getFileSystem(Path.java:187)org.apache.parquet.hadoop.ParquetFileWriter。(ParquetFileWriter.java:209)在org.apache.parquet.hadoop.ParquetWriter。(ParquetWriter.java:266)在java.io.ParquetWriter$Borg.apache.hadoop.fs.(ParquetWystem.create)
下面是我的代码
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();
}
}
我在谷歌上搜索了一下,但没有找到答案。有什么想法吗?提前谢谢。
更新:
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'
更新:我按照建议将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)
......
然后我尝试将路径字符串中的“s3a://”更改为“s3n://”。现在,我得到了一个不同的错误
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)
......
有什么想法吗?伙计们。
在配置中添加这个对我很有用。
conf.set("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem");
我在构建中的依赖项。gradle从s3读取拼花地板文件
compile 'org.slf4j:slf4j-api:1.7.5'
compile 'org.slf4j:slf4j-log4j12:1.7.5'
compile 'org.apache.parquet:parquet-avro:1.12.0'
compile 'org.apache.avro:avro:1.10.2'
compile 'com.google.guava:guava:11.0.2'
compile 'org.apache.hadoop:hadoop-client:2.4.0'
compile 'org.apache.hadoop:hadoop-aws:3.3.0'
compile 'org.apache.hadoop:hadoop-common:3.3.0'
compile 'com.amazonaws:aws-java-sdk-core:1.11.563'
compile 'com.amazonaws:aws-java-sdk-s3:1.11.563'
如果您有一些带有日期和字节[]的数据,您还需要将其添加到配置中
conf.setBoolean(org.apache.parquet.avro.AvroReadSupport.READ_INT96_AS_FIXED, true);
首先要检查的是依赖关系,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上,得到以下错误: 下面是我的代码 我搜索了一下,但没有得到答案。有什么想法吗?提前道谢。 更新: null
我需要使用Powershell脚本将文件从PC上传到S3 bucket。我得到错误:“无法找到类型[Amazon.AWSClientFactory]”试图附加到AWS S3。我安装了AWS Powershell的东西。我在蓝色的AWS Powershell窗口中。 $Client=[Amazon.AWSClientFactory]::CreateAmazons3Client($AccessKeyI
输出给我抛出了这个错误: 我已经尝试按照OWL API示例中的说明进行保存,所以我不知道我的错误在哪里。 这是我用来保存本体的代码: 和getPatient的代码
问题内容: 使用在Windows 8上使用Python 2.7给我的错误: 问题: 如何解决错误?运行给出了同样的错误… 问题答案: 您可以改用ol’good 。 不是pip,而是它的一个好方面是也能够下载和安装二进制程序包,这使您无需准备VC ++。当然,这取决于二进制文件是为您的Python版本准备的。 更新: 是的,Pip现在可以安装二进制文件! 有一种新的二进制Python存档格式(whe
我正在尝试将一个文件从java类上载到aws S3。 我使用的是这里给出的精确代码 我只更改了以下部分: 我不确定要在提供密钥中添加什么。但即使这样,我也会得到这样一个错误: 错误消息:存储桶在此区域中:null。请使用此区域重试请求(服务:Amazon S3;状态代码:301;错误代码:PermanentReDirect;请求ID: *******) HTTP状态代码:301 AWS错误代码:P
问题内容: 我有一个熊猫DataFrame,我想上传到新的CSV文件。问题是在将文件传输到s3之前,我不想在本地保存文件。是否有像to_csv这样的方法可以将数据帧直接写入s3?我正在使用boto3。 这是我到目前为止的内容: 问题答案: 您可以使用: