提问者:小点点

使用Google Dataflow运行Apache Beam而无需设置Google应用程序凭据


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

set GOOGLE_APPLICATION_CREDENTIALS=/path/to/jsonfile.json

我想自动化这一点,我想我必须首先运行一个bash脚本由我的java光束应用程序。在我的光束Java类中有没有更好的方法来做到这一点?


共2个答案

匿名用户

是的,有一种方法可以从Java应用程序加载Json凭据文件。

请参考下面的代码片段创建Pipeline对象,并以编程方式加载Google凭据引用。

    //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环境变量。

它在我的环境中起作用,如果您遇到任何问题,请告诉我。

匿名用户

据我所知,你不能轻易修改执行程序的环境变量。也就是说,你不能从启动管道的主程序中做到这一点。在脚本中设置它是这里最好的选择。

替代品是类似于https://blog.sebastian-daschner.com/entries/changing_env_java黑客,我不建议使用这些。