Résoudre les problèmes liés aux pipelines par lot Cloud Data Fusion

Cette page explique comment résoudre les problèmes liés aux pipelines par lot Cloud Data Fusion.

Erreur de pipeline : fichier texte occupé

L'erreur suivante se produit lorsque vous exécutez un pipeline par lot, ce qui entraîne son échec :

error=26, Text file busy

Pour résoudre ce problème, configurez un déclencheur qui relance automatiquement un pipeline en cas d'échec.

  1. Arrêtez le pipeline.
  2. Vous devez créer un déclencheur. Dans ce cas, lorsque vous sélectionnez un événement à exécuter, choisissez Échec. Pour en savoir plus, consultez Créer un déclencheur entrant sur un pipeline en aval.
  3. 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 jobs dans les états Starting, Provisioning ou Running. Par conséquent, les pipelines ne peuvent pas être arrêtés via l'interface Web ni les appels d'API. Lorsque vous exécutez de nombreux pipelines simultanément, l'interface Web peut devenir lente ou ne plus répondre. Ce problème se produit en raison de plusieurs requêtes d'UI envoyées au gestionnaire HTTP dans le backend.

Pour résoudre ce problème, contrôlez le nombre de nouvelles requêtes à l'aide du contrôle du flux Cloud Data Fusion.

Délai de connexion SSH expiré lors de l'exécution d'un pipeline

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)

Pour résoudre ce problème, procédez comme suit :

  • Vérifiez si une règle de pare-feu est manquante (généralement le port 22). Pour créer une règle de pare-feu, consultez Configuration réseau du cluster Managed Service for Apache Spark.
  • Vérifiez que l'application des règles Compute Engine autorise la connexion entre votre instance Cloud Data Fusion et le cluster Managed Service pour Apache Spark.

Code de réponse : 401. Erreur : erreur inconnue

L'erreur suivante se produit lorsque vous exécutez un pipeline par lot :

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

Pour résoudre ce problème, vous devez attribuer le rôle Exécuteur Cloud Data Fusion (roles/datafusion.runner) au compte de service utilisé par Managed Service for Apache Spark.

É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

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 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, attribuez 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 É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

Il est possible qu'un pipeline ne s'arrête pas 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 par la directive en cas d'échec qui n'est pas géré autrement. Si la directive utilise déjà l'API emitError, le seuil d'erreur n'est pas activé.

Pour concevoir un pipeline qui échoue lorsqu'un certain seuil est atteint, utilisez la directive FAIL.

Chaque fois que la condition transmise à la directive FAIL est remplie, elle est comptabilisée dans le seuil d'erreur. Le pipeline échoue une fois le seuil atteint.

Supprimer un cluster éphémère Managed Service pour Apache Spark

Lorsque Cloud Data Fusion crée un cluster éphémère Managed Service for Apache Spark 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é : effectuez une mise à niveau vers la dernière version de Cloud Data Fusion pour assurer la maintenance appropriée du cluster.

Définir la durée maximale d'inactivité

Pour résoudre ce problème, configurez l'option Max Idle Time. Cela permet au service géré pour Apache Spark 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 version 6.4 et ultérieure.

Recommandation : Pour les versions antérieures à la version 6.6, définissez manuellement Max Idle Time sur 30 minutes ou plus.

Supprimer des 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 :

  1. Obtenez l'ID de chaque projet dans lequel les clusters ont été créés :

    1. Dans les arguments d'exécution du pipeline, vérifiez si l'ID du projet Managed Service pour Apache Spark est personnalisé pour l'exécution.

      Vérifier si l'ID du projet Dataproc est personnalisé pour l'exécution

    2. Si aucun ID de projet Managed Service for Apache Spark n'est spécifié explicitement, déterminez le provisionneur utilisé, puis recherchez un ID de projet :

      1. Dans les arguments d'exécution du pipeline, vérifiez la valeur system.profile.name.

        Obtenir le nom du provisionneur dans les arguments d'exécution

      2. Ouvrez les paramètres du provisionneur et vérifiez si l'ID du projet Managed Service pour Apache Spark 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 est exécutée est utilisé.

  2. Pour chaque projet :

    1. Ouvrez le projet dans la console Google Cloud et accédez à la page Clusters du service géré pour Apache Spark.

      accéder aux clusters

    2. Triez les clusters par date de création, du plus ancien au plus récent.

    3. Si le panneau d'informations est masqué, cliquez sur Afficher le panneau d'informations, puis accédez à l'onglet Libellés.

    4. Pour chaque cluster qui n'est pas utilisé (par exemple, si plus d'un jour s'est écoulé), vérifiez s'il comporte un libellé de version Cloud Data Fusion. Cela indique qu'il a été créé par Cloud Data Fusion.

    5. Cochez la case à côté du nom du cluster, puis cliquez sur Supprimer.

Échec des pipelines exécutés sur des clusters Managed Service pour Apache Spark avec des nœuds de calcul primaires ou secondaires

Dans les versions 6.8 et 6.9 de Cloud Data Fusion, un problème se produit et entraîne l'échec des pipelines s'ils s'exécutent sur des clusters Managed Service for Apache Spark :

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.

Pour résoudre ce problème, mettez à niveau vers la révision du correctif 6.8.3.1, 6.9.2.1 ou ultérieure.

Le plug-in Cloud Storage échoue par intermittence avec une expression régulière sur Managed Service pour Apache Spark 2.0

Il est possible que les pipelines échouent par intermittence dans Cloud Data Fusion version 6.10.1 lorsque le plug-in Cloud Storage utilise un modèle d'expression régulière * dans le chemin d'accès et que l'environnement d'exécution est Managed Service for Apache Spark 2.0.

Pour résoudre ce problème, effectuez l'une des opérations suivantes :

  • Mettez à jour l'image Managed Service pour Apache Spark vers la version 2.1 ou ultérieure.
  • Rétablissez une version antérieure du plug-in Cloud Storage.
  • Augmentez la mémoire allouée à l'exécuteur Managed Service pour Apache Spark.

Échec des pipelines avec NoSuchMethodError sur Managed Service pour Apache Spark 2.2

Dans Cloud Data Fusion version 6.10.1.1 et ultérieures, les pipelines peuvent échouer avec l'erreur suivante lorsqu'ils sont exécutés sur Managed Service for Apache Spark 2.2 :

java.lang.NoSuchMethodError: 'org.apache.spark.sql.catalyst.encoders.ExpressionEncoder
org.apache.spark.sql.catalyst.encoders.RowEncoder.apply(org.apache.spark.sql.types.StructType)'

Pour résoudre ce problème, effectuez l'une des opérations suivantes :

Le plug-in "Multiple database tables" échoue si le nom de référence contient des espaces

Dans Cloud Data Fusion version 6.10.1 et ultérieures, les pipelines utilisant la source par lot "Tables de base de données multiples" peuvent échouer lorsque le champ Nom de référence contient des espaces.

Pour résoudre ce problème, mettez à jour le plug-in "Multiple database tables" (Plusieurs tables de base de données) vers la version 1.4.1 ou ultérieure depuis le Hub. La version mise à jour n'autorise pas les espaces dans le champ Nom de référence.