2017-07-14 2 views
0

Nous essayons d'implémenter la fonction Window dans spark. Spark reçoit des données via Kafka (ayant 5 partitions) et nous utilisons Spark Java DStream pour le traitement. Une fois qu'une donnée séparée par une virgule de kafka est mappée à un objet dans Spark, nous créons alors une fenêtre de 20 sec, qui glisse à 1 sec. Sur cette Java DStream nous comptons et imprimons la sortie (en fait nous voulons faire plus de traitement mais pour la simplicité, seul count est appliqué). Tout fonctionne bien jusqu'à ce qu'un pic survienne dans le temps de traitement, ce qui prend environ 40 secondes pour le traitement d'une tâche et l'afficher, nous avons une longue file d'attente. Détails du cluster: - 3 noeud grappe - ayant chacune des 45 noyaux (total 135 Cores) - ayant chacune 256 GB RAM configuration testé: installation 1: - - 5 partitions Kafka - 20 Fenêtre Sec, glissant à 1 sec - 9 Executors par noeud (total 27 Executors) - Allouer 10 GB pour chaque exécuteur Configuration 2: - - 5 partitions Kafka - 20 fenêtre sec, glissant à 1 sec - Executors par noeud (total 135 Executors) - Attribution F t o chaque exécuteur Setup 3: - - 5 partitions Kafka - 20 Fenêtre Sec, glissant à 1 Sec - Executors par noeud (Total 45 Executors) - Allouer GB à chaque exécuteur Setup 4: - - 5 partitions Kafka - Sec fenêtre, coulissant à 1 Sec - 9 exécuteurs par nœud (total 27 Huissiers) - Allouer 10 Go à chaque exécuteur Configuration 5: - (Ceci est notre scénario réel) - Partition Kafka s - Sec Fenêtre, coulissant à 1 Sec - 9 Executors par noeud (Total 27 Executors) - Allouer 10 GB pour chaque exécuteurLa fonction de fenêtre dans Spark Dstream entraîne de longues tâches en attente

Dans toutes les configurations, à un moment donné du traitement prend trop de temps (près de 40 secondes dans la majorité des problèmes de traitement). Ce sera génial si quelqu'un a une solution ou une suggestion de changement de paramètre.

Répondre

0

Vous pouvez activer la contre-pression si vous ne souhaitez pas que la file d'attente se crée. Cela se fait en plaçant le spark.streaming.backpressure.enabled à true et c'est disponible depuis spark 1.5 Autre que cela, il est important de comprendre à quel rythme les données sont produites par les producteurs et si vous avez suffisamment de ressources pour traiter les données à cette taux. Spark-UI vous donnera quelques idées à ce sujet. D'autres facteurs sont à prendre en compte, tels que l'utilisation d'une approche basée sur le récepteur ou kafka-direct, avec ou sans réplication, avec ou sans point de contrôle, etc.

+0

Le taux de production de données est de 10k/seconde. messages de kafka. – kadsank

+0

Utilisez-vous l'approche basée sur le récepteur. Si vous êtes alors vous parallélisez les récepteurs. Checkpointing ralentit considérablement les choses, donc si vous pouvez l'éviter, je le recommande. Spark-UI vous donnera des informations sur les goulots d'étranglement. spark-lint est un autre outil qui peut vous montrer l'utilisation du cluster. – sparker

+0

Nous utilisons l'approche '.createDirectStream'. En cela, les partitions kafka sont mappées bi-univoques pour susciter l'intérêt des consommateurs. – kadsank