2
votes

Problème lors de l'exécution de Dataflow

J'obtiens une erreur ci-dessous lors de l'exécution de la tâche de flux de données. J'essaie de mettre à jour ma version de faisceau existante vers 2.11.0 mais j'obtiens une erreur inférieure au moment de l'exécution.

java.lang.IncompatibleClassChangeError: Classe org.apache.beam.model.pipeline.v1.RunnerApi $ StandardPTransforms $ Primitives n'implémente pas l'interface demandée com.google.protobuf.ProtocolMessageEnum à org.apache.beam.runners.core.construction.BeamUrns.getUrn (BeamUrns.java:27) à org.apache.beam.runners.core.construction.PTransformTranslation. (PTransformTranslation.java:58) à org.apache.beam.runners.core.construction.UnconsumedReads $ 1.visitValue (UnconsumedReads.java:49) à org.apache.beam.sdk.runners.TransformHierarchy $ Node.visit (TransformHierarchy.java:666) à org.apache.beam.sdk.runners.TransformHierarchy $ Node.visit (TransformHierarchy.java:649) à org.apache.beam.sdk.runners.TransformHierarchy $ Node.visit (TransformHierarchy.java:649) à org.apache.beam.sdk.runners.TransformHierarchy $ Node.visit (TransformHierarchy.java:649) à org.apache.beam.sdk.runners.TransformHierarchy $ Node.access 600 $ (TransformHierarchy.java:311) à org.apache.beam.sdk.runners.TransformHierarchy.visit (TransformHierarchy.java:245) à org.apache.beam.sdk.Pipeline.traverseTopologiquement (Pipeline.java:458) à org.apache.beam.runners.core.construction.UnconsumedReads.ensureAllReadsConsumed (UnconsumedReads.java:40) à org.apache.beam.runners.dataflow.DataflowRunner.replaceTransforms (DataflowRunner.java:868) à org.apache.beam.runners.dataflow.DataflowRunner.run (DataflowRunner.java:660) à org.apache.beam.runners.dataflow.DataflowRunner.run (DataflowRunner.java:173) à org.apache.beam.sdk.Pipeline.run (Pipeline.java:313) à org.apache.beam.sdk.Pipeline.run (Pipeline.java:299)


9 commentaires

Avez-vous la même exception lors de l'exécution sur le coureur direct?


Salut Rui, oui, il fonctionne bien avec un coureur direct. Je reçois cette erreur uniquement lors de l'exécution avec DataflowRunner


Salut Rui, je viens d'ajouter un point de plus ici - mon code fonctionne bien jusqu'à la version 2.5.0 de Beam. Il se brise dès que je le change en 2.6.0 ou en versions suivantes avec la même erreur.


Balisage @RuiWang pour notification


Clarification - lorsque vous dites «mettre à jour votre pipeline», vous voulez dire une mise à jour sur place du pipeline en cours d'exécution, n'est-ce pas?


@KennKnowles, j'ai un travail de faisceau qui diffuse des données depuis Google PubSub et fonctionne sur la version 2.2.0. Puisque la version 2.2.0 ne sera plus prise en charge, j'ai essayé de mettre à jour le faisceau vers la 2.11.0 mais j'obtiens l'erreur ci-dessus. La mise à jour du pipeline jusqu'à ce que 2.5.0 fonctionne correctement, 2.6.0 et les versions suivantes cassent le code. J'espère que cette clarification vous aidera. S'il vous plaît laissez-moi savoir si d'autres questions


@Ravi Vous obtenez cette erreur sur l'ordinateur que vous utilisez pour lancer / mettre à jour, pas le travailleur, non?


@KennKnowles - Oui, c'est exact. Je l'obtiens lorsque j'essaie de lancer à partir de mon système et d'exécuter le pipeline sur Google Cloud.


Pouvez-vous s'il vous plaît montrer ce qu'il y a sur votre chemin de classe?


3 Réponses :


1
votes

Cela signifie généralement que la version de com.google.protobuf: protobuf-java avec laquelle Beam a été compilé ne correspond pas à la version au moment de l'exécution. Le code de votre pipeline dépend-il également des tampons de protocole?

MISE À JOUR: J'ai déposé https://issues.apache.org/jira/ parcourir / BEAM-6839 pour le suivre. Ce n'est pas prévu.


3 commentaires

Non, mon code de pipeline n'a pas de tampons de protocole.


Voir la mise à jour. Je remarque également que la version 2.7 et au-delà ont mis à jour protobuf par rapport à la version 2.5 et inférieure. Avez-vous recompilé ou exécutez-vous les mêmes binaires avec de nouvelles dépendances?


Pouvez-vous répondre sur le bogue avec quelques étapes à reproduire si vous pouvez les partager?



0
votes

Je n'ai pas assez de représentants pour laisser un commentaire, mais j'ai rencontré ce problème et j'ai découvert plus tard que mon problème était que j'avais différentes versions de faisceaux dans mon pom.xml. Certains avaient 2,19 et d'autres 2,20.

Je ferais une recherche rapide de vos versions dans le fichier pom ou gradle pour m'assurer qu'elles sont toutes identiques.


0 commentaires

0
votes

Cela peut être dû à des dépendances incompatibles. J'ai réussi à mettre à niveau beam de 2.2.0 à 2.20.0 en mettant à jour les dépendances en même temps.

beam.version: 2.20.0
guava.version: 29.0-jre
bigquery.version: v2-rev20191211-1.30.9
google-api-client.version: 1.30.9
google-http-client.version: 1.34.0
pubsub.version: v1-rev20200312-1.30.9


0 commentaires