HBase
 sql >> Datenbank >  >> NoSQL >> HBase

HBase:5 Tipps für die Ausführung mit wenig Arbeitsspeicher EC2

Wenn Sie auf EC2 laufen, können Sie oft nicht gewinnen, wenn es um Instance-Typen geht. Einer der kostengünstigeren verfügbaren Typen ist der c1.xlarge. Es verfügt über genügend CPU, um Komprimierungen, eine anständige Menge an Festplatten und hohe Netzwerk-E / A zu bewältigen. Wir haben jedoch festgestellt, dass der relativ geringe Arbeitsspeicher von 7 GB auf dem c1.xlarge häufig zu Stabilitätsproblemen in HBase-Clustern mit hoher Parallelität führt. Es gibt zwar teurere Optionen, aber dieses HBase-Lernprogramm hilft Ihnen dabei, das Beste aus Ihren c1.xlarge-RegionServern herauszuholen.

1. Reduzieren Sie die Anzahl der Regionen pro RegionServer

Idealerweise sollten Sie weniger als 100 Regionen pro RegionServer haben . Der Speicher ist für die Verwendung durch alle aktiven Regionen aufgeteilt, und jede Region fügt (standardmäßig) 2 MB Speicher für das MSLAB hinzu. Das Reduzieren dieser Zahl trägt dazu bei, dass die Dinge reibungsloser ablaufen, und das nicht nur vom Standpunkt der Erinnerung.

2. Speicher von anderen Diensten stehlen

Sie sollten definitiv keinen TaskTracker mit Ihrem RegionServer auf diesen Instance-Typen ausführen, aber Sie führen höchstwahrscheinlich einen lokalen DataNode aus. Eine typische Konfiguration erfordert 1 GB Speicher für einen DataNode, aber wir haben festgestellt, dass Sie in vielen Fällen nicht so viel benötigen. Überprüfen Sie Ihre Messwerte, bevor Sie dies einführen, aber wir waren vollkommen sicher, den DataNode-Heap auf 400 MB zu reduzieren . Dieser schöne 624-MB-Block wird HBase helfen, ein wenig weiter zu kommen.

3. Optimieren oder deaktivieren Sie MSLAB

Wenn Sie nach dem Diebstahl von Speicher und dem Zurückschneiden von Regionen immer noch Probleme haben, können Sie noch einen Schritt weiter gehen. Wie ich bereits erwähnt habe, fügt die MSLAB-Funktion standardmäßig 2 MB Heap-Overhead für jede Region hinzu. Sie können diesen Puffer verringern mit hbase.hregion.memstore.mslab.chunksize . Je niedriger Sie gehen, desto weniger effektiv ist es, aber desto geringer ist auch der Speicheraufwand. Deaktivieren Sie es vollständig mit hbase.hregion.memstore.mslab.enabled .

4. Gehen Sie beim Caching und Batching aggressiv vor

Caching (Scan#setCaching(int) ) und Stapelverarbeitung (Scan#setBatch(int) ) eignen sich hervorragend, um die Auswirkung der Netzwerklatenz auf große Scans zu begrenzen. Leider benötigen sie auch mehr Speicher sowohl auf der Client- als auch auf der Serverseite. Denken Sie an die Kompromisse bei der Geschwindigkeit, aber erfreuen Sie sich an etwas mehr Stabilität, indem Sie diese herunterregeln , so nahe wie nötig an einem Wert von 1.

Der RegionServer muss auch über genügend Arbeitsspeicher verfügen, um alle Ihre gleichzeitigen Schreibvorgänge zu verarbeiten. Wenn Sie Ihre Schreibvorgänge stark stapeln oder einige sehr große Zellenwerte senden, werden Sie wahrscheinlich auf OutOfMemoryExceptions stoßen. Verringern Sie auch hier Ihre Stapelverarbeitung oder finden Sie auf andere Weise einen Weg, die Größe Ihrer Zellenwerte zu verringern.

5. Last von Hadoop steuern

Wenn Sie Hadoop-Jobs gegen Ihre HBase-Daten ausführen, führen Sie im Grunde viele große Scans durch. In einem HBase MapReduce-Job wird jede Region zu einem Mapper. Wenn Sie mehr als eine Region pro RegionServer haben, besteht die Möglichkeit, dass einige Mapper irgendwann denselben RegionServer gleichzeitig scannen. Jeder dieser Scans nimmt Speicher-, Festplatten- und CPU-Ressourcen in Anspruch, und wenn sich mehrere davon aufbauen, kann dies zu Problemen führen.

Verringern von hbase.regionserver.handler.count wird dazu beitragen, die Anzahl der aktiven Verbindungen zu begrenzen, die Speicher beanspruchen, aber Sie könnten immer noch ein Problem haben, wenn alle Handler große Scans der gesamten Region verarbeiten. Mit unserer Erweiterung von TableInputFormat können Sie einfach steuern, wie viele gleichzeitige Mapper auf einem einzelnen RegionServer ausgeführt werden , was eine besser vorhersagbare Speichernutzung ermöglicht.

Wenn Sie von einem Reducer in HBase schreiben, sollten Sie auch dort die Partitionierung steuern. Dies lässt sich einfach mit Hadoops Partitioner implementieren Schnittstelle mit HBaseAdmin von HBase Schnittstelle, die die Zuordnungen der Region zu RegionServer bereitstellt.

Das Ausführen von HBase bei wenig Arbeitsspeicher ist schwierig, aber nicht unmöglich

Mit diesen Tipps sollten Sie auf dem besten Weg sein, Operationen in Ihrer Umgebung mit wenig Arbeitsspeicher zu überleben. Es kann frustrierend sein, in Zeiten von extrem billigem, schnellem RAM um jedes Megabyte an Speicher zu kämpfen. Aber befolgen Sie diese Tipps und Ihr CFO wird Ihnen dafür danken, dass Sie diesen kostengünstigen Instanztyp optimal nutzen. Für diejenigen mit etwas mehr finanzieller Freiheit werden wir die Auswirkungen der neuen I2-Instance-Typen von Amazon in einem zukünftigen Beitrag untersuchen . Bleiben Sie dran!

Dieser Artikel erschien ursprünglich auf dev.hubspot.com