2 votes

Accumulation d'éléments dans la sous-tâche GroupByKey lors de l'écriture dans le faisceau Apache BigQuery v2.0

J'implémente un pipeline de flux de données qui lit les messages de Pubsub et écrit les TableRows dans BigQuery (BQ) en utilisant Apache Beam SDK 2.0.0 pour Java.

Il s'agit de la partie connexe du code :

 tableRowPCollection
            .apply(BigQueryIO.writeTableRows().to(this.tableId)
                .withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_NEVER)
                .withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_APPEND));

Ce code génère un groupe de tâches sous le capot dans le pipeline Dataflow. L'une de ces tâches est le GroupByKey. Cette tâche accumule des éléments dans le pipeline comme on peut le voir dans cet écran d'impression : Image d'accumulation des éléments GBK. Après avoir lu la documentation, je pense que ce problème est lié à la configuration de la fenêtre. Mais je n'ai pas trouvé de moyen de modifier la configuration de la fenêtre puisqu'elle est implicitement créé par Attribution de la fenêtre à l'intérieur de la tâche Reshuffle.

Existe-t-il un moyen de définir les paramètres de la fenêtre et/ou d'attacher des déclencheurs à cet implicite ? Fenêtre ou dois-je créer mon propre DoFn qui insère un TableRow dans BQ ?

Merci d'avance !


[Mise à jour]

J'ai laissé le pipeline fonctionner pendant un jour environ et après que le GroupByKey La sous-tâche est devenue plus rapide et les nombres d'éléments entrants et sortants se rapprochaient les uns des autres (parfois étaient les mêmes). En outre, j'ai également remarqué que la Watermark se rapproche de la date actuelle et augmente plus rapidement. Le "problème" était donc résolu.

0voto

Ben Chambers Points 4802

Il n'y a pas d'attente introduite par le Reshuffle dans l'évier de BigQuery. Il est plutôt utilisé pour créer les lots de lignes à écrire dans BigQuery. Le nombre d'éléments qui sortent du GroupByKey est plus petit car chaque élément de sortie représente un lot (ou groupe) d'éléments d'entrée.

Vous devriez être en mesure de voir le nombre total d'éléments qui sortent en tant que sortie de la fonction ExpandIterable (la sortie de la Reshuffle ).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X