【问题标题】:Execute templates multiple times with BigQuery as sink使用 BigQuery 作为接收器多次执行模板
【发布时间】:2017-08-09 13:26:27
【问题描述】:

对于 BigQuery 批处理流水线,模板只能执行一次,因为 BigQuery 作业 ID 是在创建模板时设置的。我正在使用 Apache Beam v2.0.0 并且无法多次执行模板。我们可以在头部使用光束来进行此限制吗?如果是的话,我想知道的第一件事是什么是头梁?为了支持多次执行模板,我的 Apache Beam 程序需要进行哪些具体更改?

Maven 依赖:

<dependency>
  <groupId>org.apache.beam</groupId>
  <artifactId>beam-sdks-java-io-jms</artifactId>
  <version>2.2.0-SNAPSHOT</version>
</dependency>
<dependency>
  <groupId>org.apache.beam</groupId>
  <artifactId>beam-examples-java</artifactId>
  <version>2.2.0-SNAPSHOT</version>
</dependency>
<dependency>
  <groupId>org.apache.beam</groupId>
  <artifactId>beam-examples-java8</artifactId>
  <version>2.2.0-SNAPSHOT</version>
</dependency>
<dependency>
  <groupId>org.apache.beam</groupId>
  <artifactId>beam-sdks-common-fn-api</artifactId>
  <version>2.2.0-SNAPSHOT</version>
</dependency>
<dependency>
  <groupId>org.apache.beam</groupId>
  <artifactId>beam-sdks-java-build-tools</artifactId>
  <version>2.2.0-SNAPSHOT</version>
</dependency>
<dependency>
  <groupId>org.apache.beam</groupId>
  <artifactId>beam-sdks-java-core</artifactId>
  <version>2.2.0-SNAPSHOT</version>
</dependency>
<dependency>
  <groupId>org.apache.beam</groupId>
  <artifactId>beam-sdks-java-extensions-google-cloud-platform-core</artifactId>
  <version>2.2.0-SNAPSHOT</version>
</dependency>
<dependency>
  <groupId>org.apache.beam</groupId>
  <artifactId>beam-sdks-java-extensions-join-library</artifactId>
  <version>2.2.0-SNAPSHOT</version>
</dependency>
<dependency>
  <groupId>org.apache.beam</groupId>
  <artifactId>beam-sdks-java-extensions-protobuf</artifactId>
  <version>2.2.0-SNAPSHOT</version>
</dependency>
<dependency>
  <groupId>org.apache.beam</groupId>
  <artifactId>beam-sdks-java-extensions-sorter</artifactId>
  <version>2.2.0-SNAPSHOT</version>
</dependency>
<dependency>
  <groupId>org.apache.beam</groupId>
  <artifactId>beam-sdks-java-io-amqp</artifactId>
  <version>2.2.0-SNAPSHOT</version>
</dependency>
<dependency>
  <groupId>org.apache.beam</groupId>
  <artifactId>beam-sdks-java-io-google-cloud-platform</artifactId>
  <version>2.2.0-SNAPSHOT</version>
</dependency>
<dependency>
  <groupId>org.apache.beam</groupId>
  <artifactId>beam-sdks-java-io-jdbc</artifactId>
  <version>2.2.0-SNAPSHOT</version>
</dependency>
<dependency>
  <groupId>org.apache.beam</groupId>
  <artifactId>beam-sdks-java-io-kafka</artifactId>
  <version>2.2.0-SNAPSHOT</version>
</dependency>
<dependency>
  <groupId>org.apache.beam</groupId>
  <artifactId>beam-sdks-java-io-kinesis</artifactId>
  <version>2.2.0-SNAPSHOT</version>
</dependency>
<dependency>
  <groupId>org.apache.beam</groupId>
  <artifactId>beam-sdks-java-io-mongodb</artifactId>
  <version>2.2.0-SNAPSHOT</version>
</dependency>
<dependency>
  <groupId>org.apache.beam</groupId>
  <artifactId>beam-sdks-java-io-mqtt</artifactId>
  <version>2.2.0-SNAPSHOT</version>
</dependency>
<dependency>
  <groupId>org.apache.beam</groupId>
  <artifactId>beam-sdks-java-io-solr</artifactId>
  <version>2.2.0-SNAPSHOT</version>
</dependency>
<dependency>
  <groupId>org.apache.beam</groupId>
  <artifactId>beam-runners-core-construction-java</artifactId>
  <version>2.2.0-SNAPSHOT</version>
</dependency>
<dependency>
  <groupId>org.apache.beam</groupId>
  <artifactId>beam-runners-core-java</artifactId>
  <version>2.2.0-SNAPSHOT</version>
</dependency>
<dependency>
  <groupId>org.apache.beam</groupId>
  <artifactId>beam-runners-direct-java</artifactId>
  <version>2.2.0-SNAPSHOT</version>
</dependency>
<dependency>
  <groupId>org.apache.beam</groupId>
  <artifactId>beam-runners-google-cloud-dataflow-java</artifactId>
  <version>2.2.0-SNAPSHOT</version>
</dependency>
<dependency>
  <groupId>org.apache.beam</groupId>
  <artifactId>beam-sdks-common-runner-api</artifactId>
  <version>2.2.0-SNAPSHOT</version>
</dependency>

【问题讨论】:

    标签: google-bigquery google-cloud-dataflow apache-beam


    【解决方案1】:

    这是问题BEAM-2058。如果您使用来自Beam github repository 的最新代码,它应该被修复。除了构建新版本的 Beam 并更新您的 pom.xml 以使用它之外,您不需要做任何事情。

    或者,等待 Beam 的 2.1.0 版本,该版本正在准备中。

    【讨论】:

    • 感谢您的回复。我已经根据 github 存储库中的 pom.xml 文件更新了我的 pom.xml 文件,但仍然面临同样的问题。在 github 存储库上,多个代码组件存在于不同的文件夹下。您能否让我知道最新代码的确切路径,以便我可以在我的 DataFlow 程序中使用它?另外,请让我知道我需要在我的 DF 程序中添加(来自 GitHub 代码)哪个 sn-p 来解决模板执行问题?对不起,我是 github 的新手。你能帮我解决一下吗
    • 您不需要根据 Github 中的内容修改任何代码。相反,您需要克隆 github 存储库并使用 Maven 安装它。这将使 2.2.0-SNAPSHOT 版本可用于您的代码。然后,您只需更新您的 pom.xml 以引用您构建的 Beam 的 2.2.0-SNAPSHOT 版本,然后使用它。
    • Beam contribution guide 还谈到了从 Github 代码库构建 Beam 所需的步骤,这可能有助于安装最新版本所需的步骤。完成此操作后,除了使用您构建的新版本之外,您不需要对项目进行任何更改。
    • 谢谢。我克隆了 github 存储库并使用 Maven 安装它。还更新了 pom.xml 文件以添加依赖项,但仍然出现以下错误:“线程“主”java.lang.NoSuchMethodError 中的异常:org.apache.beam.sdk.common.runner.v1.RunnerApi$FunctionSpec$‌​Builder.setParameter‌ ​(Lcom/google/protobu‌​f/Any;)Lorg/apache/b‌​eam/sdk/common/runne‌​r/v1/RunnerApi$Funct‌​ionSpec$Builder;"注意:更新的 POM.xml 文件已添加到问题中。
    • 我还尝试了另一种选择。从 github 下载所有代码并创建新的 Java 项目。在此之后,我创建了一个 Jar 文件,该文件作为外部 Jar 文件导入到我的 DataFlow 程序中。我仍然无法多次执行相同的模板。请让我知道是否有任何其他选项或解决方法。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多