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
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.
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.)
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ę.
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.
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
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.
Łącze Duxbury jest zepsute, ale nie mogę go znaleźć gdzie indziej. : - \ –
Mirror of Duxbury article: http://blog.csdn.net/arthurbryant/article/details/6643933 (dostępny od lutego 2014) –