在不设置Google应用程序凭据的情况下,通过Google Dataflow运行Apache Beam

时间:2019-01-02 23:32:48

标签: google-cloud-dataflow apache-beam

由于我知道如何在Google Dataflow作业中运行Apache Beam,因此我应该首先将环境变量设置为json凭证文件

set GOOGLE_APPLICATION_CREDENTIALS=/path/to/jsonfile.json

我想使它自动化,我想我必须先通过Java Beam应用程序运行bash脚本。在我的Beam Java类中,有没有更好的方法可以做到这一点?

2 个答案:

答案 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的骇客,我不建议您使用它们。