Hadoop dla .NET Developerów w przykładach dla .NET Core Część 3
W ostatniej części skupimy się na bazie danych HBase która dane magazynuje na klastrze Hadoop. Pokażemy przykłady wykorzystania tej bazy w programach napisanych w .NET Core.
Zacznijmy od opisania czym jest baza HBase. Baza HBase jest bazą NoSql którą klasyfikujemy jest jako bazę kolumnową. Charakteryzuje się tym że baza do działania potrzebuje klastra Hadoop i wszystkie swoje dane trzyma na HDFS. Do jej głównych cech należy:
- Przetrzymuje duże zbiory danych
- Jest bazą NoSql i nie posiada relacji i nie obsługuje połączeń między tabelami
- Każdy wiersz w tabeli składa się z dwóch głównych składników z klucza oraz kolumn
- Każdy wiersz może posiadać różne ilości kolumn ( w definicji tabeli określamy tylko rodziny kolumn , które będą grupowały nam kolumny)
- Klucz oraz kolumny są zawsze typu znakowego naszym zadaniem jest odpowiednie zapisanie innych typów liczbowych , datowych etc w formie znakowej
- Najszybsze wybieranie wierszy z tabel odbywa się po kluczu lub po jego części (prefix) dlatego bardzo ważna jest odpowiednia budowa klucza podczas używania tej bazy.
- Baza przetrzymuje kilka wersji wpisów dla danej kolumny jest to konfigurowalne na poziomie rodziny kolumn a standardowa maksymalna ilość przetrzymywanych wersji wynosi 1
Praca z bazą HBase w shell
By zacząć pracę z bazą HBase logujemy się do utworzonego kontenera hbase i wykonujemy komendę
hbase shell
Dostępne operacje to:
- Utworzenie nowej tabeli
create ‘{NAZWA_TABELI}’,’RODZINA_KOLUMN1’,’RODZINA_KOLUMN2’ ...
- Odczytanie opisu tabeli
describe ‘{NAZWA_TABELI}’
- Dodanie kolumny do tabeli lub nadpisanie kolumny
put ‘{NAZWA_TABELI}’‘{KLUCZ}’,’{RODZINA_KOLUMN}:{NAZWA_KOLUMNY}’,’{WARTOSC}’
- Wyświetlanie konkretnego wiersza dla tabeli
get ‘{NAZWA_TABELI}’ ‘{KLUCZ}’
- Wyświetlanie konkretnego wiersza dla tabeli z listą konkretnych kolumn
get ‘{NAZWA_TABELI}’ ‘{KLUCZ}’ ‘{RODZINA_KOLUMN}:{KOLUMNA}’…
- Wyczyszczenie całej zawartości tabeli
truncate ‘{NAZWA_TABELI}’
- Wyświetlanie wiersza wraz z filtrowaniem:
scan ‘{NAZWA_TABELI}’ {DEFINICJA_WYBORU_KOLUMN}, {DEFINICJA_FILTRU}
- Lista dostępnych filtrów:
show filters
- Lista tabel:
list
- Usuwanie wartości w kolumnie:
delete ‘{NAZWA_TABELI}’,‘{KLUCZ}’, ’{RODZINA_KOLUMN}:{NAZWA_KOLUMNY}’
- Wyłączenie tabeli:
disable ‘{NAZWA_TABELI}’
- Usunięcie tabeli
drop ‘{NAZWA_TABELI}’
Praca z bazą HBase za pomocą interfejsu REST
Istnieje możliwość pracy z bazą HBase za pomocą interfejsu Rest Api.
https://hbase.apache.org/book.html#_using_rest_endpoints
Na github
https://github.com/mrozim78/hadoop-net-presentation
w katalogu library/Hadoop.Net.Library.Hbase.Stargate.Client odnajdziemy bibliotekę przeportowaną do .NET Standard 2.0 umożliwiającą dostęp do HBase przez Rest Api.
Przykładowa aplikacja w .NET Core dla HBase
Przykładowa aplikacja webowa napisana w .NET Core prezentuje sposób łączenie się z bazą HBase za pomocą prezentowanej powyżej biblioteki . Aplikacja generuje losowy kolor (4 wartości R,G,B oraz Alpha) oraz prezentuje pytanie użytkownikowi do jakiego koloru jest podobny wylosowany kolor czy do zielonego , niebieskiego a może czerwonego. Wybory użytkowników zapisuje w bazie HBase.
Dla aplikacji używamy dwie tabele:
create 'colors','definition'
create 'user_color','answer','header'
W tabeli colors klucz jest wykonany zgodnie ze wzorcem 001_123_345_035 (gdzie pierwsza wartość to R ,G,B oraz wartość
Alpha pomnożona przez 100). W tabeli z wynikami user_color pierwszy człon stanowi klucz do koloru który przedzielamy ‘|’ wylosowany Guid by uzyskać unikalność klucza. W ten sposób jesteśmy w stanie wydajnie wyszukiwać wyniki dla danego koloru podając prefix klucza stanowiący klucz koloru.
Kod źródłowy naszej aplikacji możemy znaleźć w tym samy repozytorium na github co biblioteka w katalogu library/ Hadoop.Net.Hbase.WebApp
Prezentowanie wyników aplikacji za pomocą Hive
Powyższa aplikacja ma na celu tylko zbieranie informacji by uzyskać wyniki użyjemy kolejnego narzędzia Hive. Hive jest to serwer , który udostępnia interfejs do języka HiveQL (składnia podobna do SQLa) za pomocą którego jesteśmy w stanie wykonywać zapytania do HDFS oraz HBase. Hive zapytania te tłumaczy na programy MapReduce , które wykonuje i zwraca wyniki.
W tym celu logujemy się do kontenera hive-server i wykonujemy następujące polecenie:
beeline -u jdbc:hive2://localhost:10000
W celu wykonywania zapytań w HiveQL na tabelach HBase musimy utworzyć ich odwzorowanie w meta tablicach Hive.
Dla tabeli colors:
oraz dla tabeli user_color:
Po utworzeniu meta tabel możemy wykonać zapytanie zwracające nam wynik:
Wyniki przedstawiony jest formie R ,G, B, Alpha oraz liczbie osób która określiła ten kolor jako czerwony , zielony czy niebieski.
Zapytanie składa się z kilku podzapytań w pierwszym wycinamy z klucza interesujący nas kolor by połączyć to z tabelą ze zdefiniowanymi kolorami. Największe zapytanie agreguje dane i zlicza liczbę wariantów odpowiedzi czy to kolor podobny do czerwonego , zielonego czy niebieskiego dla danego wylosowanego koloru.
W ten sposób doszliśmy do końca naszej przygody z Hadoop oraz jego narzędziami. Mam nadzieje , że dość skutecznie pokazałem potencjał tej platformy w rozwiązaniu problemów związanych ze światem BigData.