Cette page explique comment résoudre les problèmes liés à Cloud Data Fusion.
Résoudre les problèmes liés aux pipelines de traitement par lot
Les conseils suivants s'appliquent aux pipelines de traitement par lot.
Erreur de pipeline: fichier texte occupé
L'erreur suivante se produit lorsque vous exécutez un pipeline de traitement par lot, ce qui entraîne son échec:
error=26, Text file busy
Recommandation
Pour résoudre ce problème, configurez un déclencheur qui réessaie automatiquement un pipeline en cas d'échec.
- Arrêtez le pipeline.
- Créez un déclencheur. Dans ce cas, lorsque vous sélectionnez un événement à exécuter, choisissez Échec. Pour en savoir plus, consultez la section Créer un déclencheur entrant sur un en aval pipeline.
- Démarrez le pipeline.
Le pipeline simultané est bloqué
Dans Cloud Data Fusion, l'exécution de nombreux pipelines par lot simultanés peut mettre à rude épreuve l'instance, ce qui peut entraîner le blocage des tâches dans les états Starting
, Provisioning
ou Running
. Par conséquent, les pipelines ne peuvent pas être arrêtés via l'interface Web ni via des appels d'API. Lorsque vous exécutez plusieurs pipelines simultanément, l'interface Web peut devenir lente ou ne pas répondre. Ce problème se produit en raison de plusieurs requêtes d'interface utilisateur envoyées au gestionnaire HTTP dans le backend.
Recommandation
Pour résoudre ce problème, contrôlez le nombre de nouvelles requêtes à l'aide du contrôle de flux Cloud Data Fusion, disponible dans les instances exécutées à partir de la version 6.6.
Expiration du délai de connexion SSH lorsqu'un pipeline en cours d'exécution
L'erreur suivante se produit lorsque vous exécutez un pipeline par lot :
`java.io.IOException: com.jcraft.jsch.JSchException:
java.net.ConnectException: Connection timed out (Connection timed out)`
Recommandation
Pour résoudre l'erreur, vérifiez les problèmes suivants :
- Recherchez une règle de pare-feu manquante (généralement le port 22). Pour créer une règle de pare-feu, consultez la section Configuration du réseau du cluster Dataproc.
- Vérifiez que l'outil d'application de Compute Engine autorise la connexion entre votre instance Cloud Data Fusion et le cluster Dataproc.
Code de réponse: 401. Erreur : erreur inconnue
L'erreur suivante se produit lorsque vous exécutez un pipeline de traitement par lot:
`java.io.IOException: Failed to send message for program run program_run:
Response code: 401. Error: unknown error`
Recommandation
Pour résoudre cette erreur, vous devez accorder le rôle d'exécuteur Cloud Data Fusion (roles/datafusion.runner
) au compte de service utilisé par Dataproc.
Échec du pipeline avec le plug-in BigQuery avec l'erreur Access Denied
Il existe un problème connu où un pipeline échoue et renvoie une erreur Access Denied
lors de l'exécution de tâches BigQuery. Cela affecte les pipelines qui utilisent les plug-ins suivants:
- Sources BigQuery
- Récepteurs BigQuery
- Récepteurs multi-tables BigQuery
- Pushdown de transformation
Exemple d'erreur dans les journaux (peut varier en fonction du plug-in que vous utilisez) :
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"
}
Dans cet exemple, PROJECT_ID correspond à l'ID de projet que vous avez spécifié dans le plug-in. Le compte de service du projet spécifié dans le plug-in n'est pas autorisé à effectuer au moins l'une des opérations suivantes:
- Exécuter une tâche BigQuery
- Lire un ensemble de données BigQuery
- Créer un bucket temporaire
- Créer un ensemble de données BigQuery
- Créer la table BigQuery
Recommandation
Pour résoudre ce problème, accordez les rôles manquants au projet (PROJECT_ID) que vous avez spécifié dans le plug-in :
Pour exécuter une tâche BigQuery, attribuez le rôle d'utilisateur de tâche BigQuery (
roles/bigquery.jobUser
).Pour lire un ensemble de données BigQuery, attribuez le rôle de lecteur de données BigQuery (
roles/bigquery.dataViewer
).Pour créer un bucket temporaire, accordez le rôle "Administrateur de l'espace de stockage" (
roles/storage.admin
).Pour créer un ensemble de données ou une table BigQuery, attribuez le rôle d'éditeur de données BigQuery (
roles/bigquery.dataEditor
).
Pour en savoir plus, consultez la documentation de dépannage du plug-in (Dépannage de récepteur Google BigQuery multi-tables).
Le pipeline ne s'arrête pas au seuil d'erreur
Un pipeline peut ne pas s'arrêter après plusieurs erreurs, même si vous définissez le seuil d'erreur sur 1
.
Le seuil d'erreur est destiné à toutes les exceptions générées à partir de la directive en cas d'échec non géré. Si la directive utilise l'API emitError, le seuil d'erreur n'est pas activé.
Recommandation
Pour concevoir un pipeline qui échoue lorsqu'un certain seuil est atteint, utilisez
Directive FAIL
.
Chaque fois que la condition transmise à la directive FAIL
est satisfaite, elle est comptabilisée dans le seuil d'erreur, et le pipeline échoue une fois le seuil atteint.
Le plug-in de source par lot Oracle convertit NUMBER
en string
Dans les versions de source par lot Oracle 1.9.0, 1.8.3 et antérieures, le fichier Oracle NUMBER
avec une précision et une échelle indéfinies, est mappée sur la couche CDAP
Type de données decimal(38,0)
.
Les versions 1.9.1, 1.8.4 et 1.8.5 du plug-in sont rétrocompatibles, et les pipelines
qui utilisent des versions antérieures peuvent ne
pas fonctionner après la mise à niveau vers les versions 1.9.1,
1.8.5 et 1.8.4, si une étape en aval du pipeline repose sur le résultat
de la source, car le schéma de sortie a été modifié. Lorsqu'un schéma de sortie est défini pour le type de données NUMBER
Oracle défini sans précision et sans échelle dans la version précédente du plug-in, après la mise à niveau vers les versions 1.9.1, 1.8.5 ou 1.8.4, le plug-in de source de lot Oracle génère l'erreur de non-concordance de schéma suivante pour les types : 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.
Les versions 1.9.1, 1.8.5 et 1.8.4 fonctionnent avec un schéma de sortie CDAP
Type de données string
pour le type de données Oracle NUMBER
défini sans précision et
à grande échelle. Si un type de données NUMBER
Oracle est défini sans précision et sans échelle dans le schéma de sortie source Oracle, il est déconseillé d'utiliser l'ancienne version du plug-in Oracle, car cela peut entraîner des erreurs d'arrondi.
Ce cas particulier se produit lorsque vous utilisez une macro pour le nom de la base de données, le nom du schéma ou le nom de la table et si vous n'avez pas spécifié manuellement un schéma de sortie. Le schéma
est détectée et mappée au moment de l'exécution. L'ancienne version du lot Oracle
le plug-in source mappe le type de données NUMBER
Oracle défini sans précision.
vers le type de données CDAP decimal(38,0)
, tandis que les versions 1.9.1, 1.8.5 et
À partir de la version 1.8.4, les types de données sont mappés avec string
au moment de l'exécution.
Recommandation
Pour résoudre le problème de perte de précision possible lorsque vous travaillez avec des types de données NUMBER
Oracle avec une précision et une échelle non définies, mettez à niveau vos pipelines pour qu'ils utilisent les versions 1.9.1, 1.8.5 ou 1.8.4 du plug-in de source de lot Oracle.
Après la mise à niveau, le type de données Oracle NUMBER
défini sans précision et échelle est mappé sur le type de données CDAP string
au moment de l'exécution. Si vous avez une étape ou un récepteur en aval qui utilise le type de données decimal
CDAP d'origine (auquel le type de données NUMBER
Oracle défini sans précision et échelle a été mappé), mettez-le à jour ou attendez-vous à ce qu'il consomme des données de chaîne.
Si vous comprenez le risque de perte de données possible en raison d'erreurs d'arrondi, mais que vous choisissez d'utiliser le type de données NUMBER Oracle défini sans précision et échelle en tant que type de données decimal(38,0)
CDAP, déployez la version 1.8.6 du plug-in Oracle (pour Cloud Data Fusion 6.7.3) ou la version 1.9.2 (pour Cloud Data Fusion 6.8.1) à partir du hub, puis mettez à jour les pipelines pour les utiliser à la place.
Pour en savoir plus, consultez les Documentation de référence sur la source par lot Oracle
Supprimer un cluster Dataproc éphémère
Lorsque Cloud Data Fusion crée un cluster Dataproc éphémère lors du provisionnement de l'exécution du pipeline, le cluster est supprimé une fois l'exécution du pipeline terminée. Dans de rares cas, la suppression du cluster échoue.
Fortement recommandé: Passez à la version la plus récente de Cloud Data Fusion pour assurer une maintenance adéquate du cluster.
Définir la durée maximale d'inactivité
Pour résoudre ce problème, configurez l'option Max Idle Time
. Cela permet à Dataproc de supprimer automatiquement les clusters, même si un appel explicite à la fin du pipeline échoue.
Max Idle Time
est disponible dans Cloud Data Fusion 6.4 et versions ultérieures.
Recommandé: Pour les versions antérieures à 6.6, définissez Max Idle Time
manuellement sur 30.
minutes ou plus.
Supprimer les clusters manuellement
Si vous ne pouvez pas mettre à niveau votre version ni configurer l'option Max Idle Time
, supprimez plutôt manuellement les clusters obsolètes :
Obtenez l'ID de chaque projet dans lequel les clusters ont été créés :
Dans les arguments d'exécution du pipeline, vérifiez si le L'ID de projet Dataproc est personnalisé pour l'exécution.
Si un ID de projet Dataproc n'est pas spécifié explicitement, déterminez le provisionneur utilisé, puis recherchez un ID de projet :
Dans les arguments d'exécution du pipeline, vérifiez le
system.profile.name
.Ouvrez les paramètres de l'approvisionneur et vérifiez si L'ID du projet Dataproc est défini. Si le paramètre n'est pas présent ou si le champ est vide, le projet dans lequel l'instance Cloud Data Fusion s'exécute est utilisé.
Pour chaque projet :
Ouvrez le projet dans la console Google Cloud et accédez à Page Clusters de Dataproc.
Triez les clusters par date de création, de la plus ancienne à le plus récent.
Si le panneau d'informations est masqué, cliquez sur Afficher le panneau d'informations, puis accédez à l'onglet Libellés.
Pour chaque cluster qui n'est pas utilisé (par exemple, plus d'une journée comporte vérifiez s'il est associé à un libellé de version Cloud Data Fusion. Cela indique qu'il a été créé par Cloud Data Fusion.
Cochez la case à côté du nom du cluster, puis cliquez sur Supprimer.
Impossible de créer une instance Cloud Data Fusion
Lors de la création d'une instance Cloud Data Fusion, vous pouvez rencontrer les le problème suivant:
Read access to project PROJECT_NAME was denied.
Recommandation
Pour résoudre ce problème, désactivez et réactivez l'API Cloud Data Fusion. Créez ensuite l'instance.
Les pipelines échouent lorsqu'ils sont exécutés sur des clusters Dataproc avec des nœuds de calcul principaux ou secondaires
Dans les versions 6.8 et 6.9 de Cloud Data Fusion, un problème entraîne l'échec des pipelines s'ils s'exécutent sur des clusters Dataproc :
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.
Recommandation
Pour résoudre le problème,
mise à niveau vers le correctif
révision 6.8.3.1
, 6.9.2.1
ou ultérieure.