2017-10-03 2 views
1

Ich habe einen Cassandra 2.1 Cluster mit Leveled Compaction Strategie.Cassandra 2.1 beschleunigen Kompaktierung

Basierend auf meiner Berechnung wird dem Cluster der Speicherplatz ausgehen, bevor die Komprimierung automatisch einsetzt, wenn die nächste Ebene erreicht wird. Aus diesem Grund habe ich einen Cron-Job, der jede Woche "nodetool compact" ausführt, um eine vollständige Komprimierung (Hauptkomprimierung) auszuführen, um stoned-bearbeitete Datenpunkte zu entfernen.

Ich bemerkte, dass vollständige Komprimierung sehr wenig CPU/Netzwerkressourcen verbraucht. Bei größeren Datenmengen läuft die vollständige Komprimierung über Tage.

Ich habe versucht, "setcompacutionthroughput" auf höhere Zahl (128 MB/s statt 32 MB/s standardmäßig, sogar versucht, es auf 0 (keine Begrenzung), aber die volle Verdichtungsgeschwindigkeit scheint sich überhaupt nicht zu ändern .

gibt es etwas, ich kann tune es schneller machen Vielen Dank im Voraus

Antwort

0

es gibt nur wenige Fälle, in denen Sie über nodetool compact volle Verdichtung ausgeführt werden soll -. es verursacht, was wahrscheinlich jetzt Sie sehen (ein einzelnes riesige Datendatei, die natürlich niemals mit anderen Stable kompaktiert, auch nicht, wenn andere Löschungen passiert sind)

Sich aus dem Zustand zu erholen ist nicht trivial, aber möglich. Wenn Sie viel CPU/IO übrig haben, können Sie versuchen, von STCS zu LCS zu wechseln, und LeveledCompactionStrategy wird diese riesige Datei natürlich in tausende von winzigen Dateien aufteilen, und wird diese Dateien im Laufe der Zeit aggressiver umschreiben Grabsteine ​​werden viel regelmäßiger verdichtet). Dies ist sehr CPU- und IO-intensiv, also tun Sie es nicht, wenn Sie kurz davor sind, zu kippen. Darüber hinaus werden alle Daten auf der Festplatte für einen kurzen Zeitraum dupliziert, sodass Sie zu diesem Zweck weniger als 50% Speicherplatz benötigen.

Wenn Sie mehr als 50% Festplattenauslastung haben, haben Sie sich in eine Ecke gedrängt, und Sie müssen wahrscheinlich mehr Festplatte vorübergehend hinzufügen, um wiederherzustellen.

+0

Dank Jeff. Ich benutze LCS heute. Es gibt Ersatz-CPU und IO, ich stelle auch sicher, dass die Plattennutzung für die Hauptverdichtung <50% ist. Die Umstellung der Verdichtungsstrategie mag funktionieren - aber die Änderung der Verdichtungsstrategie ist Cluster-weit und führt fast zur Rekompaktierung des gesamten Clusters, wo ich zur Zeit die Verdichtung zwischen den Racks (EC2 AZs) planen kann. Klingt etwas gruselig. Aber nochmal danke, dass du es aufgezeigt hast! –

+0

Nur um es klar zu machen: Sie benutzen jetzt LCS und machen volle Verdichtung? oder hast du LCS auf anderen Tischen? Sie können eine Komprimierungsstrategie pro Knoten mithilfe von JMX implementieren (die Komprimierungsstrategie ist über JMX mithilfe von jconsole oder jmxterm änderbar, sodass Sie sie jeweils um einen Knoten oder um einen AZ gleichzeitig ändern können, wenn Sie dies wünschen aber nicht wollen, dass die IO auf allen Knoten zur gleichen Zeit getroffen wird). Sie können auch eine einzelne Knotenänderung über JMX verwenden, um die Effektivität zu testen. –

+0

Ich benutze jetzt LCS und mache volle Verdichtung. Es ist interessant, diesen JMX-Trick zu lernen. –