Risolvere i problemi

Questa pagina mostra come risolvere i problemi relativi a Cloud Data Fusion.

Risolvere i problemi relativi alle pipeline batch

La pipeline in parallelo è bloccata

In Cloud Data Fusion, l'esecuzione di molte pipeline batch in parallelo può sovraccaricare l'istanza, causando il blocco dei job negli stati Starting, Provisioning o Running. Di conseguenza, le pipeline non possono essere arrestate tramite l'interfaccia web o le chiamate API. Quando esegui molte pipeline contemporaneamente, l'interfaccia web può diventare lenta o non rispondere. Questo problema si verifica a causa di più richieste UI effettuate al gestore HTTP nel backend.

Suggerimento

Per risolvere questo problema, controlla il numero di nuove richieste utilizzando il controllo del flusso di Cloud Data Fusion, disponibile nelle istanze in esecuzione nella versione 6.6 e successive.

Timeout della connessione SSH durante l'esecuzione di una pipeline

Quando esegui una pipeline batch, si verifica il seguente errore:

`java.io.IOException: com.jcraft.jsch.JSchException:
java.net.ConnectException: Connection timed out (Connection timed out)`

Suggerimento

Per risolvere l'errore, verifica che non siano presenti i seguenti problemi:

  • Verifica se manca una regola firewall (in genere la porta 22). Per creare una nuova regola firewall, vedi Configurazione di rete del cluster Dataproc.
  • Verifica che il sistema di applicazione di Compute Engine consenta la connessione tra l'istanza di Cloud Data Fusion e il cluster Dataproc.

Codice di risposta: 401. Errore: errore sconosciuto

Quando esegui una pipeline batch, si verifica il seguente errore:

`java.io.IOException: Failed to send message for program run program_run:
Response code: 401. Error: unknown error`

Suggerimento

Per risolvere questo errore, devi concedere il ruolo Runner di Cloud Data Fusion (roles/datafusion.runner) all'account di servizio utilizzato da Dataproc.

La pipeline con il plug-in BigQuery non riesce con Access Denied errore

Si è verificato un problema noto per cui una pipeline si arresta con un errore Access Denied durante l'esecuzione di job BigQuery. Questo vale per le pipeline che utilizzano i seguenti plug-in:

  • Origini BigQuery
  • Sink BigQuery
  • Sink multitabella BigQuery
  • Pushdown alla trasformazione

Errore di esempio nei log (può variare a seconda del plug-in in uso):

POST https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/jobs
{
"code" : 403,
"errors" : [ {
"domain" : "global",
"message" : "Access Denied: Project xxxx: User does not have bigquery.jobs.create permission in project PROJECT_ID",
"reason" : "accessDenied"
} ],
"message" : "Access Denied: Project PROJECT_ID: User does not have bigquery.jobs.create permission in project PROJECT_ID.",
"status" : "PERMISSION_DENIED"
}

In questo esempio, PROJECT_ID è l'ID progetto specificato nel plug-in. L'account di servizio per il progetto specificato nel plug-in non dispone dell'autorizzazione per eseguire almeno una delle seguenti operazioni:

  • Esegui un job BigQuery
  • Lettura di un set di dati BigQuery
  • Crea un bucket temporaneo
  • Crea un set di dati BigQuery
  • Crea la tabella BigQuery

Suggerimento

Per risolvere il problema, concedi i ruoli mancanti al progetto (PROJECT_ID) specificato nel plug-in:

Per ulteriori informazioni, consulta la documentazione per la risoluzione dei problemi del plug-in (Risoluzione dei problemi relativi al sink multitabella Google).

La pipeline non si arresta alla soglia di errore

Una pipeline potrebbe non arrestarsi dopo più errori, anche se imposti la soglia di errore su 1.

La soglia di errore è destinata a qualsiasi eccezione sollevata dall'istruzione in caso di errore non altrimenti gestito. Se l'istruzione utilizza già l'API emitError, la soglia di errore non viene attivata.

Suggerimento

Per progettare una pipeline che non funziona quando viene raggiunta una determinata soglia, utilizza l'istruzione FAIL.

Ogni volta che la condizione passata all'istruzione FAIL viene soddisfatta, il conteggio viene calcolato in base alla soglia di errore e la pipeline non riesce dopo il raggiungimento della soglia.

Il plug-in di origine batch Oracle converte NUMBER in string

Nelle versioni di origine batch Oracle 1.9.0, 1.8.3 e precedenti, il tipo di dati NUMBER Oracle, con precisione e scala non definite, è mappato al tipo di dati CDAP decimal(38,0).

Le versioni dei plug-in 1.9.1, 1.8.4 e 1.8.5 sono incompatibili con le versioni precedenti e le pipeline che utilizzano versioni precedenti potrebbero non funzionare dopo l'upgrade alle versioni 1.9.1, 1.8.5 e 1.8.4, se una fase downstream della pipeline si basa sullo schema di output dell'origine perché lo schema di output è cambiato. Se viene definito uno schema di output per il tipo di dati NUMBER Oracle definito senza precisione e fare lo scale in versione precedente del plug-in, dopo l'upgrade alle versioni 1.9.1, 1.8.5 o 1.8.4, il plug-in dell'origine batch Oracle genera il seguente errore di mancata corrispondenza dello schema per i tipi: Schema field '<field name>' is expected to have type 'decimal with precision <precision> and scale <scale> but found 'string'. Change the data type of field <field name> to string.

Le versioni 1.9.1, 1.8.5 e 1.8.4 funzioneranno con uno schema di output del tipo di dati string CDAP per il tipo di dati NUMBER Oracle definito senza precisione e scalabilità. Se nello schema di output dell'origine Oracle è presente un tipo di dati NUMBER Oracle definito senza precisione e scala, si sconsiglia di utilizzare la versione precedente del plug-in Oracle, poiché può causare errori di arrotondamento.

Il caso speciale si verifica quando utilizzi una macro per il nome del database, dello schema o del nome della tabella e se non hai specificato manualmente uno schema di output. Lo schema viene rilevato e mappato in fase di runtime. La versione precedente del plug-in per l'origine batch di Oracle mappa il tipo di dati NUMBER Oracle definito senza precisione e scala al tipo di dati decimal(38,0) CDAP, mentre le versioni 1.9.1, 1.8.5 e 1.8.4 e successive mappano i tipi di dati a string in fase di runtime.

Suggerimento

Per risolvere il possibile problema di perdita di precisione durante l'utilizzo di tipi di dati NUMBER Oracle con precisione e scalabilità non definite, esegui l'upgrade delle pipeline in modo da utilizzare le versioni 1.9.1, 1.8.5 o 1.8.4 del plug-in di origine batch Oracle.

Dopo l'upgrade, il tipo di dati NUMBER Oracle definito senza precisione e scalabilità viene mappato al tipo di dati string CDAP in fase di runtime. Se hai una fase o un sink a valle che consuma il tipo di dati decimal CDAP originale (a cui è stato mappato il tipo di dati Oracle NUMBER definito senza precisione e scala), aggiornalo o prevedi che consumi dati stringa.

Se sei consapevole del rischio di una possibile perdita di dati a causa di errori di arrotondamento, ma scegli di utilizzare il tipo di dati Oracle NUMBER definito senza precisione e scala come tipo di dati CDAP decimal(38,0), esegui il deployment del plug-in Oracle versione 1.8.6 (per Cloud Data Fusion 6.7.3) o 1.9.2 (per Cloud Data Fusion 6.8.1) dall'hub e aggiorna le pipeline per utilizzarle.

Per ulteriori informazioni, consulta il riferimento per l'origine batch di Oracle.

Elimina un cluster Dataproc temporaneo

Quando Cloud Data Fusion crea un cluster Dataproc temporaneo durante il provisioning della pipeline, il cluster viene eliminato al termine dell'esecuzione della pipeline. In rari casi, l'eliminazione del cluster non riesce.

Vivamente consigliato: esegui l'upgrade alla versione più recente di Cloud Data Fusion per garantire un'adeguata manutenzione del cluster.

Imposta tempo di inattività massimo

Per risolvere il problema, configura l'opzione Max Idle Time. In questo modo Dataproc può eliminare automaticamente i cluster, anche in caso di esito negativo di una chiamata esplicita al completamento della pipeline.

Max Idle Time è disponibile in Cloud Data Fusion 6.4 e versioni successive.

Consigliato: per le versioni precedenti alla 6.6, imposta manualmente Max Idle Time su almeno 30 minuti.

Elimina manualmente i cluster

Se non puoi eseguire l'upgrade della tua versione o configurare l'opzione Max Idle Time, elimina manualmente i cluster inattivi:

  1. Ottieni ogni ID progetto in cui sono stati creati i cluster:

    1. Negli argomenti di runtime della pipeline, controlla se l'ID progetto Dataproc è personalizzato per l'esecuzione.

      Verifica se l'ID progetto Dataproc è personalizzato per l'esecuzione

    2. Se un ID progetto Dataproc non è specificato in modo esplicito, determina quale provisioner viene utilizzato, quindi cerca un ID progetto:

      1. Negli argomenti di runtime della pipeline, controlla il valore system.profile.name.

        Recupero del nome del provisioner negli argomenti di runtime

      2. Apri le impostazioni del provisioner e controlla se l'ID progetto Dataproc è impostato. Se l'impostazione non è presente o il campo è vuoto, viene utilizzato il progetto su cui è in esecuzione l'istanza di Cloud Data Fusion.

  2. Per ogni progetto:

    1. Apri il progetto nella console Google Cloud e vai alla pagina Cluster di Dataproc.

      Vai a Cluster

    2. Ordina i cluster per data di creazione, dal meno recente a quello più recente.

    3. Se il riquadro delle informazioni è nascosto, fai clic su Mostra riquadro informazioni e vai alla scheda Etichette.

    4. Per ogni cluster che non è in uso, ad esempio se è trascorso più di un giorno, controlla se ha un'etichetta di versione di Cloud Data Fusion. Questo indica che è stato creato da Cloud Data Fusion.

    5. Seleziona la casella di controllo accanto al nome del cluster e fai clic su Elimina.

Impossibile creare l'istanza di Cloud Data Fusion

Durante la creazione di un'istanza di Cloud Data Fusion, potresti riscontrare il seguente problema:

Read access to project PROJECT_NAME was denied.

Suggerimento

Per risolvere il problema, disattiva e riattiva l'API Cloud Data Fusion. Quindi, crea l'istanza.

Le pipeline non vengono eseguite su cluster Dataproc con worker secondari

Nelle versioni 6.8 e 6.9 di Cloud Data Fusion, si verifica un problema che causa errori delle pipeline se vengono eseguite su cluster Dataproc in cui sono abilitati i worker secondari:

ERROR [provisioning-task-2:i.c.c.i.p.t.ProvisioningTask@161] - PROVISION task failed in REQUESTING_CREATE state for program run program_run:default.APP_NAME.UUID.workflow.DataPipelineWorkflow.RUN_ID due to
Caused by: io.grpc.StatusRuntimeException: CANCELLED: Failed to read message.
Caused by: com.google.protobuf.GeneratedMessageV3$Builder.parseUnknownField(Lcom/google/protobuf/CodedInputStream;Lcom/google/protobuf/ExtensionRegistryLite;I)Z.

Suggerimento

Per risolvere il problema, rimuovi i nodi worker secondari nei modi seguenti.

Se utilizzi un provisioner temporaneo di Dataproc, risolvi l'errore nel seguente modo:

  1. Vai alla pipeline nell'interfaccia web di Cloud Data Fusion.
  2. Negli argomenti di runtime della pipeline, imposta system.profile.properties.secondaryWorkerNumNodes su 0. Imposta l'argomento di runtime.
  3. Fai clic su Salva.
  4. Se utilizzi uno spazio dei nomi, disabilita i worker secondari nello spazio dei nomi:
    1. Fai clic su Amministratore di sistema > Spazi dei nomi e seleziona lo spazio dei nomi.
    2. Fai clic su Preferenze > Modifica.
    3. Imposta il valore di system.profile.properties.secondaryWorkerNumNodes su 0. Disabilita worker secondari in uno spazio dei nomi.
    4. Fai clic su Salva e chiudi.

Se utilizzi un provisioner Dataproc esistente, risolvi l'errore seguendo questa procedura:

  1. Nella console Google Cloud, vai alla pagina Cluster di Dataproc.

    Vai a Cluster

  2. Seleziona il cluster e fai clic su Modifica.

  3. Nel campo Nodi worker secondari, inserisci 0. Modifica i nodi worker secondari nella console Dataproc.

  4. Fai clic su Salva.