我刚开始使用 minio 和 apache 梁。我在 play.min.io 上创建了一个存储桶并添加了一些文件(假设存储的文件是 one.txt 和 two.txt)。我想使用 Apache beam java sdk 访问存储在该存储桶中的文件。当我处理本地文件时,我只是传递文件的路径,例如 C://new//.. 但我不知道如何从 minio 获取文件。谁能帮我写代码。
1 回答
3
我设法让它与标准 AWS 配置之上的一些配置一起工作:
- AwsServiceEndpoint 应指向您的 minio 服务器(此处为 localhost:9000)。
PipelineOptions options = PipelineOptionsFactory.fromArgs(args).create();
...
options.as(AwsOptions.class).setAwsServiceEndpoint("http://localhost:9000");
- 必须启用 PathStyleAccess(以便存储桶访问不会转换为对“ http://bucket.localhost:9000 ”的请求,而是对“ http://localhost:9000/bucket ”的请求)。
这可以通过使用这种 MinioS3ClientBuilderFactory 扩展 DefaultS3ClientBuilderFactory 来完成:
public class MinioS3ClientBuilderFactory extends DefaultS3ClientBuilderFactory {
@Override
public AmazonS3ClientBuilder createBuilder(S3Options s3Options) {
AmazonS3ClientBuilder builder = super.createBuilder(s3Options);
builder.withPathStyleAccessEnabled(true);
return builder;
}
}
并将其注入这样的选项中:
Class<? extends S3ClientBuilderFactory> builderFactory = MinioS3ClientBuilderFactory.class;
options.as(S3Options.class).setS3ClientFactoryClass(builderFactory);
于 2020-06-10T13:55:36.070 回答