BigData obejmuje szeroki zakres różnych technologii, które trzeba ze sobą połączyć w działający stos technologiczny. W skróconej formie na przykładzie ekosystemu Cloudera HDP 3.0 pokażę jakich komponentów można użyć i jak potem współpracują ze sobą. Każdy komponent wspiera określoną grupę funkcji, które razem budują komplementarne rozwiązanie.
Apache Hadoop, czyli gdzie gromadzić te petabajty danych
Podstawowym składnikiem środowiska HDP (Hortonworks Data Platform) jest Hadoop. Apache Hadoop to opensource’owa implementacja rozproszonego filesystemu, mogąca przechowywać nawet petabajtowe ilości danych. Skalowanie odbywa się poprzez dokładanie kolejnych maszyn fizycznych z lokalnymi dyskami. Na tym maszynach instaluje się następnie usługi DataNode.
Nie są wymagane specjalistyczne maszyny fizyczne czy rozbudowane systemy macierzy, co obniża znacząco koszty. Uszkodzenie pojedynczych maszyn jest praktycznie niezauważalne dla użytkownika i nie zaburza pracy Hadoopa. Uszkodzona maszyna jest pomijana – dane są bezpieczne z uwagi na zdublowane bloki plików na innych maszynach.
Apache Yarn, czyli jak zarządzać mocą klastra podczas przetwarzań
Na maszynach z DataNode (z danymi) instalowany jest również standardowo komponent Yarn – NodeManager. Yarn to serwis, którego zadaniem jest zarządzanie zasobami maszyn (procesor, ram) dla uruchamianych procesów przetwarzających dane zeskładowane na HDFS-ie. HDFS to nazwa i prefiks używany do dostępu do plików Hadoopa.
Procesy przetwarzające starają się, aby przetwarzać bloki danych z lokalnych dysków co powoduje zmniejszenie zapotrzebowania na przepustowość sieci. Również dzięki temu przetwarzanie jest dzielone na wiele takich samych zadań, ale operujących na niewielkim zbiorze danych – następuje zrównoleglenie przetwarzania z wykorzystaniem mocy wielu maszyn.
Na Yarnie uruchamiane są wszystkie procesy przetwarzające – w ramach różnych technologii. W tej wersji jest również wsparcie dla Dockera. Najstarszą używaną technologią jest podstawowy map-reduce, od której zaczęła się historia z przetwarzaniem danych w Hadoopie. Obecnie najczęściej wykorzystywanymi są Hive oraz Spark. Hive jest nakładką na filesystem HDFS-a umożliwiającą odwoływanie się do plików jak do tabel i pisanie zapytań w języku SQL – pseudo baza danych tabelarycznych. Wewnętrzny mechanizm zmienia treść zapytania SQL na procesy map-reduce lub DAG-i TEZ-owe.
Apache Spark, czyli czym przetwarzać dane
Spark jest narzędziem napisanym w języku Scala i umożliwia interaktywnie operowanie na zbiorach danych. Szczególnie ceniony przez specjalistów data science z uwagi na interaktywność i możliwość powtarzania poszczególnych operacji po dokonaniu poprawek.
Apache Oozie, czyli jak harmonogramować przetwarzania
Jeśli zależy nam na cyklicznym uruchamianiu zadań to wesprze nas serwis Oozie. Umożliwia on uruchamianie zadań z użyciem dostępnych wielu maszyn. Inaczej niż Crontab gdzie jest to konkretna maszyna, która może ulec awarii. Oprócz harmonogramowania w Oozie można definiować flow wraz z użyciem innych serwisów np. HDFS-a czy Hive.
Apache Zookeeper, czyli spójna konfiguracja w zmiennym środowisku
W środowisku rozproszonym i o dużej zmienności ważnym elementem jest posiadanie aktualnej konfiguracji. Konfiguracja, która jest zależna od działających procesów trzymana jest w Zookeeperze. Klaster Zookeeperów działa jak jeden byt – operacja zmiany w konfiguracji jest atomowa – zostanie zapisana na wszystkich w klastrze albo zwróci błąd.
Apache Ambari, czyli jak zarządzać klastrem z jednego miejsca
Zarządzanie manualnie rozbudowanym klastrem zawierającym setki a może i tysiące maszyn nie jest możliwe dlatego wspiera nas w tym Ambari. Dzięki niemu w jednym miejscu możemy zarządzać całością – maszynami, serwisami, konfiguracją serwisów wraz z monitorowaniem stanu i działania klastra.
Kerberos i LDAP, czyli bezpieczeństwo po raz pierwszy – użytkownicy
Dla rozwiązań enterprise również ważną sprawą jest bezpieczeństwo. HDP zapewnia bezpieczeństwo na kilka różnych sposobów. Podstawowym sposobem jest autentykacja i autoryzacja użytkowników poprzez użycie Kerberosa i LDAP.
Apache Ranger, czyli bezpieczeństwo po raz drugi – uprawnienia
Zarządzanie dostępem i uprawnieniami manualnie dla każdej usługi jest trudne, jeśli mamy utrzymywać rygorystyczne zasady dostępu. Ranger ułatwia to zadanie, będąc narzędziem do zarządzania dostępem, uprawnieniami oraz audytorem używania uprawnień. Ranger posiada system pluginów do serwisów HDP integrując się z nimi do potrzeb przejęcia obowiązków zarządzania uprawnieniami.
Apache Knox, czyli bezpieczeństwo po raz trzeci – jedno miejsce dostępu do usług
Chociaż Ranger znacznie ogranicza możliwości nieautoryzowanego dostępu do serwisów, to najlepiej w ogóle ograniczyć bezpośredni dostęp użytkownika do serwisów, wystawiając mu jeden punkt do korzystania z usług. Takim punktem może być serwis Knox, który pełni rolę pośrednika i pierwszego punktu autoryzacji użytkownika.
SSL, czyli bezpieczeństwo po raz czwarty – szyfrowanie transmisji
Dodatkowym zabezpieczeniem możliwym do wprowadzenia jest szyfrowanie transmisji za pomocą protokołów SSL.
A może jednak stream zamiast batch?
To są podstawowe elementy, ale oczywiście nie wszystkie, jakie są dostępne.
Opisywany klaster w takiej postaci najczęściej występuje w przetwarzaniu batch’owym offline – proces startuje, nalicza dane, wyniki i następnie się kończy. W parze z takim klastrem może być uruchomiony na przykład klaster HDF (Hortonworks Data Flow) gdzie wchodzimy w świat przetwarzania strumieniowego online.
Wady
No cóż, same plusy były to teraz trochę minusów.
Jak w większości filesystemów linuxowych tak i na HDFS-ie usunięcie pliku jest ostateczne. W ramach filesystemu Linuxa najczęściej przed utratą danych ratuje backup. W przypadku HDFS-a backupowanie petabajtów danych jest niemożliwe. Mamy jednak szansę na odzyskanie danych, jeśli kasowanie nastąpiło bez przełącznika -skipTrash, gdyż standardowo najpierw usunięcie polega na przeniesieniu danych do specjalnego katalogu .trash. Czas przebywania danych w trash-u określony jest przez parametr konfiguracyjny i może zostać wydłużony kosztem zajęcia części przestrzenii na HDFS-ie.
Krytycznym zadaniem jest backupowanie fsimage’a namenoda, który zawiera dane coś na podobieństwo do tablicy alokacji FAT dla dysków. Są tam informacje o blokach na Datanodach, nazwach plików i ich położeniu w strukturze katalogów, zajętych przez te pliki blokach.
Filesystem HDFS nie posiada mechanizmów edytowania zawartości danych, nie jest możliwe wpisanie coś wewnątrz istniejącego pliku. Jedyna możliwa operacja edycyjna to append – dołączenie danych na końcu pliku. Edycja pliku polega na pobraniu pliku na zewnątrz, dopisaniu, a następnie zastąpieniu całego pliku.
Z uwagi na złożoność środowiska i opensource’owy charakter dość często zdarzają się przypadki błędów wcześniej nie opisywanych lub trudnych do powtórzenia i wyeliminowania. Administratorzy takich systemów muszą posiadać szeroki wachlarz umiejętności począwszy od znajomości hardware, systemu operacyjnego, sieci, usług sieciowych, programowania Shell, Python, Java oraz znajomością różnych protokołów, np. Kerberos czy LDAP.