2008-09-07 13 views
19

Pracuję nad projektem z przyjacielem, który wykorzysta Hbase do przechowywania danych. Czy są jakieś dobre przykłady zapytań? Wydaje mi się, że piszę mnóstwo kodu Java do iteracji poprzez listy wierszy RowResult, kiedy w języku SQL mogę napisać proste zapytanie. Czy czegoś brakuje? A może Hbase czegoś brakuje?Hbase/Hadoop Query Help

Odpowiedz

20

Wydaje mi się, że podobnie jak wielu z nas popełnia błąd polegający na traktowaniu BigTable i HBase jak kolejny RDBMS, gdy jest to właściwie zorientowany na kolumnę model pamięci masowej przeznaczony do wydajnego przechowywania i pobierania dużych zbiorów rzadkich danych. Oznacza to na przykład przechowywanie relacji jeden do jednego w jednym wierszu. Twoje zapytania powinny zwracać bardzo mało wierszy, ale zawierają (potencjalnie) wiele punktów danych.

Być może, jeśli powiesz nam więcej o tym, co próbujesz przechowywać, możemy pomóc Ci zaprojektować swój schemat, aby dopasować go do sposobu działania BigTable/HBase.

Dla dobrego podsumowania tego, co HBase robi inaczej niż "tradycyjny" RDBMS, sprawdź ten wspaniały artykuł: Matching Impedance: When to use HBase autorstwa Bryana Duxbury.

+2

Łącze Duxbury jest zepsute, ale nie mogę go znaleźć gdzie indziej. : - \ –

+0

Mirror of Duxbury article: http://blog.csdn.net/arthurbryant/article/details/6643933 (dostępny od lutego 2014) –

1

Spojrzałem na Hadoop i Hbase i jako Sean powiedział, że wkrótce zrozumiałem, że nie dało mi tego, co faktycznie chciałem, co było klastrowaną bazą danych zgodną z JDBC.

Myślę, że lepiej byłoby użyć czegoś takiego jak C-JDBC lub HA-JDBC, które wydają się bardziej podobne do tego, czym byłem. (Osobiście nie mam dalej żadnego z tych tematów niż czytanie dokumentacji, więc nie mogę stwierdzić, która z nich jest dobra, jeśli w ogóle.)

0

Dzięki za odpowiedź Seana, i przepraszam za mój spóźniony odpowiedź. Często popełniam błąd traktując HBase jak RDBMS. Tak często w rzeczywistości musiałem ponownie napisać kod z tego powodu! To bardzo trudne do oduczenia.

W tej chwili mamy tylko 4 tabele. Co w tym przypadku jest bardzo mało biorąc pod uwagę moje pochodzenie. Miałem tylko nadzieję, że użyję jakiejś funkcji RDBMS, podczas gdy głównie trzymam się modelu magazynowania zorientowanego na kolumnę.

1

Polecam rzucić okiem na projekt Apache Hive, który jest podobny do HBase (w tym sensie, że jest rozproszoną bazą danych), która implementuje język SQL-esque.

0

Cieszę się, że korzystasz z HBase! Nie jestem ekspertem w żadnej dziedzinie wyobraźni, ale oto kilka rzeczy, które mogą pomóc.

  • HBase opiera się na/zainspirowany BigTable, która okazuje się być wystawiony przez AppEngine jako db api, więc browsing their docs powinno bardzo pomóc, jeśli pracujesz na webapp.

  • Jeśli nie pracujesz nad aplikacją internetową, rodzaj iteracji, którą opisujesz, jest zwykle obsługiwany za pomocą mapy/zmniejszania (nie emituj wartości, których nie chcesz). Pomijanie wartości przy użyciu iteratorów praktycznie gwarantuje, że aplikacja będzie miała wąskie gardła z zestawami danych o rozmiarach HBase. Jeśli uważasz, że nadal myślisz w języku SQL, zapoznaj się z samouczkiem i samouczkiem dotyczącym kloudera.

  • Zasadniczo cała różnica mentalna HBase/SQL (dla nie-aplikacji internetowych) sprowadza się do "Wyślij dane do danych, nie wysyłaj danych do obliczeń" - jeśli pamiętasz o tym podczas „re kodowania zrobisz grzywny :-)

Pozdrowienia,

David

2

Jeśli chcesz uzyskać dostęp do HBase za pomocą języka zapytań i sterownik JDBC jest to możliwe. Paul Ambrose wydał bibliotekę o nazwie HBQL na hbql.com, która pomoże ci to zrobić. Używałem go do kilku projektów i działa dobrze. Oczywiście nie będziesz mieć dostępu do pełnego SQL, ale to sprawi, że będzie trochę łatwiejszy w użyciu.