2017-09-16 2 views
1

Ich habe eine Beam-Anwendung, die lokal erfolgreich mit directrunner ausgeführt wird und gibt mir alle Protokollinformationen, die ich in meinem Code auf meiner lokalen Konsole habe. Aber wenn ich es in der google cloud dataflow-Umgebung ausprobiert habe, sehe ich nur diese Log-Informationen auf meiner lokalen Konsole, aber sie erscheinen nicht auf der Google Cloud Console für Datenfluss-Jobs, weder auf ihrer StackDriver-Logging-Seite.Logs für Beam-Anwendung in Google Cloud Datenfluss

Hier ist, was ich tat, um meinen Code für Datenfluß Läufer von meiner lokalen Konsole ausführen:

mvn compile exec:java -Dexec.mainClass= ... \ 
         -Dexec.args=... " \ 
         -Pdataflow-runner 

und alle Protokolle wieder auf dieser lokalen Konsole. Aber als ich in meinem Browser zur Google Cloud Console ging und nach den Protokollen für meinen Datenflussjob suchte, sah ich diese Protokolle nirgends in meinem Code LOGGER.info(msg). Ich sehe nur Protokolle im Zusammenhang mit Datenfluss-Pipeline.

Also frage ich mich, ob meine Beam-Anwendung separat so ausgeführt wird, dass der Teil der Hauptklasse nicht innerhalb der Pipeline lokal ausgeführt wird und nur der Teil des Pipeline-Codes zur Ausführung an die Google Cloud gesendet wird. Daher sind diese Protokollinformationen, die nicht im Pipeline-Code enthalten sind, nicht in den Google Cloud Dataflow-Protokollen verfügbar.

Antwort

1

Sie haben Recht, das Hauptprogramm läuft nicht in Google Cloud - es erstellt nur die Pipeline und übergibt sie dem Dataflow-Dienst.

Sie können die leicht überprüfen, indem sie in einem Debugger durch Ihr Hauptprogramm Schritt: es ist ein reguläres Java-Programm, nur eines der Dinge, den Teil der Ausführung geschieht wie der pipeline.run() Anruf in Ihrem Programm, das unter der Haube Packt die Schritte der Pipeline so weit in eine HTTP-Anfrage an den Dataflow-Dienst, dass "hier eine Spezifikation einer Pipeline ist, bitte führen Sie dies aus". Wenn dieser Aufruf nicht erfolgt ist oder das Netzwerk ausgefallen ist, würde Dataflow niemals erfahren, dass Ihr Programm existiert.

Dataflow ist genau das - ein Dienst, der auf HTTP-Anfragen reagiert - es ist keine andere Art, Java-Programme auszuführen, also hat es keine Möglichkeit, etwas in Ihrem Programm zu erfahren, das Ihr Programm nicht explizit dorthin sendet ; Zum Beispiel hat es keine Möglichkeit, über Ihre Log-Anweisungen zu wissen.

Außerdem, wenn Sie templates verwenden, ist die Ausführung Ihres Hauptprogramms vollständig von der Ausführung der Pipeline entkoppelt: Das Hauptprogramm übergibt die Pipelinevorlage und wird beendet, und Sie können später die Vorlage mit anderen Parametern anfordern. möglicherweise mehrmals oder gar nicht.

Verwandte Themen