2008-09-07 8 views
19

Ich arbeite an einem Projekt mit einem Freund, der Hbase verwenden wird, um seine Daten zu speichern. Gibt es gute Beispiele für Abfragen? Ich scheine eine Menge Java-Code zu schreiben, um Listen von RowResult zu durchlaufen, wenn ich in SQL Land eine einfache Abfrage schreiben könnte. Fehle ich etwas? Oder fehlt Hbase etwas?Hbase/Hadoop Query Hilfe

Antwort

20

Ich denke Sie, wie viele von uns, machen den Fehler, BigTable und HBase wie nur ein anderes RDBMS zu behandeln, wenn es tatsächlich ein spaltenorientiertes Speichermodell ist, das große Mengen sparse Daten effizient speichern und abrufen soll. Das bedeutet, idealerweise Viele-zu-Eins-Beziehungen innerhalb einer einzelnen Zeile zu speichern. Ihre Abfragen sollten nur sehr wenige Zeilen zurückgeben, aber (möglicherweise) viele Datenpunkte enthalten.

Wenn Sie uns mehr über das, was Sie speichern wollten, gesagt haben, könnten wir Ihnen helfen, Ihr Schema so zu gestalten, dass es dem BigTable/HBase-Verfahren entspricht.

Für einen guten Überblick über, was HBase anders als ein "traditionelles" RDBMS tut, überprüfen Sie diesen fantastischen Artikel: Matching Impedance: When to use HBase durch Bryan Duxbury.

+2

Die Verbindung von Duxbury ist kaputt, aber ich könnte es nirgendwo anders finden. : - \ –

+0

Spiegel des Duxbury Artikels: http://blog.csdn.net/arthurbryant/article/details/6643933 (verfügbar ab Februar 2014) –

1

Ich schaute auf Hadoop und Hbase und als Sean sagte, ich erkannte bald, dass es mir nicht gab, was ich eigentlich wollte, die eine geclusterte JDBC-kompatible Datenbank war.

Ich denke, Sie könnten besser dran mit etwas wie C-JDBC oder HA-JDBC, die eher wie das, was ich war nach. (Persönlich bin ich mit keinem von diesen beiden weiter gekommen, als die Dokumentation zu lesen, damit ich nicht sagen kann, welche von denen überhaupt gut ist.)

0

Danke für die Antwort Sean, und Entschuldigung für meine Verspätung Antwort. Ich mache oft den Fehler, HBase wie ein RDBMS zu behandeln. So oft, dass ich deswegen Code schreiben musste! Es ist so schwer, zu verlernen.

Im Moment haben wir nur 4 Tabellen. Was in diesem Fall sehr wenig ist, wenn man meinen Hintergrund betrachtet. Ich hatte nur gehofft, einige RDBMS-Funktionalität zu verwenden, während bei dem column-oriented Storage-Modell meist bleiben.

1

Ich würde empfehlen, einen Blick auf Apache Hive Projekt, das HBase ähnlich ist (in dem Sinne, dass es eine verteilte Datenbank ist), die eine SQL-esque Sprache implementiert.

0

Freut mich zu hören, dass ihr HBase benutzt! Ich bin kein Experte, aber hier sind ein paar Dinge, die helfen könnten.

  • HBase basiert auf/von BigTable inspiriert, die von App Engine als ihre db api ausgesetzt sein geschieht so sollte browsing their docs sehr viel helfen, wenn Sie auf einer Webapp arbeiten sind.

  • Wenn Sie nicht an einer Webanwendung arbeiten, wird die Art der Iteration, die Sie beschreiben, normalerweise mit via map/reduce gehandhabt (geben Sie nicht die Werte aus, die Sie nicht möchten). Das Überspringen von Werten mithilfe von Iteratoren garantiert praktisch, dass Ihre Anwendung Engpässe bei HBase-großen Datensätzen aufweist. Wenn Sie feststellen, dass Sie immer noch in SQL denken, finden Sie in Cloudera Schwein Tutorial und Stock-Tutorial.

  • Grundsätzlich ist die ganze HBase/SQL mentale Differenz (für nicht-Webapps) läuft darauf hinaus „um die Daten, die die Berechnung zu senden, die Daten nicht an die Rechen senden“ - wenn Sie, dass der Geist in halten, während Sie ‚re Codierung Sie fein :-)

Grüße,

David

2

Wenn Sie für den Zugriff auf HBase mit einer Abfragesprache und einen JDBC-Treiber ist es möglich, werde zu tun. Paul Ambrose hat eine Bibliothek namens HBQL auf hbql.com veröffentlicht, die Ihnen dabei helfen wird. Ich habe es für ein paar Projekte verwendet und es funktioniert gut. Sie werden natürlich keinen Zugriff auf vollständiges SQL haben, aber es macht es ein wenig einfacher zu benutzen.