Questo documento fornisce istruzioni per la risoluzione dei problemi che potrebbero verificarsi durante l'utilizzo di contenuti personalizzati con Dataflow. Si concentra sui problemi di mancata partenza di contenitori o worker. Se i tuoi lavoratori riescono ad avviare il lavoro e il lavoro procede, segui le indicazioni generali per la risoluzione dei problemi della pipeline.
Prima di contattare l'assistenza, assicurati di aver escluso i problemi relativi all'immagine del contenitore:
- Segui i passaggi per testare l'immagine container localmente.
- Cerca gli errori nei log dei job o nei log dei worker e confrontali con le indicazioni relative agli errori comuni.
- Assicurati che la versione dell'SDK Apache Beam e la versione del linguaggio che stai utilizzando per lanciare la pipeline corrispondano alla versione dell'SDK nell'immagine del contenitore personalizzato.
- Se utilizzi Java, assicurati che la versione principale di Java utilizzata per avviare la pipeline corrisponda a quella installata nell'immagine del contenitore.
- Se utilizzi Python, assicurati che la versione major-minor di Python utilizzata per avviare la pipeline corrisponda alla versione installata nell'immagine del contenitore e che l'immagine non abbia dipendenze in conflitto. Puoi eseguire
pip check
per confermare.
Trovare i log del worker relativi ai container personalizzati
Puoi trovare i log dei worker Dataflow per i messaggi di errore relativi ai container utilizzando Esplora log:
Seleziona i nomi dei log. Gli errori di avvio dei container personalizzati si verificano con maggiore probabilità in uno dei seguenti elementi:
dataflow.googleapis.com/kubelet
dataflow.googleapis.com/docker
dataflow.googleapis.com/worker-startup
dataflow.googleapis.com/harness-startup
Seleziona la risorsa
Dataflow Step
e specificajob_id
.
Se visualizzi messaggi di log Error Syncing pod...
, segui le linee guida sugli errori comuni.
Puoi eseguire query su questi messaggi di log nei log dei worker di Dataflow utilizzando
Logs Explorer con la seguente query:
resource.type="dataflow_step" AND jsonPayload.message:("IMAGE_URI") AND severity="ERROR"
Problemi comuni
Di seguito sono riportati alcuni problemi comuni relativi all'utilizzo di contenitori personalizzati.
Il job presenta errori o non è riuscito perché non è possibile eseguire il pull dell'immagine del contenitore
I worker Dataflow devono essere in grado di accedere alle immagini dei container personalizzati. Se il worker non riesce a estrarre l'immagine a causa di URL non validi, credenziali configurate in modo errato o accesso alla rete mancante, non riesce a avviarsi.
Per i job batch in cui non è stato avviato alcun lavoro e diversi worker non riescono ad avviarsi in sequenza, Dataflow non riesce a completare il job. In caso contrario, Dataflow registra gli errori, ma non esegue ulteriori azioni per evitare di distruggere lo stato dei job a lungo termine.
Per informazioni su come risolvere il problema, consulta Richiesta di pull di immagini non riuscita con errore nella pagina Risolvere gli errori di Dataflow.
I worker non si avviano o il lavoro non procede
A volte, se il contenitore dell'SDK non si avvia a causa di un errore, Dataflow non è in grado di determinare se l'errore è permanente o fatale. Dataflow tenta quindi di riavviare continuamente il worker.
Se non ci sono errori evidenti, ma in dataflow.googleapis.com/kubelet
vengono visualizzati log a livello di [topologymanager] RemoveContainer
INFO
, questi log indicano che l'immagine del contenitore personalizzato esce in anticipo e non ha avviato il processo SDK dell'attività a lungo termine.
Se i worker sono stati avviati correttamente, ma non viene eseguito alcun lavoro, è possibile che un errore stia impedendo l'avvio del contenitore SDK. In questo caso, nei consigli diagnostici viene visualizzato il seguente errore:
Failed to start container
Inoltre, i log dei worker non contengono righe come la seguente:
Executing: python -m apache_beam.runners.worker.sdk_worker_main or Executing: java ... FnHarness
Individua errori specifici nei log dei worker e consulta le linee guida sugli errori comuni.
Le cause comuni di questi problemi sono:
- Problemi di installazione del pacchetto, ad esempio errori di installazione di
pip
dovuti a problemi di dipendenza. Consulta Error syncing pod ... failed to "StartContainer". - Se il contenitore utilizzato non è compatibile con l'architettura della CPU della VM worker,
potresti visualizzare errori come
exec format error
. Per ulteriori informazioni, consulta Error syncing pod ... failed to "StartContainer". - Errori con gli argomenti del comando personalizzato o con
ENTRYPOINT
impostato nel Dockerfile. Ad esempio, unENTRYPOINT
personalizzato non avvia lo script di avvio predefinito/opt/apache/beam/boot
o non passa gli argomenti in modo appropriato a questo script. Per ulteriori informazioni, consulta Modificare il punto di contatto del contenitore. - Errori quando la versione dell'SDK Apache Beam non corrisponde tra l'ambiente di lancio e l'ambiente di runtime. In una modalità di errore, i valori predefiniti impostati nelle opzioni della pipeline dell'SDK Apache Beam potrebbero non essere riconosciuti.
Ad esempio, potresti visualizzare errori come
sdk_worker_main.py: error: argument --flink_version: invalid choice: '1.16' (choose from '1.12', '1.13', '1.14', '1.15')
nei log dei worker. Per risolvere il problema, installa nell'immagine del contenitore la stessa versione dell'SDK Apache Beam che utilizzi per avviare la pipeline. Per ulteriori informazioni, consulta Rendere l'ambiente di lancio compatibile con l'ambiente di runtime.