Fehlerbehebung bei Cloud Data Fusion

Auf dieser Seite wird beschrieben, wie Sie Probleme mit Cloud Data Fusion beheben.

Fehler bei Batchpipelines beheben

Die folgenden Hinweise gelten für Batchpipelines.

Gleichzeitige Pipeline hängt

In Cloud Data Fusion können viele gleichzeitige Batchpipelines die Instanz belasten und Jobs im Status Starting, Provisioning oder Running hängen bleiben. Daher können Pipelines nicht über die Weboberfläche oder API-Aufrufe angehalten werden. Wenn Sie viele Pipelines gleichzeitig ausführen, kann die Weboberfläche langsam werden oder nicht mehr reagieren. Dieses Problem tritt auf, wenn im Back-End mehrere Benutzeroberflächenanfragen an den HTTP-Handler gesendet werden.

Empfehlung

Um dieses Problem zu beheben, steuern Sie die Anzahl neuer Anfragen mithilfe der Cloud Data Fusion-Ablaufsteuerung, die in Instanzen ab Version 6.6 verfügbar ist.

Zeitüberschreitung bei der SSH-Verbindung, während eine Pipeline ausgeführt wird

Der folgende Fehler tritt auf, wenn Sie eine Batchpipeline ausführen:

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

Empfehlung

Prüfen Sie, ob eines der folgenden Probleme vorliegt, um den Fehler zu beheben:

  • Suchen Sie nach einer fehlenden Firewallregel (normalerweise Port 22). Informationen zum Erstellen einer neuen Firewallregel finden Sie unter Dataproc-Cluster – Netzwerkkonfiguration.
  • Prüfen Sie, ob die Compute Engine-Erzwingung die Verbindung zwischen Ihrer Cloud Data Fusion-Instanz und dem Dataproc-Cluster zulässt.

Antwortcode: 401. Fehler: unbekannter Fehler

Der folgende Fehler tritt auf, wenn Sie eine Batchpipeline ausführen:

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

Empfehlung

Zum Beheben dieses Fehlers müssen Sie dem von Dataproc verwendeten Dienstkonto die Rolle „Cloud Data Fusion-Runner“ (roles/datafusion.runner) zuweisen.

Pipeline mit BigQuery-Plug-in schlägt mit dem Fehler Access Denied fehl

Es gibt ein bekanntes Problem, bei dem eine Pipeline beim Ausführen von BigQuery-Jobs mit dem Fehler Access Denied fehlschlägt. Dies wirkt sich auf Pipelines aus, die die folgenden Plug-ins verwenden:

  • BigQuery-Quellen
  • BigQuery-Senken
  • BigQuery-Multitabellensenken
  • Transformations-Push-down

Beispielfehler in den Logs (kann je nach verwendetem Plug-in variieren):

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 diesem Beispiel ist PROJECT_ID die Projekt-ID, die Sie im Plug-in angegeben haben. Das Dienstkonto für das im Plug-in angegebene Projekt ist nicht berechtigt, mindestens einen der folgenden Schritte auszuführen:

  • BigQuery-Job ausführen
  • BigQuery-Dataset lesen
  • Temporären Bucket erstellen
  • BigQuery-Dataset erstellen
  • BigQuery-Tabelle erstellen

Empfehlung

Zum Beheben dieses Problems weisen Sie dem Projekt (PROJECT_ID), das Sie im Plug-in angegeben haben, die fehlenden Rollen zu:

  • Zum Ausführen eines BigQuery-Jobs müssen Sie die Rolle „BigQuery-Jobnutzer“ (roles/bigquery.jobUser) zuweisen.

  • Zum Lesen eines BigQuery-Datasets weisen Sie die Rolle "BigQuery-Datenbetrachter" (roles/bigquery.dataViewer) zu.

  • Gewähren Sie die Rolle „Storage-Administrator“ (roles/storage.admin), um einen temporären Bucket zu erstellen.

  • Zum Erstellen eines BigQuery-Datasets oder einer BigQuery-Tabelle erteilen Sie die Rolle "BigQuery-Datenbearbeiter" (roles/bigquery.dataEditor).

Weitere Informationen finden Sie in der Dokumentation zur Fehlerbehebung des Plug-ins (Fehlerbehebung bei Multi-Table-Senken in Google BigQuery).

Pipeline stoppt nicht am Fehlergrenzwert

Eine Pipeline wird möglicherweise nach mehreren Fehlern nicht beendet, selbst wenn Sie den Fehlerschwellenwert auf 1 gesetzt haben.

Der Fehlergrenzwert ist für alle Ausnahmen vorgesehen, die von der Anweisung ausgelöst werden, wenn ein Fehler auftritt, der sonst nicht behandelt wird. Wenn die Anweisung bereits die emitError API verwendet, ist der Fehlerschwellenwert nicht aktiviert.

Empfehlung

Verwenden Sie die Anweisung FAIL, um eine Pipeline zu entwerfen, die fehlschlägt, wenn ein bestimmter Schwellenwert erreicht wird.

Wenn die an die Anweisung FAIL übergebene Bedingung erfüllt ist, wird sie auf den Fehlergrenzwert angerechnet und die Pipeline schlägt nach Erreichen des Schwellenwerts fehl.

Oracle-Batch-Quell-Plug-in konvertiert NUMBER in string

In Oracle-Batch-Quellversionen 1.9.0, 1.8.3 und früher wird der Oracle-Datentyp NUMBER mit nicht definierter Genauigkeit und Skalierung dem CDAP-Datentyp decimal(38,0) zugeordnet.

Die Plug-in-Versionen 1.9.1, 1.8.4 und 1.8.5 sind nicht abwärtskompatibel. Pipelines, die ältere Versionen verwenden, funktionieren nach dem Upgrade auf die Versionen 1.9.1, 1.8.5 und 1.8.4 möglicherweise nicht mehr, wenn eine nachgelagerte Phase in der Pipeline auf dem Ausgabeschema der Quelle basiert, weil sich das Ausgabeschema geändert hat. Wenn ein Ausgabeschema für den Oracle-Datentyp NUMBER ohne Genauigkeit und Skalierung in der vorherigen Plug-in-Version definiert wurde, gibt das Oracle-Batch-Quell-Plug-in nach dem Upgrade auf die Versionen 1.9.1, 1.8.5 oder 1.8.4 den folgenden Schemakonflikt für die Typen aus: 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.

Die Versionen 1.9.1, 1.8.5 und 1.8.4 funktionieren mit einem Ausgabeschema des CDAP-Datentyps string für den Oracle-Datentyp NUMBER, der ohne Genauigkeit und Skalierung definiert ist. Wenn im Oracle-Quellausgabeschema ein Oracle-Datentyp NUMBER ohne Genauigkeit und Skalierung definiert ist, wird die Verwendung der älteren Version des Oracle-Plug-ins nicht empfohlen, da dies zu Rundungsfehlern führen kann.

Der Sonderfall ist, wenn Sie ein Makro für den Datenbanknamen, den Schemanamen oder den Tabellennamen verwenden und wenn Sie kein Ausgabeschema manuell angegeben haben. Das Schema wird zur Laufzeit erkannt und zugeordnet. Die ältere Version des Oracle-Batch-Quell-Plug-ins ordnet den Oracle-Datentyp NUMBER, der ohne Genauigkeit definiert ist, dem CDAP-Datentyp decimal(38,0) zu. In den Versionen 1.9.1, 1.8.5 und 1.8.4 und höher werden die Datentypen zur Laufzeit string zugeordnet.

Empfehlung

Aktualisieren Sie Ihre Pipelines auf die Version 1.9.1, 1.8.5 oder 1.8.4 des Oracle-Batch-Quell-Plug-ins, um das mögliche Problem mit dem Genauigkeitsverlust bei der Arbeit mit Oracle-NUMBER-Datentypen mit nicht definierter Genauigkeit und Skalierung zu beheben.

Nach dem Upgrade wird der Oracle-Datentyp NUMBER, der ohne Genauigkeit und Skalierung definiert ist, zur Laufzeit dem CDAP-Datentyp string zugeordnet. Wenn Sie eine nachgelagerte Phase oder Senke haben, die den ursprünglichen CDAP-Datentyp decimal verwendet (dem der Oracle-Datentyp NUMBER ohne Genauigkeit und Skalierung zugeordnet wurde), aktualisieren Sie ihn oder erwarten Sie, dass er Stringdaten nutzt.

Wenn Sie das Risiko eines möglichen Datenverlusts aufgrund von Rundungsfehlern kennen, aber den Oracle-Datentyp NUMBER ohne Genauigkeit definieren und als CDAP-Datentyp decimal(38,0) skalieren möchten, stellen Sie das Oracle-Plug-in Version 1.8.6 (für Cloud Data Fusion 6.7.3) oder 1.9.2 (für Cloud Data Fusion 6.8.1) aus dem Hub bereit und aktualisieren Sie die Pipelines, um sie zu verwenden.

Weitere Informationen finden Sie in der Oracle Batch Source-Referenz.

Sitzungsspezifische Dataproc-Cluster löschen

Wenn Cloud Data Fusion während der Bereitstellung der Pipeline einen sitzungsspezifischen Dataproc-Cluster erstellt, wird der Cluster nach Abschluss der Pipelineausführung gelöscht. In seltenen Fällen schlägt das Löschen des Clusters fehl.

Dringende Empfehlung: Führen Sie ein Upgrade auf die neueste Version von Cloud Data Fusion durch, um eine ordnungsgemäße Clusterwartung sicherzustellen.

Maximale Inaktivitätszeit festlegen

Konfigurieren Sie die Option Max Idle Time, um dieses Problem zu beheben. Auf diese Weise kann Dataproc Cluster automatisch löschen, auch wenn ein expliziter Aufruf der Pipeline fehlschlägt.

Max Idle Time ist in Cloud Data Fusion ab Version 6.4 verfügbar.

Empfohlen: Legen Sie für Versionen vor 6.6 Max Idle Time manuell auf mindestens 30 Minuten fest.

Cluster manuell löschen

Wenn Sie keine Version upgraden oder die Option Max Idle Time konfigurieren können, löschen Sie veraltete Cluster stattdessen manuell:

  1. Rufen Sie jede Projekt-ID ab, in der die Cluster erstellt wurden:

    1. Prüfen Sie in den Laufzeitargumenten der Pipeline, ob die Dataproc-Projekt-ID für die Ausführung angepasst ist.

      Prüfen, ob die Dataproc-Projekt-ID für die Ausführung angepasst wurde

    2. Wenn eine Dataproc-Projekt-ID nicht explizit angegeben ist, ermitteln Sie, welcher Bereitsteller verwendet wird, und suchen Sie dann nach einer Projekt-ID:

      1. Prüfen Sie in den Pipelinelaufzeitargumenten den Wert system.profile.name.

        Name des Bereitstellers in den Laufzeitargumenten abrufen

      2. Öffnen Sie die Bereitstellereinstellungen und prüfen Sie, ob die Dataproc-Projekt-ID festgelegt ist. Wenn die Einstellung nicht vorhanden oder das Feld leer ist, wird das Projekt verwendet, in dem die Cloud Data Fusion-Instanz ausgeführt wird.

  2. Gehen Sie für jedes Projekt so vor:

    1. Öffnen Sie das Projekt in der Google Cloud Console und rufen Sie die Dataproc-Seite Cluster auf.

      Zu den Clustern

    2. Sortieren Sie die Cluster nach dem Datum, an dem sie erstellt wurden, von der ältesten bis zur neuesten.

    3. Wenn das Infofeld ausgeblendet ist, klicken Sie auf Infofeld ansehen und wechseln Sie zum Tab Labels.

    4. Prüfen Sie für jeden Cluster, der nicht verwendet wird, z. B. nach mehr als einem Tag, ob er ein Cloud Data Fusion-Versionslabel hat. Dies ist ein Hinweis darauf, dass sie von Cloud Data Fusion erstellt wurde.

    5. Klicken Sie auf das Kästchen neben dem Clusternamen und dann auf Löschen.

Cloud Data Fusion-Instanz kann nicht erstellt werden

Beim Erstellen einer Cloud Data Fusion-Instanz kann das folgende Problem auftreten:

Read access to project PROJECT_NAME was denied.

Empfehlung

Deaktivieren und aktivieren Sie die Cloud Data Fusion API, um dieses Problem zu beheben. Erstellen Sie dann die Instanz.

Pipelines schlagen fehl, wenn sie auf Dataproc-Clustern mit sekundären Workern ausgeführt werden

In den Cloud Data Fusion-Versionen 6.8 und 6.9 tritt ein Problem auf, das dazu führt, dass Pipelines fehlschlagen, wenn sie auf Dataproc-Clustern ausgeführt werden, für die sekundäre Worker aktiviert sind:

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.

Empfehlung

Um das Problem zu beheben, führen Sie ein Upgrade auf die Patch-Version 6.8.3.1, 6.9.2.1 oder höher aus. Wenn Sie kein Upgrade durchführen können, entfernen Sie die sekundären Worker-Knoten auf folgende Weise.

Wenn Sie einen sitzungsspezifischen Dataproc-Bereitsteller verwenden, beheben Sie den Fehler mit den folgenden Schritten:

  1. Rufen Sie die Pipeline in der Weboberfläche von Cloud Data Fusion auf.
  2. Legen Sie in den Laufzeitargumenten der Pipeline system.profile.properties.secondaryWorkerNumNodes auf 0 fest. Laufzeitargument festlegen.
  3. Klicken Sie auf Speichern.
  4. Wenn Sie einen Namespace verwenden, deaktivieren Sie sekundäre Worker im Namespace:
    1. Klicken Sie auf System Admin > Namespaces und wählen Sie den Namespace aus.
    2. Klicken Sie auf Einstellungen > Bearbeiten.
    3. Legen Sie den Wert für system.profile.properties.secondaryWorkerNumNodes auf 0 fest. Sekundäre Worker in einem Namespace deaktivieren
    4. Klicken Sie auf Speichern und schließen.

Wenn Sie einen vorhandenen Dataproc-Bereitsteller verwenden, beheben Sie den Fehler mit den folgenden Schritten:

  1. Rufen Sie in der Google Cloud Console die Dataproc-Seite Cluster auf.

    Zu den Clustern

  2. Wählen Sie den Cluster aus und klicken Sie auf Bearbeiten.

  3. Geben Sie im Feld Sekundäre Worker-Knoten 0 ein. Sekundäre Worker-Knoten in der Console bearbeiten.

  4. Klicken Sie auf Speichern.