我的数据流作业似乎总是创建一个新的默认 Google Cloud Storage 存储桶,即使定义了暂存位置、临时位置和 gcpTempLocation。在查看了Apache Beam(2.6.0)库代码后,GcpOptions中的这些行.java似乎是罪魁祸首:
String tempLocation = options.getTempLocation();
if (isNullOrEmpty(tempLocation)) {
tempLocation =
tryCreateDefaultBucket(
options,
newCloudResourceManagerClient(options.as(CloudResourceManagerOptions.class))
.build());
options.setTempLocation(tempLocation);
}
但是,只有在PipelineOptions中未定义tempLocation的情况下才应该执行此代码,并且我已经使用命令行参数和setTempLocation方法设置了tempLocation。我通过扩展GcpOptions并添加一些额外的选项getter和setter来定义Options接口。
如果我没有在Options界面中定义temlocegetter和setter,那么看起来就好像temloce将自动默认为新创建的默认存储桶的temp文件夹(gs://dataflow-staging-us-Cental1-job_number/temp),但我已经定义了temloce命令行参数。
以下是数据流作业的主要方法:
public static void main(String[] args) {
Options options = PipelineOptionsFactory.fromArgs(args).as(Options.class);
GoogleCredentials credentials = null;
try {
credentials = GoogleCredentials.fromStream(new FileInputStream("./src/main/resources/credentials.json"))
.createScoped(Lists.newArrayList("https://www.googleapis.com/auth/cloud-platform"));
} catch (IOException e) {
e.printStackTrace();
}
options.setGcpCredential(credentials);
options.setTempLocation("gs://example_bucket/temp");
options.setGcpTempLocation("gs://example_bucket/temp");
run(options);
}
谁能解释为什么总是创建默认存储桶以及如何避免这种情况?
编辑:
看起来好像我使用相同的参数直接从命令行部署数据流作业,而不是生成数据流模板,然后通过控制台界面部署作业。tempLocation似乎设置正确,并且没有创建额外的bucket。这似乎解决了我遇到的问题,但我不完全确定为什么这个解决方案有效。
正在创建的存储桶用于暂存位置,它应该默认为临时位置,但它已损坏(从 SDK v2.43.0 开始)。您可以指定暂存位置以避免创建额外的存储桶。
https://stackoverflow.com/a/75403319/1031796
我想特定管线选项的这种行为在GCP文件中有很好的解释:
gcpTempLocal-Dataflow的云存储路径,用于暂存任何临时文件。在运行管道之前,您必须提前创建此存储桶。如果您没有指定gcpTempLocal
,您可以指定管道选项temLocal
,然后gcpTempLocal
将被设置为temLocal
的值。如果两者都没有指定,将创建默认的gcpTempLocal
。
到目前为止,这似乎是GCP数据流管理服务的硬编码案例。
我正在使用带有Spring Boot(2.3.3版)的H2数据库和H2数据库的所有默认设置。 这是我申请的所有文件。 pom.xml
我试图设置一个谷歌云存储桶,以便我上传的任何文件都自动gzip,并设置“content-encoding:gzip”。 我尝试了“gsutil defacl set public-read gs://Bucket”,其基础是将Google Cloud Storage Bucket中的所有文件默认设置为public,但没有成功。 有什么想法吗?
在我的quarkus应用程序中有两个命名的数据源,我们称之为A和B: Quarkus.datasource.a.db-kind=Oracle Quarkus.datasource.b.db-kind=Oracle 因此,每次应用程序启动时,我都会收到这样的通知: 警告:无法确定默认数据源的数据库类型
如果我能知道根本原因是什么就好了。
问题内容: PostgreSQL将所有数据库保留在Linux上的默认目录是什么? 问题答案: “ PostgreSQL将保留所有数据库的目录 ”(和配置)称为“数据目录”,它对应于PostgreSQL所谓的“ 数据库集群 ” (有点混乱),该数据库集群与分布式计算无关,它只是表示一个组PostgreSQL服务器管理的数据库和相关对象的数量。 数据目录的位置取决于分布。如果从源代码安装,则默认值为:
我在谷歌云存储中有1个存储桶。Firebase创建一个新的bucket,这是Firebase控制台中的默认值。我想更改默认bucket并删除firebase创建的bucket。我如何在谷歌云存储中找到我的存储桶的配置设置。 这是默认的bucket:
我有两个存储桶,一个来自谷歌云存储,一个由firebase创建,firebase创建的存储桶是默认的,我想更改默认的存储桶并删除firebase创建的存储桶。
我试图使用Java客户机将数据从S3传输到GCS,但我遇到了这个错误。 由于权限不足,无法获取Google云存储(GCS)存储桶的位置。请验证是否已授予必要的权限。 我正在使用具有项目所有者角色的服务号,它应该授予对所有项目资源的无限制访问权限。