Fehlerbehebung

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

In Cloud Data Fusion können viele gleichzeitig ausgeführte Batchpipelines die Instanz belasten und dazu führen, dass 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, weil mehrere UI-Anfragen an den HTTP-Handler im Back-End gestellt wurden.

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 Netzwerkkonfiguration von Dataproc-Clustern.
  • 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:

  • Weisen Sie zum Ausführen eines BigQuery-Jobs die Rolle "BigQuery-Jobnutzer" (roles/bigquery.jobUser) zu.

  • Wenn Sie ein BigQuery-Dataset lesen möchten, weisen Sie die Rolle "BigQuery-Datenbetrachter" (roles/bigquery.dataViewer) zu.

  • Zum Erstellen eines temporären Buckets weisen Sie die Rolle "Storage-Administrator" (roles/storage.admin) zu.

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

Weitere Informationen finden Sie in der Dokumentation zur Fehlerbehebung für das Plug-in (Fehlerbehebung bei Google BigQuery-Multitabellensenken).

Pipeline stoppt nicht am Fehlergrenzwert

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

Der Fehlerschwellenwert 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 bei Erreichen eines bestimmten Schwellenwerts fehlschlägt.

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 den Oracle-Batchquellversionen 1.9.0, 1.8.3 und früheren Versionen 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 einem Upgrade auf die Versionen 1.9.1, 1.8.5 und 1.8.4 möglicherweise nicht, 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-Batchquell-Plug-ins ordnet den Oracle-Datentyp NUMBER, der ohne Genauigkeit und Skalierung 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

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

Nach dem Upgrade wird der Oracle-Datentyp NUMBER, der ohne Genauigkeit und Skalierung definiert wurde, dem CDAP-Datentyp string zur Laufzeit 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 entweder oder erwarten Sie, dass er Stringdaten verbraucht.

Wenn Sie das Risiko eines möglichen Datenverlusts aufgrund von Rundungsfehlern kennen, aber den Oracle-Datentyp NUMBER ohne Genauigkeit und Skalierung als CDAP-Datentyp decimal(38,0) verwenden 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 Referenz zu Oracle-Batchquellen.

Sitzungsspezifischen Dataproc-Cluster löschen

Wenn Cloud Data Fusion während der Bereitstellung der Pipelineausführung 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 löscht Dataproc Cluster automatisch, 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 30 Minuten oder mehr 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 ist

    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 Pipeline-Laufzeitargumenten den Wert system.profile.name.

        Den Namen des Bereitstellers in den Laufzeitargumenten abrufen

      2. Öffnen Sie die Einstellungen für den Bereitsteller 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. Für jedes Projekt gilt:

    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 Erstellungsdatum, beginnend mit dem ältesten Datum.

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

    4. Prüfen Sie für jeden nicht verwendeten Cluster, z. B. seit mehr als einem Tag, ob er ein Cloud Data Fusion-Versionslabel hat. Dies weist darauf hin, 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

Um dieses Problem zu beheben, deaktivieren Sie die Cloud Data Fusion API und aktivieren Sie sie dann wieder. Erstellen Sie dann die Instanz.

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

In den Versionen 6.8 und 6.9 von Cloud Data Fusion tritt ein Problem auf, durch das 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

Entfernen Sie die sekundären Worker-Knoten auf folgende Weise, um das Problem zu beheben.

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

  1. Rufen Sie in der Weboberfläche von Cloud Data Fusion Ihre Pipeline 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 Dataproc-Konsole bearbeiten.

  4. Klicken Sie auf Speichern.