Risolvere i problemi relativi ai container personalizzati in Dataflow

Questo documento fornisce istruzioni per la risoluzione dei problemi che potrebbero verificarsi durante l'utilizzo di container personalizzati con Dataflow. Si concentra sui problemi relativi all'avvio di container o worker. Se i worker sono in grado di avviare e lavorare e l'attività procede, segui le indicazioni generali per la risoluzione dei problemi della pipeline.

Prima di contattare l'assistenza, assicurati di aver escluso problemi relativi all'immagine container:

  • Segui i passaggi per testare l'immagine container localmente.
  • Cerca errori nei log dei job o nei log dei worker e confronta gli errori trovati con le indicazioni relative agli errori comuni.
  • Assicurati che la versione dell'SDK Apache Beam e la versione della lingua che utilizzi per avviare la pipeline corrispondano alla versione dell'SDK nell'immagine del container personalizzato.
  • 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-secondaria di 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.

Trovare i log dei worker correlati ai container personalizzati

Per trovare i log dei worker Dataflow per i messaggi di errore relativi ai container, puoi utilizzare Esplora log:

  1. Seleziona i nomi dei log. Gli errori di avvio del container personalizzato si verificano più probabilmente in uno dei seguenti elementi:

    • 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 per gli errori comuni. Puoi eseguire query su questi messaggi di log nei log dei worker 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 durante l'utilizzo di container personalizzati.

Il job presenta errori o non è riuscito perché non è possibile eseguire il pull dell'immagine container

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

Per i job batch in cui non è stato avviato alcun lavoro e diversi worker non riescono ad avviarsi in sequenza, Dataflow non riesce a eseguire il job. In caso contrario, Dataflow registra gli errori, ma non esegue ulteriori azioni per evitare di distruggere lo stato dei job a lunga esecuzione.

Per informazioni su come risolvere il problema, vedi Richiesta di pull dell'immagine 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 SDK non viene avviato 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 sono presenti errori evidenti, ma visualizzi log di livello [topologymanager] RemoveContainer INFO in dataflow.googleapis.com/kubelet, questi log indicano che l'immagine container personalizzata viene chiusa in anticipo e non ha avviato il processo SDK worker a lunga esecuzione.

Se i worker sono stati avviati correttamente, ma non viene eseguito alcun lavoro, un errore potrebbe impedire l'avvio del container SDK. In questo caso, nei consigli diagnostici viene visualizzato il seguente errore:

Failed to start container

Inoltre, i log del worker non contengono righe come le seguenti:

Executing: python -m apache_beam.runners.worker.sdk_worker_main or Executing: java ... FnHarness

Trova errori specifici nei log dei worker e controlla le indicazioni sugli errori comuni.

Le cause comuni di questi problemi includono:

  • Problemi con l'installazione del pacchetto, ad esempio errori di installazione di pip dovuti a problemi di dipendenza. Vedi Errore durante la sincronizzazione del pod… non è stato possibile "StartContainer".
  • Se il container utilizzato non è compatibile con l'architettura della CPU della VM worker, potresti visualizzare errori come exec format error. Per saperne di più, consulta Errore durante la sincronizzazione del pod ... impossibile avviare il container.
  • Errori relativi agli argomenti del comando personalizzato o a ENTRYPOINT impostato nel Dockerfile. Ad esempio, un ENTRYPOINT 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, vedi Modifica dell'entry point del container.
  • 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, nei log dei worker 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'). Per risolvere il problema, installa la stessa versione dell'SDK Apache Beam nell'immagine container che utilizzi per avviare la pipeline. Per maggiori informazioni, vedi Rendere l'ambiente di lancio compatibile con l'ambiente di runtime.

L'esecuzione come utente non root non è supportata

In generale, non puoi eseguire immagini container SDK personalizzate o immagini container modello personalizzate per i modelli flessibili come utente non root. Se provi a eseguire i container come utente non root, la pipeline non riesce.

Per saperne di più, consulta Ambiente di runtime o contatta il tuo team dedicato all'account.