使用 BigQueryTableInserter 的 addShutdownHook 上的 SecurityException 启动带有 App Engine 错误的数据流作业
Kicking off Dataflow Jobs with App Engine errors with a SecurityException on addShutdownHook for BigQueryTableInserter
我正在尝试通过(已经存在的)AppEngine 应用程序启动数据流作业。 DataFlow 作业读取存储在 DataStore 中的 GAE 应用程序生成的数据,并将处理后的数据写入 BigQuery。我收到以下错误。
java.lang.SecurityException: Google App Engine does not support Runtime.addShutdownHook
at com.google.appengine.runtime.Request.process-a010d936cef53bc8(Request.java)
at java.lang.Runtime.addShutdownHook(Runtime.java:46)
at com.google.cloud.dataflow.sdk.repackaged.com.google.common.util.concurrent.MoreExecutors$Application.addShutdownHook(MoreExecutors.java:232)
at com.google.cloud.dataflow.sdk.repackaged.com.google.common.util.concurrent.MoreExecutors$Application.addDelayedShutdownHook(MoreExecutors.java:204)
at com.google.cloud.dataflow.sdk.repackaged.com.google.common.util.concurrent.MoreExecutors$Application.getExitingExecutorService(MoreExecutors.java:188)
at com.google.cloud.dataflow.sdk.repackaged.com.google.common.util.concurrent.MoreExecutors.getExitingExecutorService(MoreExecutors.java:89)
at com.google.cloud.dataflow.sdk.util.BigQueryTableInserter.<clinit>(BigQueryTableInserter.java:79)
at com.google.cloud.dataflow.sdk.io.BigQueryIO$Write$Bound.verifyTableEmpty(BigQueryIO.java:886)
at com.google.cloud.dataflow.sdk.io.BigQueryIO$Write$Bound.apply(BigQueryIO.java:942)
at com.google.cloud.dataflow.sdk.io.BigQueryIO$Write$Bound.apply(BigQueryIO.java:724)
at com.google.cloud.dataflow.sdk.runners.PipelineRunner.apply(PipelineRunner.java:74)
at com.google.cloud.dataflow.sdk.runners.DataflowPipelineRunner.apply(DataflowPipelineRunner.java:327)
at com.google.cloud.dataflow.sdk.Pipeline.applyInternal(Pipeline.java:367)
at com.google.cloud.dataflow.sdk.Pipeline.applyTransform(Pipeline.java:274)
at com.google.cloud.dataflow.sdk.values.PCollection.apply(PCollection.java:161)
有没有一种方法可以在通过 GAE 启动时在数据流中写入 BigQuery table?我将 运行ner 设置为 DataflowPipelineRunner
,因此它不应该在 GAE 实例本身上尝试 运行 它。 (有办法验证吗?)
DataflowPipelineRunner 正在尝试在将作业提交到 Google Cloud Dataflow 服务之前验证您的管道。在此堆栈跟踪中,我们尝试验证目标 BigQuery table 是否为空。
在此过程中,我们初始化了一个 ExecutorService
,在 Google App Engine 中不允许 运行。这很不幸,因为在这种情况下这并不是严格需要的。此问题的修复被跟踪为 BEAM-142,请检查那里是否有任何更新。
解决方法是在 App Engine 环境中禁用验证。在您的 BigQuery 接收器中使用 BigQueryIO.Write.withoutValidation()
。
您可以尝试使用 App Engine 柔性环境,它在允许的 JRE 方面不像 App Engine 标准那样严格 类。
我正在尝试通过(已经存在的)AppEngine 应用程序启动数据流作业。 DataFlow 作业读取存储在 DataStore 中的 GAE 应用程序生成的数据,并将处理后的数据写入 BigQuery。我收到以下错误。
java.lang.SecurityException: Google App Engine does not support Runtime.addShutdownHook
at com.google.appengine.runtime.Request.process-a010d936cef53bc8(Request.java)
at java.lang.Runtime.addShutdownHook(Runtime.java:46)
at com.google.cloud.dataflow.sdk.repackaged.com.google.common.util.concurrent.MoreExecutors$Application.addShutdownHook(MoreExecutors.java:232)
at com.google.cloud.dataflow.sdk.repackaged.com.google.common.util.concurrent.MoreExecutors$Application.addDelayedShutdownHook(MoreExecutors.java:204)
at com.google.cloud.dataflow.sdk.repackaged.com.google.common.util.concurrent.MoreExecutors$Application.getExitingExecutorService(MoreExecutors.java:188)
at com.google.cloud.dataflow.sdk.repackaged.com.google.common.util.concurrent.MoreExecutors.getExitingExecutorService(MoreExecutors.java:89)
at com.google.cloud.dataflow.sdk.util.BigQueryTableInserter.<clinit>(BigQueryTableInserter.java:79)
at com.google.cloud.dataflow.sdk.io.BigQueryIO$Write$Bound.verifyTableEmpty(BigQueryIO.java:886)
at com.google.cloud.dataflow.sdk.io.BigQueryIO$Write$Bound.apply(BigQueryIO.java:942)
at com.google.cloud.dataflow.sdk.io.BigQueryIO$Write$Bound.apply(BigQueryIO.java:724)
at com.google.cloud.dataflow.sdk.runners.PipelineRunner.apply(PipelineRunner.java:74)
at com.google.cloud.dataflow.sdk.runners.DataflowPipelineRunner.apply(DataflowPipelineRunner.java:327)
at com.google.cloud.dataflow.sdk.Pipeline.applyInternal(Pipeline.java:367)
at com.google.cloud.dataflow.sdk.Pipeline.applyTransform(Pipeline.java:274)
at com.google.cloud.dataflow.sdk.values.PCollection.apply(PCollection.java:161)
有没有一种方法可以在通过 GAE 启动时在数据流中写入 BigQuery table?我将 运行ner 设置为 DataflowPipelineRunner
,因此它不应该在 GAE 实例本身上尝试 运行 它。 (有办法验证吗?)
DataflowPipelineRunner 正在尝试在将作业提交到 Google Cloud Dataflow 服务之前验证您的管道。在此堆栈跟踪中,我们尝试验证目标 BigQuery table 是否为空。
在此过程中,我们初始化了一个 ExecutorService
,在 Google App Engine 中不允许 运行。这很不幸,因为在这种情况下这并不是严格需要的。此问题的修复被跟踪为 BEAM-142,请检查那里是否有任何更新。
解决方法是在 App Engine 环境中禁用验证。在您的 BigQuery 接收器中使用 BigQueryIO.Write.withoutValidation()
。
您可以尝试使用 App Engine 柔性环境,它在允许的 JRE 方面不像 App Engine 标准那样严格 类。