Wybierz region
pl
  • PL
  • EN
Wydrukuj

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.


Remigiusz Mrozek

Architekt w Pionie Energetyki i Gazownictwa. Na co dzień koduje w C#, prywatnie pasjonat nowych technologii ze szczególnym ukłonem w odmęty Big Data i Machine Learningu. Mistrz Gry, zawsze z najbardziej psychodeliczną fabułą. Można go spotkać na Coperniconie i Pyrkonie!


Wydrukuj