2017-09-16 37 views
1

我有一個Beam應用程序,該應用程序在directrunner本地成功運行,並向我提供我的本地控制檯上的代碼中的所有日誌信息。但是,當我嘗試在Google雲端數據流環境中運行它時,我只能在本地控制檯上看到這些日誌信息,但它們沒有顯示在Google雲端控制檯上用於數據流作業,無論是在StackDriver日誌頁面中。登錄Google雲數據流中的Beam應用程序

這裏是我做的,從我的本地控制檯運行我的數據流亞軍代碼:

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

和所有記錄回來這個本地控制檯上。但是當我在瀏覽器上訪問Google Cloud Console並搜索數據流作業的日誌時,我的代碼LOGGER.info(msg)中的任何地方都沒有看到這些日誌。我只看到與數據流管道相關的日誌。

所以我不知道我的Beam應用程序是否以這樣的方式單獨運行,即不在管道內的主類的部分在本地運行,只有部分管道代碼將被髮送到谷歌雲中執行。因此,不在管道代碼中的那些日誌信息在Google Cloud Dataflow日誌中將不可用。

回答

1

您是對的,主程序不在Google Cloud上運行 - 它僅構建管道並將其提交給Dataflow服務。

您可以輕鬆地通過你的主要程序在調試器步進證實了這一點:這是一個普通的Java程序,只是出現這種情況作爲執行的一部分,是pipeline.run()呼叫程序,的事情之一,其引擎蓋下將流水線的步驟到目前爲止封裝到Dataflow服務的HTTP請求中,說「這是流水線的規範,請運行它」。如果這個調用沒有發生,或者網絡出現故障,Dataflow甚至不會知道您的程序存在。

數據流就是這樣 - 一種響應HTTP請求的服務 - 它並不是一種運行Java程序的不同方式,因此它無法知道程序中的任何內容,即程序沒有明確地發送給它;例如,它無法瞭解您的日誌語句。此外,如果使用templates,則主程序的執行與管道的執行完全分離:主程序提交管道模板並完成,並且可以請求稍後使用不同的參數運行模板,可能多次或根本沒有。

相關問題