2017-10-10 4 views
0

J'utilise la caisse 1.0.2 qui utilise en interne elasticsearch. Donc, ma question est applicable pour les deux. Pour certaines requêtes, je reçois une exception de coupure de circuit.Est-il possible d'éviter une exception de rupture de circuit en utilisant une mise à l'échelle horizontale?

CircuitBreakingException: [parent] Les données trop grandes, les données pour [recueillir: 0] serait plus grande que la limite de [11946544332/11.1gb]

Ces requêtes sont principalement du groupe par sur plusieurs colonnes. J'ai des milliards de documents indexés et j'ai 16 Go de RAM alloués comme taille de tas de caisse. J'ai plusieurs nœuds de ce type connectés ensemble dans un cluster. Est-ce que l'ajout de plusieurs noeuds dans le cluster aidera à se débarrasser de cette erreur et mes mêmes requêtes fonctionneront-elles correctement? Ou est-ce que je dois augmenter le tas à 30 Go? Mon inquiétude est quand je l'augmente à 30GB et comme j'ajoute plus de données, un jour cette question frappera encore le disjoncteur. Je voulais donc le résoudre en le redimensionnant horizontalement, c'est-à-dire en ajoutant plus de nœuds. Est-ce que ce sera une décision plus sage?

Répondre

1

Réponse courte: Habituellement la mise à l'échelle horizontale aide.

Votre erreur semble être due à des requêtes de groupe. Les opérations GROUP BY sont exécutées de manière distribuée. Donc, plus de noeuds vont généralement diviser la charge et donc aussi l'utilisation de la mémoire. (Assurez-vous il y a des tessons assez pour qu'ils répartis entre tous les nœuds)

Il y a un hic cependant: Finalement, les données doivent être fusionnées ensemble sur le nœud que vous avez envoyé la requête initiale. Ceci est généralement correct car les données arrivent pré-agrégées, mais si la cardinalité est trop élevée (par exemple, GROUP BY sur une clé primaire ), l'ensemble de données entier doit entrer en mémoire sur ce nœud coordinateur .

Si vos noeuds ont assez de mémoire pour aller jusqu'à 30 Go (avec avoir encore assez pour de rechange pour le cache du système de fichiers), je personnellement tendance à augmenter la taille de la pile d'abord, avant d'ajouter de nouveaux nœuds.

Mise à jour: Les versions récentes (2.1.X) contiennent également quelques corrections concernant le comportement du disjoncteur. Donc, s'il est possible de mettre à jour cela serait également recommandé.

Update2:

Notez qu'il existe différents cas où peut déclencher un disjoncteur de circuit. Dans votre cas, il est causé par un groupe en utilisant beaucoup de mémoire. Mais il peut aussi être déclenché si une seule requête est trop grande. Par exemple si la taille en vrac est trop grande. Dans ce cas, plus de nœuds n'aideraient pas. Vous devriez réduire la taille en vrac .

+0

Merci pour votre réponse. Je pense comment y parvenir dans mon cas. – vinayakshukre