Risolvere i problemi relativi ai container personalizzati in Dataflow

Questo documento fornisce istruzioni per la risoluzione dei problemi che potrebbero verificarsi quando si utilizzano container personalizzati con Dataflow. Si concentra sui problemi relativi ai container o ai worker che non si avviano. Se i tuoi worker sono in grado di avviarsi e il lavoro sta progredendo, 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 container:

  • Segui la procedura per testare l'immagine container a livello locale.
  • Cerca gli errori nei log dei job o nei log dei worker e confronta gli eventuali errori trovati seguendo le indicazioni relative all'errore comune.
  • Assicurati che la versione dell'SDK Apache Beam e la versione della lingua che utilizzi per avviare la pipeline corrispondano alla versione dell'SDK sull'immagine del container personalizzata.
  • Se utilizzi Java, assicurati che la versione principale di Java che utilizzi per avviare la pipeline corrisponda alla versione installata nell'immagine container.
  • Se utilizzi Python, assicurati che la versione principale Python che utilizzi per avviare la pipeline corrisponda alla versione installata nell'immagine container e che l'immagine non abbia dipendenze in conflitto. Puoi eseguire pip check per confermare.

Trova i log dei worker relativi ai container personalizzati

Puoi perfezionare i log dei worker Dataflow per i messaggi di errore relativi ai container utilizzando Esplora log:

  1. Seleziona i nomi dei log. Gli errori di avvio dei container personalizzati hanno maggiori probabilità di verificarsi in uno dei seguenti casi:

    • dataflow.googleapis.com/kubelet
    • dataflow.googleapis.com/docker
    • dataflow.googleapis.com/worker-startup
    • dataflow.googleapis.com/harness-startup
  2. Seleziona la risorsa Dataflow Step e specifica job_id.

Se visualizzi messaggi di log Error Syncing pod..., segui le indicazioni sugli errori comuni. Puoi eseguire una query su questi messaggi di log nei log dei worker di Dataflow utilizzando Esplora log 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 quando si utilizzano container personalizzati.

Il job contiene errori o non è riuscito perché non è possibile estrarre l'immagine container

I worker Dataflow devono essere in grado di accedere alle immagini container personalizzate. Se il worker non è in grado di eseguire il pull dell'immagine a causa di URL non validi, credenziali configurate in modo errato o accesso alla rete mancante, il worker non riesce ad avviarsi.

Per i job batch in cui non è ancora iniziato alcun lavoro e diversi worker non sono in grado di avviarsi in sequenza, Dataflow non riesce. In caso contrario, Dataflow registra gli errori, ma non intraprende ulteriori azioni per evitare di eliminare lo stato del job a lunga esecuzione.

Per informazioni su come risolvere il problema, consulta Richiesta di pull dell'immagine non riuscita con errore nella pagina Risoluzione degli errori di Dataflow.

I worker non si avviano o il lavoro non sta avanzando

A volte, se il container dell'SDK non si avvia a causa di un errore, Dataflow non è in grado di determinare se l'errore è permanente o irreversibile. Dataflow tenta continuamente di riavviare il worker.

Se non ci sono errori evidenti, ma vedi log a livello di [topologymanager] RemoveContainer INFO in dataflow.googleapis.com/kubelet, questi log indicano che l'immagine del container personalizzata sta uscendo in anticipo e non ha avviato il processo dell'SDK worker a lunga esecuzione.

Se i worker sono stati avviati correttamente, ma non è in corso alcun lavoro, un errore potrebbe impedire l'avvio del container SDK. In questo caso, nei suggerimenti sulla diagnostica 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 indicazioni sugli errori comuni.

Le cause comuni di questi problemi includono:

  • Problemi con l'installazione dei pacchetti, ad esempio errori di installazione di pip dovuti a problemi di dipendenza. Vedi Errore durante la sincronizzazione del pod in corso ... non riuscito in "StartContainer".
  • Se il container utilizzato non è compatibile con l'architettura della CPU della VM worker, potresti visualizzare errori come exec format error. Per ulteriori informazioni, consulta la sezione Errore durante la sincronizzazione del pod ... non riuscito a "StartContainer".
  • Errori relativi agli argomenti dei comandi personalizzati o all'elemento ENTRYPOINT impostato nel Dockerfile. Ad esempio, un elemento ENTRYPOINT personalizzato non avvia lo script di avvio predefinito /opt/apache/beam/boot o non trasmette argomenti in modo appropriato a questo script. Per ulteriori informazioni, consulta la sezione Modificare il punto di ingresso del container.
  • Errori quando la versione dell'SDK Apache Beam non corrisponde tra l'ambiente di avvio 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 del worker. Per risolvere il problema, installa nell'immagine container la stessa versione dell'SDK Apache Beam che utilizzi per avviare la pipeline. Per maggiori informazioni, consulta Rendere l'ambiente di lancio compatibile con l'ambiente di runtime.