java数据流作业总是创建新的默认存储桶,即使设置了tempLocation和gcpTempLocation?
我的数据流工作似乎总是创建一个新的默认Google云存储桶,即使定义了stagingLocation、tempLocation和gcpTempLocation。在浏览了ApacheBeam(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并添加一些额外的选项获取器和设置器来定义选项接口
如果我没有在选项界面中定义tempLocation getter和setter,它看起来好像tempLocation将自动默认为新创建的默认bucket的临时文件夹(gs://dataflow-staging-us-central1-job_number/temp),但我已经定义了tempLocation命令行参数
以下是数据流作业的主要方法:
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);
}
有人能解释为什么总是创建默认bucket,以及我如何避免这种情况吗
编辑:
看起来,如果我使用相同的参数直接从命令行部署数据流作业,而不是生成数据流模板,然后通过控制台界面部署作业,那么模板位置似乎设置正确,并且没有创建额外的bucket。这似乎解决了我面临的问题,但我不完全确定为什么这个解决方案有效
共 (0) 个答案