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

Apache HBase Do’s and Don’ts

Ich habe kürzlich bei der LA Hadoop User Group einen Vortrag über Apache HBase Do’s and Don’ts gehalten. Das Publikum war ausgezeichnet und hatte sehr informierte und gut artikulierte Fragen. Jody von Shopzilla war ein ausgezeichneter Gastgeber und ich schulde ihm großen Dank dafür, dass er mir die Gelegenheit gegeben hat, mit über 60 LA Hadoopern zu sprechen. Da nicht alle in LA wohnen oder es zum Treffen schaffen konnten, habe ich hier einige der wichtigsten Punkte zusammengefasst. Für diejenigen unter Ihnen, die einen anstrengenden Tag haben, hier ist das tl;dr:

  • HBase ist gut, aber kein Ersatz für RDBMS oder HDFS
  • Gute Konfiguration bedeutet guten Betrieb
  • Monitor Monitor Monitor Monitor Monitor

Wir bei Cloudera sind große Fans von HBase. Wir lieben die Technologie, wir lieben die Community und wir haben festgestellt, dass sie für viele Anwendungen hervorragend geeignet ist. Der erfolgreiche Einsatz von HBase ist gut dokumentiert, weshalb viele Unternehmen überlegen, ob HBase für einige ihrer Anwendungen geeignet ist. Der Anstoß für meinen Vortrag und diesen nachfolgenden Blogbeitrag ist es, einige der guten Anwendungen für HBase zu erläutern, vor einigen schlechten Anwendungen zu warnen und wichtige Schritte für eine erfolgreiche HBase-Bereitstellung hervorzuheben.

Wann sollte HBase verwendet werden

Die wichtigste Überlegung bei der Betrachtung von HBase ist, dass es zwar eine großartige Lösung für viele Probleme ist, aber keine Wunderwaffe. HBase ist nicht für klassische Transaktionsanwendungen oder gar relationale Analysen optimiert. Es ist auch kein vollständiger Ersatz für HDFS, wenn MapReduce in großen Stapeln ausgeführt wird. Werfen Sie einen Blick auf einige der Anwendungsfälle in diesem Beitrag, um ein Gefühl dafür zu bekommen, welche Anwendungen gut zu HBase passen, und wenn Sie Fragen haben, posten Sie einfach auf den Listen. Habe ich schon erwähnt, dass die Community fantastisch ist?

Abgesehen von diesem Vorbehalt – warum sollten Sie HBase verwenden? Wenn Ihre Anwendung ein Variablenschema hat, bei dem jede Zeile etwas anders ist, sollten Sie sich HBase ansehen. Als Beispiel eine Modellierungsübung unter Verwendung eines standardmäßigen relationalen Schemas durchführen; Wenn Sie Spalten nicht schnell genug hinzufügen können und die meisten davon in jeder Zeile NULL sind, sollten Sie HBase in Betracht ziehen. Wenn Sie feststellen, dass Ihre Daten in Sammlungen gespeichert sind, z. B. einige Metadaten, Nachrichtendaten oder Binärdaten, die alle denselben Wert haben, sollten Sie HBase in Betracht ziehen. Wenn Sie beim Speichern oder Abrufen einen schlüsselbasierten Zugriff auf Daten benötigen, sollten Sie HBase in Betracht ziehen.

Unterstützende Dienste

Angenommen, Sie sind davon überzeugt, dass HBase gut zu Ihrer Anwendung passt, finden Sie hier einige Tipps, die Sie bei der Bereitstellung beachten sollten. Es gibt einige unterstützende Dienste, die wichtig und erforderlich sind. Wenn Sie sich ZooKeeper noch nie angesehen haben, ist jetzt der richtige Zeitpunkt dafür. HBase verwendet ZooKeeper für verschiedene verteilte Koordinationsdienste wie Masterwahl. Während HBase sich entwickelt und wächst, verlässt es sich weiterhin auf ZooKeeper für zusätzliche Funktionen, was es zu einem Schlüsselbestandteil des Systems macht. Darüber hinaus sollten Sie über geeignete Netzwerkdienste wie NTP und DNS verfügen. HBase hängt davon ab, dass alle Knoten im Cluster eng synchronisierte Uhren haben und konsistent aufeinander verweisen. Die Verwendung von NTP und DNS stellt sicher, dass Sie nicht auf seltsames Verhalten stoßen, wenn ein Knoten A denkt, dass die Zeit morgen ist und Knoten B denkt, dass es gestern ist. Sie verhindern auch Situationen, in denen der Master-Knoten Knoten C anweist, eine Region zu bedienen, Knoten C jedoch seinen eigenen Namen nicht kennt und nicht antwortet. Die Verwendung von NTP und DNS erspart Ihnen beim Einstieg eine Menge Kopfschmerzen.

Ich habe gesagt, dass die wichtigste Überlegung bei der Auswahl von HBase darin besteht, sicherzustellen, dass Sie einen passenden Anwendungsfall haben. Das Wichtigste bei der Verwendung von HBase ist die Überwachung des Systems. Überwachung ist der Schlüssel zu erfolgreichen HBase-Operationen. Wie bei vielen verteilten Systemen ist HBase anfällig für kaskadierende Ausfälle. Wenn ein Knoten mit dem Austausch beginnt, kann er den Kontakt zum Master verlieren, was dazu führt, dass ein anderer Server die Last aufnimmt und überlastet wird. Dieser zweite Server fällt aus und der Ausfall wird kaskadieren. Sie müssen den Speicher, die CPU, die E/A sowie die Netzwerklatenz und -bandbreite auf jedem Ihrer HBase-Knoten überwachen, um sicherzustellen, dass sie innerhalb fehlerfreier Parameter arbeiten. Überwachung ist die wichtigste Praxis für den Betrieb eines fehlerfreien HBase-Clusters.

Gute Praktiken für die HBase-Architektur

Schneller Vorlauf zu Ihrem gut überwachten HBase-Cluster, auf dem ein perfekter Anwendungsfall ausgeführt wird. Hier sind einige bewährte Verfahren. Verwenden Sie ein Schlüsselpräfix, das sich basierend auf Ihrem Anwendungsfall gut verteilt. Wenn Sie Ihrem Schlüssel einen Zeitstempel oder einen ähnlichen Wert voranstellen, der beim Sortieren in einem Stapel gespeichert oder abgefragt wird, werden Sie wahrscheinlich jeden Regionsserver der Reihe nach überlasten, anstatt die Last gleichmäßig zu verteilen. Sie sollten auch die Anzahl der Regionen basierend auf der Speichergröße und der RAM-Größe auf eine angemessene Anzahl beschränken, und die RegionServer-JVM sollte auf 12 GB Java-Heap beschränkt sein, um lange GC-Pausen zu minimieren. Beispielsweise könnte eine Maschine mit 36 ​​GB RAM, auf der auch ein DataNode-Daemon ausgeführt wird, ungefähr 100 Regionen mit aktiven Schreibvorgängen und einem Arbeitsspeicher von jeweils 48 MB verarbeiten. Das bietet ausreichend Spielraum für DataNode- und RegionServer-Speicheranforderungen, Linux-Dateipufferspeicher und eine angemessene Flush-Größe für jeden RegionServer.

Einige Konfigurationsempfehlungen umfassen das Deaktivieren der automatischen Komprimierung (standardmäßig geschieht dies alle 24 Stunden ab dem Zeitpunkt, an dem Sie starten). HBase) und planen Sie es so, dass es jeden Tag außerhalb der Spitzenzeiten ausgeführt wird. Sie sollten auch die Komprimierung (z. B. LZO) konfigurieren und das korrekt konfigurierte HBase-conf-Verzeichnis explizit in Ihren CLASSPATH einfügen.

HBase DON’Ts

Wir haben ein breites Spektrum bewährter Verfahren für HBase behandelt. Es gibt auch ein paar Verwendungsmuster, die es zu vermeiden gilt. Erwarten Sie beispielsweise nicht, HBase als umfassenden Ersatz für jede Ihrer relationalen Datenbanken zu verwenden. HBase ist in vielen Dingen großartig, aber es ersetzt keine relationalen Datenbanken. Zunächst einmal spricht es kein SQL, hat keinen Optimierer, unterstützt datensatzübergreifende Transaktionen oder Joins. Wenn Sie keines davon in Ihrer Datenbankanwendung verwenden, könnte HBase die perfekte Lösung sein.

Seien Sie vorsichtig, wenn Sie gemischte Workloads auf einem HBase-Cluster ausführen. Wenn Sie SLAs für den HBase-Zugriff unabhängig von MapReduce-Jobs haben (z. B. eine Umwandlung in Pig und das Bereitstellen von Daten von HBase), führen Sie sie auf separaten Clustern aus. HBase ist CPU- und speicherintensiv mit sporadischen großen sequentiellen E/A-Zugriffen, während MapReduce-Jobs hauptsächlich E/A-gebunden mit festem Speicher und sporadischer CPU sind. Kombiniert kann dies zu unvorhersehbaren Latenzen für HBase- und CPU-Konflikte zwischen den beiden führen. Ein gemeinsam genutzter Cluster erfordert auch weniger Task-Slots pro Knoten, um die HBase-CPU-Anforderungen zu erfüllen (im Allgemeinen die Hälfte der Slots auf jedem Knoten, die Sie ohne HBase zuweisen würden). Behalten Sie auch den Speicheraustausch im Auge. Wenn HBase mit dem Austausch beginnt, besteht eine gute Chance, dass es einen Herzschlag verpasst und aus dem Cluster gelöscht wird. Auf einem stark ausgelasteten Cluster kann dies eine andere Region überlasten, was zu Auslagerungen und einer Kaskade von Fehlern führen kann.

Abschließende Gedanken

Ein letzter Rat, bevor wir zusammenfassen. Verwenden Sie beim Laden von HBase HFileOuputFormat, wenn das Laden über einen MapReduce-Job oder eine Sammlung von Servern mit gestapelten Puts erfolgt. Das Laden mit einem einzelnen Client führt zu einem Engpass auf diesem Client und nutzt die Skalierbarkeit von HBase nicht aus.

Zusammenfassend sollten Sie HBase in Betracht ziehen, wenn Sie Daten nach Schlüssel laden, Daten nach Schlüssel (oder Bereich) suchen, Daten nach Schlüssel bereitstellen, Daten nach Schlüssel abfragen oder wenn Sie Daten nach Zeile speichern, die nicht gut mit einem Schema übereinstimmen.

Anwendungsfälle

  • Apache HBase:Unterstützt von HBase Wiki
  • Mozilla:Umzug von Socorro nach HBase
  • Facebook:Das neue Echtzeit-Messaging-System von Facebook:HBase
  • StumbleUpon:HBase bei StumbleUpon