Ich versuche, einen Datenflussjob über eine (bereits vorhandene) AppEngine-Anwendung zu starten. Der DataFlow-Job liest Daten, die von der in DataStore gespeicherten GAE-Anwendung generiert wurden, und schreibt die verarbeiteten Daten in BigQuery. Ich erhalte den folgenden Fehler.Dataflow-Jobs mit App Engine-Fehlern mit einer SecurityException auf addShutdownHook für BigQueryTableInserter starten
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)
Gibt es eine Möglichkeit in Datenfluß zu einem BigQuery Tabelle schreiben zu können, wenn sie über GAE gekickt werden? Ich setze den Läufer auf DataflowPipelineRunner
, also sollte es nicht versuchen, es auf der GAE-Instanz selbst auszuführen. (Gibt es eine Möglichkeit, dies zu überprüfen?)
BEAM-142 wurde bereits für eine Weile aufgelöst, aber es scheint mir, dass es nicht zu Dataflow SDK portiert wurde (nicht einmal zum 'Master'-Zweig). Weißt du ob/wann das passieren wird? –
Hi Helder, leider unterstützt Dataflow den AppEngine-Standard nicht mehr - aus Gründen der kritischen Stabilität verlassen wir uns jetzt auf irgendeinen JNI-Code. Wie Mete betont, können Dataflow-Jobs von App Engine Flex gesendet werden. –
@Dan Es ist ein bisschen bedauerlich, dass Google uns dazu drängt, eine Technologie zu verwenden, die noch ohne SLA (AppEngine Flex) funktioniert, während wir dies in der Produktion betreiben und SLAs erfüllen müssen. Danke trotzdem für das Update. –