W tradycyjnym świecie relacyjnych baz danych wszystkie przetwarzanie odbywa się po informacje zostały załadowane do sklepu za pomocą specjalistycznego języka zapytań na wysoce uporządkowanych i zoptymalizowanych strukturach danych. Podejście zapoczątkowane przez Google i przyjęte przez wiele innych firm internetowych polega na stworzeniu potoku, który odczytuje i zapisuje do dowolnych formatów plików, a pośrednie wyniki są przekazywane między etapami jako pliki, a obliczenia są rozproszone na wielu komputerach. Zwykle opiera się na metodzie Map-Reduce, polegającej na rozpowszechnianiu pracy, takie podejście wymaga zupełnie nowego zestawu narzędzi, które opiszę poniżej.
Hadoop
Pierwotnie opracowany przez Yahoo! jako klon infrastruktury MapReduce Google, ale następnie open source, Hadoop dba o uruchomienie kodu w klastrze maszyn. Do jego obowiązków należy dzielenie danych wejściowych, wysyłanie ich do każdej maszyny, uruchamianie kodu na każdym kawałku, sprawdzanie, czy kod działa, wyświetla się albo na dalszych etapach przetwarzania, albo na końcowej lokalizacji wyjściowej, wykonując sortowanie, które ma miejsce między mapą i redukując etapy i wysyłając każdy fragment posortowanych danych do właściwego komputera, i zapisując informacje debugowania na temat postępów każdego zadania, między innymi . Jak można się domyślić z tej listy wymagań, jest to dość złożony system, ale na szczęście został przetestowany przez wielu użytkowników. Wiele się dzieje pod maską, ale przez większość czasu, jako programista, wystarczy dostarczyć kod i dane, i to po prostu działa. Jego popularność oznacza także, że istnieje duży ekosystem powiązanych narzędzi, z których niektóre ułatwiają pisanie poszczególnych etapów przetwarzania, a inne organizują bardziej złożone zadania, które wymagają wielu nakładów i kroków. Jako początkujący użytkownik, najlepszym miejscem na rozpoczęcie jest nauka pisania zadania przesyłania strumieniowego w swoim ulubionym języku skryptowym, ponieważ pozwala to ignorować krwawe szczegóły tego, co dzieje się za kulisami. Jako dojrzały projekt, jednym z największych atutów Hadoop jest zbiór narzędzi do debugowania i raportowania, które został wbudowany. Większość z nich jest dostępna poprzez interfejs sieciowy, który zawiera szczegóły wszystkich uruchomionych i zakończonych zadań i pozwala przejść do błędu i pliki dzienników ostrzeżeń.
Hive
Z Hive możesz programować zadania Hadoop za pomocą SQL. To świetny interfejs dla każdego pochodzące ze środowiska relacyjnej bazy danych, choć szczegóły dotyczące implementacji bazowej nie są całkowicie ukryte. Nadal musisz się martwić o pewne różnice w najbardziej optymalnym sposobie określania połączeń dla najlepszej wydajności i niektórych brakujących funkcji językowych. Hive oferuje możliwość dołączania niestandardowego kodu do sytuacji, które nie pasują do SQL, a także do wielu narzędzi do obsługi danych wejściowych i wyjściowych. Aby z niego skorzystać, należy skonfigurować tabelę strukturalną opisującą dane wejściowe i wyjściowe, wydać komendy ładowania w celu pobrania plików, a następnie wpisać zapytania tak, jak w przypadku każdej innej relacyjnej bazy danych. Należy jednak pamiętać, że ze względu na skupienie się Hadoop na przetwarzaniu w dużej skali, opóźnienie może oznaczać, że nawet proste zadania zajmują minuty, więc nie jest to substytut transakcyjnej bazy danych w czasie rzeczywistym.
Pig
Projekt Apache Pig jest językiem przetwarzania danych proceduralnych zaprojektowanym dla Hadoop. W przeciwieństwie do podejścia Hive polegającego na pisaniu zapytań opartych na logice, za pomocą Pig’a określasz serię kroków do wykonania na danych. Jest bliższy codziennemu językowi skryptowemu, ale posiada wyspecjalizowany zestaw funkcji, które pomagają w rozwiązywaniu typowych problemów z przetwarzaniem danych. Łatwo jest rozbić tekst na ngramy komponentowe, na przykład, a następnie zliczyć, jak często każdy z nich występuje. Obsługiwane są również inne często używane operacje, takie jak filtry i łączenia. Świnka jest zwykle używana, gdy twój problem (lub twoje skłonności) pasuje do podejścia proceduralnego, ale musisz wykonać typowe operacje przetwarzania danych, a nie obliczenia ogólnego przeznaczenia. Świnka została opisana jako “taśma Duct Data” ze względu na jej użyteczność i często jest łączona z niestandardowym kodem strumieniowym napisanym w języku skryptowym dla bardziej ogólnych operacji.
Kaskadowanie
Większość aplikacji Hadoop w świecie rzeczywistym składa się z szeregu kroków przetwarzania, a opcja Kaskadowanie pozwala zdefiniować ten złożony przepływ pracy jako program. Układasz logiczny przebieg potokowania, którego potrzebujesz, zamiast budować go bezpośrednio z Map-Reduce, które zasilają się nawzajem. Aby z niego skorzystać, wywołujesz interfejs API języka Java, łącząc obiekty reprezentujące operacje, które chcesz wykonać na wykresie. System przyjmuje tę definicję, wykonuje pewne sprawdzenia i planowanie oraz wykonuje ją w klastrze Hadoop. Istnieje wiele wbudowanych obiektów dla typowych operacji, takich jak sortowanie, grupowanie i łączenie, i możesz pisać własne obiekty, aby uruchomić niestandardowy kod przetwarzania.
Cascalog
Cascalog to funkcjonalny interfejs przetwarzania danych napisany w Clojure. Pod wpływem starego języka Datalog i opartego na strukturze Cascading, pozwala napisać kod przetwarzający na wysokim poziomie abstrakcji, podczas gdy system dba o to, aby skompletować go do pracy Hadoop. Ułatwia przełączanie między lokalnym wykonaniem na małych ilościach danych w celu przetestowania kodu i zadań produkcyjnych w prawdziwym klastrze Hadoop. Cascalog dziedziczy to samo podejście do kranów wejściowych i wyjściowych i operacji przetwarzania z Kaskadowania, a paradygmat funkcjonalny wydaje się naturalnym sposobem określania przepływów danych. Jest to daleki potomek oryginalnego opakowania Clojure do kaskadowania, kaskadowania-clojure.
mrjob
Mrjob to framework, który pozwala pisać kod do przetwarzania danych, a następnie przezroczyście uruchamiać go lokalnie, na Elastic MapReduce lub na własnym klastrze Hadoop. Napisane w Pythonie nie oferuje tego samego poziomu abstrakcji ani wbudowanych operacji, co kaskadowanie oparte na Javie. Specyfikacje zadań są definiowane jako seria map i redukują kroki, z których każdy jest zaimplementowany jako funkcja Pythona. Świetnie sprawdza się jako framework do wykonywania zadań, a nawet pozwala na dołączanie debuggera do lokalnych przebiegów, aby naprawdę zrozumieć, co dzieje się w kodzie.
Kofeina
Mimo że nie opublikowano na nim żadnych istotnych informacji technicznych, uwzględniam projekt kofeiny Google, ponieważ jest wiele spekulacji, że jest to zamiennik paradygmatu MapReduce. Z raportów i komentarzy firmy wynika, że Google korzysta z nowej wersji systemu plików Google obsługującej mniejsze pliki i rozproszone wzorce. Wygląda również na to, że firma przestawiła się z przetwarzania wsadowego na tworzenie indeksu wyszukiwania, zamiast tego używa dynamicznej bazy danych, aby przyspieszyć aktualizację. Nic nie wskazuje na to, że Google opracuje nowe podejście algorytmiczne, które jest tak szeroko stosowane jak MapReduce, choć nie mogę się doczekać, aby dowiedzieć się więcej o nowej architekturze.
S4
Yahoo! Początkowo tworzył system S4, aby podejmować decyzje dotyczące wyboru i pozycjonowania reklam, ale firma otworzyła go po znalezieniu przydatnym do przetwarzania dowolnych strumieni zdarzeń. S4 pozwala pisać kod do obsługi nielimitowanych strumieni zdarzeń i uruchamia je rozproszone na klastrze maszyn, wykorzystując strukturę ZooKeeper do obsługi szczegółów sprzątania. Piszemy źródła danych i procedury obsługi w Javie, a S4 obsługuje nadawanie danych jako zdarzeń w całym systemie, równoważąc obciążenie pracą na dostępnych maszynach. Skupia się na szybkim powracaniu wyników, z niskim opóźnieniem, dla aplikacji takich jak budowanie w pobliżu wyszukiwarek w czasie rzeczywistym na szybko zmieniających się treściach. To odróżnia ją od Hadoop i ogólnego podejścia MapReduce, które obejmuje etapy synchronizacji w obrębie potoku, a więc pewien stopień opóźnienia. Należy pamiętać, że S4 używa UDP i generalnie nie oferuje gwarancji dostawy dla danych przechodzących przez potok. Zwykle wydaje się możliwe dostosowanie wielkości kolejek w celu uniknięcia utraty danych, ale nakłada to obciążenie na osiągnięcie wymaganego poziomu niezawodności na twórcy aplikacji.
MapR
MapR to komercyjna dystrybucja Hadoop skierowana do przedsiębiorstw. Obejmuje własny systemy plików, które zastępują HDFS, wraz z innymi poprawkami do frameworka, takimi jak rozproszone węzły nazw dla zwiększenia niezawodności. Nowy system plików ma na celu zwiększenie wydajności, a także łatwiejsze tworzenie kopii zapasowych i kompatybilność z NFS, aby ułatwić przesyłanie danych. Model programowania nadal jest standardową wersją Hadoop; nacisk kładziony jest na poprawę infrastruktury otaczającej podstawowe ramy, aby uczynić ją bardziej atrakcyjną dla klientów korporacyjnych
Acunu
Podobnie jak MapR, Acunu jest nową niskopoziomową warstwą do przechowywania danych, która zastępuje tradycyjną system plików, choć jego początkowym celem jest raczej Cassandra niż Hadoop. Pisząc magazyn kluczy / wartości o nazwie Kernel o nazwie Castle, który jest twórcą open-source, twórcy są w stanie zaoferować imponujące zwiększenie prędkości w wielu przypadkach. Struktury danych podnoszące wydajność są również imponujące. Acunu oferuje również niektóre tradycyjne zalety komercyjnie obsługiwanej dystrybucji, takie jak automatyczna konfiguracja i inne narzędzia administracyjne.
Flume
Jednym z typowych zastosowań Hadoop jest pobieranie serwera WWW lub innych dzienników z dużej liczby komputerów i okresowe ich przetwarzanie w celu wyciągnięcia danych analitycznych. Projekt Flume został zaprojektowany, aby proces gromadzenia danych był łatwy i skalowalny, poprzez uruchamianie agentów na maszynach źródłowych, które przekazują aktualizacje danych do kolektorów, które następnie agregują je w duże porcje, które można efektywnie zapisać jako pliki HDFS. Zwykle konfiguruje się go za pomocą narzędzia wiersza poleceń, które obsługuje typowe operacje, takie jak śledzenie pliku lub odsłuchiwanie w gnieździe sieciowym, i ma przestrajalne gwarancje niezawodności, które pozwalają zmniejszyć wydajność i możliwość utraty danych.
Kafka
Kafka to stosunkowo nowy projekt do wysyłania dużej liczby wydarzeń od producentów do konsumentów. Pierwotnie zbudowany w celu połączenia witryny LinkedIn z systemami zaplecza, znajduje się gdzieś pomiędzy S4 i Flume w jego funkcjonalności. W przeciwieństwie do S4, jest trwały i oferuje więcej zabezpieczeń niż system oparty na UDP, ale stara się zachować rozproszony charakter i niewielkie opóźnienie. Można go używać w bardzo podobny sposób do Flume, zachowując wysoką przepustowość, ale z bardziej elastycznym systemem do tworzenia wielu klientów i bazową architekturą, która jest bardziej skoncentrowana na równoległości. Kafka polega na ZooKeeper, aby śledzić jego rozproszone przetwarzanie
Azkaban
Najtrudniejszą częścią budowania działającego systemu przy użyciu tych nowych narzędzi danych jest integracja. Poszczególne usługi muszą być powiązane w sekwencje operacji, które są uruchamiane przez Twoją logikę biznesową, a budowanie tego systemu hydraulicznego jest zaskakująco czasochłonne. Azkaban to projekt open source z LinkedIn, który pozwala zdefiniować, co chcesz zrobić jako przepływ pracy, prawdopodobnie składa się z wielu zależnych kroków, a następnie obsługuje wiele bałaganu szczegółów sprzątania. Śledzi wyniki logów, lokalizuje błędy i wiadomości e-mail dotyczące błędów w momencie ich wystąpienia, a także zapewnia przyjazny interfejs WWW, dzięki czemu można zobaczyć, jak pracują. Zadania są tworzone jako pliki tekstowe, przy użyciu bardzo minimalnego zestawu komend, o dowolnej złożoności oczekiwanej w komendach uniksowych lub programach Java, które wywołuje krok.
Oozie
Oozie to system kontroli pracy, który jest podobny do Azkabanu, ale koncentruje się wyłącznie na nim Hadoop. To nie jest tak duża różnica, jak mogłoby się wydawać, ponieważ większość użytkowników Azkabanu, z którymi się zetknąłem, była również dla Hadoop, ale oznacza to, że integracja Oozie jest nieco bardziej zwarta, szczególnie jeśli korzystasz z Yahoo! dystrybucja obu. Oozie obsługuje również bardziej złożony język do opisywania przepływów pracy, umożliwiając podejmowanie decyzji o działaniu, które są opisane w plikach XML. Istnieje również interfejs API, za pomocą którego można budować własne rozszerzenia funkcjonalności systemu. W porównaniu do Azkabanu, interfejs Ooziego jest mocniejszy, ale także bardziej złożony, dlatego wybór zależy od tego, ile potrzebujesz zaawansowanych funkcji Oozie.
Greenplum
Choć nie jest to całkowicie baza danych NoSQL, system Greenplum oferuje interesujący sposób połączenia elastycznego języka zapytań z rozproszoną wydajnością. Zbudowany na bazie otwartego kodu źródłowego Postgres, dodaje rozproszoną architekturę do uruchomienia na klastrze wielu maszyn, przy jednoczesnym zachowaniu standardowego interfejsu SQL. Automatycznie przesuwa wiersze między komputerami, domyślnie w oparciu o skrót klucza podstawowego tabeli i zapobiega utracie danych zarówno przy użyciu konfiguracji dysków RAID na poszczególnych serwerach, jak i replikacji danych między komputerami. Zwykle jest wdrażany na klastrach maszyn o stosunkowo szybkich procesorach i dużych ilościach pamięci RAM, w przeciwieństwie do standardowego sprzętu, który jest bardziej powszechny w świecie WWW.