Auf dieser Seite wird beschrieben, wie Sie Probleme mit Cloud Data Fusion beheben.
Fehlerbehebung bei Batchpipelines
Gleichzeitige Pipeline hängt
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.
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 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:
Rufen Sie jede Projekt-ID ab, in der die Cluster erstellt wurden:
Prüfen Sie in den Laufzeitargumenten der Pipeline, ob die Dataproc-Projekt-ID für die Ausführung angepasst ist.
Wenn eine Dataproc-Projekt-ID nicht explizit angegeben ist, ermitteln Sie, welcher Bereitsteller verwendet wird, und suchen Sie dann nach einer Projekt-ID:
Prüfen Sie in den Pipeline-Laufzeitargumenten den Wert
system.profile.name
.Ö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.
Für jedes Projekt gilt:
Öffnen Sie das Projekt in der Google Cloud Console und rufen Sie die Dataproc-Seite Cluster auf.
Sortieren Sie die Cluster nach dem Erstellungsdatum, beginnend mit dem ältesten Datum.
Wenn das Infofeld ausgeblendet ist, klicken Sie auf Infofeld ansehen und wechseln Sie zum Tab Labels.
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.
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:
- Rufen Sie in der Weboberfläche von Cloud Data Fusion Ihre Pipeline auf.
- Legen Sie in den Laufzeitargumenten der Pipeline
system.profile.properties.secondaryWorkerNumNodes
auf0
fest. - Klicken Sie auf Speichern.
- Wenn Sie einen Namespace verwenden, deaktivieren Sie sekundäre Worker im Namespace:
- Klicken Sie auf System Admin > Namespaces und wählen Sie den Namespace aus.
- Klicken Sie auf Einstellungen > Bearbeiten.
- Legen Sie den Wert für
system.profile.properties.secondaryWorkerNumNodes
auf0
fest. - Klicken Sie auf Speichern und schließen.
Wenn Sie einen vorhandenen Dataproc-Bereitsteller verwenden, beheben Sie den Fehler mit den folgenden Schritten:
Rufen Sie in der Google Cloud Console die Dataproc-Seite Cluster auf.
Wählen Sie den Cluster aus und klicken Sie auf Bearbeiten
.Geben Sie im Feld Sekundäre Worker-Knoten
0
ein.Klicken Sie auf Speichern.