GCP数据流模板的Gradle支持?

时间:2017-04-28 02:07:56

标签: maven gradle google-cloud-dataflow archetypes

根据Google's Dataflow documentation,Dataflow作业模板的创建是#34;目前仅限于Java和Maven。"但是,至少可以说,GCP数据流网站上的Java文档很麻烦。数据流的1.x和2.x版本在细节方面相当远,我有一些特定的代码要求将我锁定到2.0.0r3代码库,所以我非常需要使用Apache Beam。可以理解的是,Apache非常专注于Maven,但从制度上来说,我的公司大部分时间都把它放在了Gradle之后,以至于去年他们将所有的Java项目迁移到了它,并且已经推迟了 - 介绍它。

然而,现在我们似乎陷入了僵局,因为我们已经有了一个特定的目标,试图将我们的大量后端收集集中在GCP的数据流中,并且GCP Dataflow没有&#39 ;似乎对Gradle有正式的支持。如果是,则不在官方文档中。

是否有足够的技术基础来实际使用Gradle构建Dataflow模板,问题是Google的文档尚未更新以支持此功能?是否有技术上的原因让Gradle无法完成Maven的工作?与Google和Apache的网站上的文档相比,使用GCP Dataflow有更好的指南吗?我之前没有和Maven原型合作过,而且我为#gra; gradle archetypes"做了所有的搜索。最多只能在一年多前找到结果。大多数信息指向2014年和1.7rc3版本的论坛讨论,但我们在3.5上。这感觉它应该是一个已经解决的问题,但对于我的生活,我无法在网上找到任何关于此的信息。

3 个答案:

答案 0 :(得分:4)

绝对没有什么能阻止您使用Java编写Dataflow应用程序/管道,并使用Gradle构建它。

Gradle只会生成一个应用程序分发(例如./gradlew clean distTar),然后您可以使用--runner=TemplatingDataflowPipelineRunner --dataflowJobFile=gs://...参数提取并运行它。

它只是一个可运行的Java应用程序。

然后,模板和所有二进制文件将上传到GCS,您可以通过控制台,CLI甚至云功能执行管道。

您甚至不需要使用Gradle。您可以在本地运行它,并上传模板/二进制文件。但是,我想你正在使用像Jenkins这样的构建服务器。

也许数据流文档应该读取注意:模板创建目前仅限于Java”,因为此功能尚未在Python SDK中提供。

答案 1 :(得分:4)

使用Gradle运行Cloud Dataflow作业的命令行

通用执行

$ gradle clean execute -DmainClass=com.foo.bar.myfolder.MyPipeline -Dexec.args="--runner=DataflowRunner --gcpTempLocation=gs://my-bucket/tmpdataflow" -Pdataflow-runner

具体示例

$ gradle clean execute -DmainClass=com.foo.bar.myfolder.MySpannerPipeline -Dexec.args="--runner=DataflowRunner --gcpTempLocation=gs://my-bucket/tmpdataflow --spannerInstanceId=fooInstance --spannerDatabaseId=barDatabase" -Pdataflow-runner

命令行说明

  1. 渐变清洁执行使用 execute 任务,该任务使我们能够轻松地将命令行标志传递给数据流管道。 clean 任务将删除缓存的版本。

  2. -DmainClass = 指定Java Main类,因为我们在单个文件夹中有多个管道。没有这个,Gradle不知道Main类是什么以及在哪里传递args。注意:您的 gradle.build 文件必须在下面包含 task execute

  3. -Dexec.args = 指定执行参数,这些参数将传递给管道。注意:您的 gradle.build 文件必须在下面包含 task execute

  4. -runner = DataflowRunner -Pdataflow-runner 确保使用的是Google Cloud Dataflow运行器,而不是本地的 DirectRunner

  5. -spannerInstanceId = -spannerDatabaseId = 只是特定于管道的标志。您的管道不会这样。

build.gradle内容(注意:您需要填充特定的依赖项)

apply plugin: 'java'
apply plugin: 'maven'
apply plugin: 'application'

group = 'com.foo.bar'
version = '0.3'

mainClassName = System.getProperty("mainClass")

sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {

     maven { url "https://repository.apache.org/content/repositories/snapshots/" }
     maven { url "http://repo.maven.apache.org/maven2" }
}

dependencies {
    compile group: 'org.apache.beam', name: 'beam-sdks-java-core', version:'2.5.0'
    // Insert your build deps for your Beam Dataflow project here
    runtime group: 'org.apache.beam', name: 'beam-runners-direct-java', version:'2.5.0'
    runtime group: 'org.apache.beam', name: 'beam-runners-google-cloud-dataflow-java', version:'2.5.0'
}

task execute (type:JavaExec) {
    main = System.getProperty("mainClass")
    classpath = sourceSets.main.runtimeClasspath
    systemProperties System.getProperties()
    args System.getProperty("exec.args").split()
}

build.gradle的说明

  1. 我们使用task execute (type:JavaExec)来轻松地将运行时标志传递到Java Dataflow管道程序中。例如,我们可以指定主类是什么(因为在同一文件夹中有多个管道),并且可以传递特定的Dataflow参数(即特定的PipelineOptions)。 more here

  2. build.gradle 的一行显示为runtime group: 'org.apache.beam', name: 'beam-runners-google-cloud-dataflow-java', version:'2.5.0'非常重要。它提供了Cloud Dataflow运行器,可让您在Google Cloud Platform中执行管道。

答案 2 :(得分:0)

更新:2020年12月7日

我们也可以使用gradle 暂存数据流模板。

对于舞台:

以下是必填参数:

  • project
  • region
  • gcpTempLocation(如果您没有存储桶创建访问权限,那么就很好了,如果没有访问权限,它将自动创建)
  • stagingLocation
  • templateLocation

这是gradle中的示例命令行:

gradle clean execute -D mainClass=com.something.mainclassname -D exec.args="--runner=DataflowRunner --project=<project_id> --region=<region_name> --gcpTempLocation=gs://bucket/somefolder --stagingLocation=gs://bucket/somefolder --templateLocation=gs://bucket/somefolder"

假设:

  • GOOGLE_APPLICATION_CREDENTIALS环境变量是使用服务帐户密钥设置的。

  • gradle已安装。

  • 设置了
  • JAVA_HOME环境变量。

  • 添加了最小的依赖项。

    • 编译'org.apache.beam:beam-sdks-java-core:2.22.0'
    • 编译'org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.22.0'
    • 编译'org.apache.beam:beam-sdks-java-extensions-google-cloud-platform-core:2.22.0'
    • 编译'org.apache.beam:beam-runners-google-cloud-dataflow-java:2.22.0'