由于我知道如何在Google Dataflow作业中运行Apache Beam,因此我应该首先将环境变量设置为json凭证文件
set GOOGLE_APPLICATION_CREDENTIALS=/path/to/jsonfile.json
我想使它自动化,我想我必须先通过Java Beam应用程序运行bash脚本。在我的Beam Java类中,有没有更好的方法可以做到这一点?
答案 0 :(得分:2)
是的,有一种方法可以从Java应用程序加载Json凭证文件。
请参考下面的代码片段,以通过编程方式加载Google凭据参考来创建Pipeline对象。
//create scope list with DataFlow's scopes
Set<String> scopeList = new HashSet<String>();
scopeList.addAll(DataflowScopes.all());
//create GoogleCredentials object with Json credential file & the scope collection prepared above
GoogleCredentials credential = GoogleCredentials
.fromStream(new FileInputStream("path-to-credential-json-file"))
.createScoped(scopeList);
//create default pipeline
PipelineOptions options = PipelineOptionsFactory.create();
//assign the credential
options.as(GcpOptions.class).setGcpCredential( credential);
Pipeline pipeLine = Pipeline.create(options);
这种方法可以帮助您不依赖GOOGLE_APPLICATION_CREDENTIALS环境变量。
它已在我的环境中正常工作,如果遇到任何问题,请告诉我。
答案 1 :(得分:-1)
据我所知,您不能轻易修改执行程序的环境变量。也就是说,您无法从启动管道的主程序中执行此操作。在脚本中进行设置是最好的选择。
替代品是类似于https://blog.sebastian-daschner.com/entries/changing_env_java的骇客,我不建议您使用它们。