2015-10-21 1 views
3

Nous créons un système composé de plusieurs applications Spark Streaming avec chaque application ayant plusieurs récepteurs. Autant que j'ai compris, chaque récepteur a besoin de son propre noyau dans le cluster. Nous avons besoin de plusieurs récepteurs pour accueillir les pics, mais nous n'en avons pas besoin tout le temps. Les applications sont assez petites et ne font qu'une seule tâche afin de les (re) soumettre sur le cluster sans distraire les autres tâches &.Utilisation principale des applications Spark Streaming

1) En supposant que nous ayons 5 tâches avec 5 récepteurs chacune, nous aurions besoin d'au moins 25 cœurs dans le cluster seulement pour que les récepteurs puissent fonctionner + les cœurs pour le traitement. Est-ce correct?

2) Y a-t-il une possibilité de faire une allocation de ressources plus dynamique ou est-ce qu'un noyau est strictement lié à un récepteur?

3) J'ai jeté un coup d'oeil sur le serveur de repos d'étincelles qui offre la possibilité de partager le contexte d'étincelle sur différents travaux. Pouvez-vous penser à avoir un SparkStreamingContext pour tous les Jobs (~ 100)?

Nous exécutons le cluster en mode autonome avec un cluster Cassandra sur les mêmes noeuds.

Répondre

2
  1. Si vous exécutez 5 applications Spak distinctes, chacune ayant 5 récepteurs, oui, l'ingestion de données consommera 5x5 = 25 cœurs. Cependant, avez-vous examiné les approches sans récepteur? (§ 2 de https://spark.apache.org/docs/latest/streaming-kafka-integration.html)
  2. Spark a dynamic allocation capabilities sur le fil et on Mesos, mais cela concerne les exécuteurs, pas les récepteurs.
  3. La mise en pipeline de données dans une (des) application (s) plus petite semble logique: si vous avez environ 100 applications qui font chacune des ETL simples, il est probable que démarrer et scander ces applications prend plus de temps que de les exécuter. faire. Je pourrais me tromper là-dessus, mais alors vous ne seriez pas plus précis de ce qu'ils font (peut-être dans une autre question de SO, après que vous ayez évalué un peu?)
+0

merci pour la réponse. 1. L'approche directe serait une option, si nous utilisions Kafka ;-) 2. J'ai appris (après avoir demandé ici) que l'allocation dynamique n'est pas encore supportée pour Spark Streaming. Au moins pas la mise à l'échelle automatique, mais seulement en l'implémentant soi-même. 3. Nous utilisons plusieurs threads dans une seule application Spark. Cela semble ok jusqu'à présent, mais nous avons encore quelques problèmes avec les frais généraux de démarrage des tâches. Cela nécessite une certaine optimisation. – mniehoff