Apache Hadoop framework do pisania aplikacji rozproszonych



Podobne dokumenty
XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

Projektowanie rozwiązań Big Data z wykorzystaniem Apache Hadoop & Family

ALGORYTMICZNA I STATYSTYCZNA ANALIZA DANYCH

Architektura rozproszonych magazynów danych

Map Reduce Wprowadzenie do Apache Hadoop

Hadoop i Spark. Mariusz Rafało

REFERAT PRACY DYPLOMOWEJ

Wprowadzenie do Hurtowni Danych

Tworzenie i obsługa wirtualnego laboratorium komputerowego

Robert Barański, AGH, KMIW Writing TDM and TDMS Files in LabVIEW v1.0

Hurtownie danych wykład 5

Wprowadzenie do Apache Spark. Jakub Toczek

Analiza i projektowanie aplikacji Java

Organizacyjnie. Prowadzący: dr Mariusz Rafało (hasło: BIG)

AUREA BPM Oracle. TECNA Sp. z o.o. Strona 1 z 7

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Słowa kluczowe jak góry lodowe

<Nazwa firmy> <Nazwa projektu> Specyfikacja dodatkowa. Wersja <1.0>

Podstawowe pojęcia dotyczące relacyjnych baz danych. mgr inż. Krzysztof Szałajko

System kontroli wersji - wprowadzenie. Rzeszów,2 XII 2010

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Międzyplatformowy interfejs systemu FOLANessus wykonany przy użyciu biblioteki Qt4

MapReduce. Janina Mincer-Daszkiewicz Systemy rozproszone. MSUI, II rok

ActiveXperts SMS Messaging Server

Temat: Ułatwienia wynikające z zastosowania Frameworku CakePHP podczas budowania stron internetowych

Programowanie obiektowe zastosowanie języka Java SE

System zarządzania firmą specyfikacja techniczna.

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Instalacja SQL Server Express. Logowanie na stronie Microsoftu

Wykonać Ćwiczenie: Active Directory, konfiguracja Podstawowa

Modelowanie i Programowanie Obiektowe

OSGi Agata Hejmej

Hbase, Hive i BigSQL

Big Data to skalowalność i prostota obsługi wielkich ilości danych!

Projektowanie rozwiązań Big Data z wykorzystaniem Apache Hadoop & Family

Podstawowe zagadnienia z zakresu baz danych

Pierwsze kroki. Algorytmy, niektóre zasady programowania, kompilacja, pierwszy program i jego struktura

Dokumentacja techniczna. Młodzieżowe Pośrednictwo Pracy

Dni: 2. Partner merytoryczny. Opis: Adresaci szkolenia

System zarządzający grami programistycznymi Meridius

Organizacyjnie. Prowadzący: dr Mariusz Rafało (hasło: BIG)

Architektura Systemu. Architektura systemu umożliwia kontrolowanie iteracyjnego i przyrostowego procesu tworzenia systemu.

Programowanie obiektowe

UMOWY CYWILNOPRAWNE Instalacja, rejestracja i konfiguracja programu

Przetwarzanie danych z wykorzystaniem technologii NoSQL na przykładzie serwisu Serp24

Procesowa specyfikacja systemów IT

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

Generated by Foxit PDF Creator Foxit Software For evaluation only. System Szablonów

DESlock+ szybki start

ang. file) Pojęcie pliku (ang( Typy plików Atrybuty pliku Fragmentacja wewnętrzna w systemie plików Struktura pliku

CZĘŚĆ I. WARSTWA PRZETWARZANIA WSADOWEGO

EXSO-CORE - specyfikacja

Analiza i projektowanie oprogramowania. Analiza i projektowanie oprogramowania 1/32

Baza danych. Baza danych to:

Jednym z najważniejszych zagadnień, z którym może się zetknąć twórca

Od uczestników szkolenia wymagana jest umiejętność programowania w języku C oraz podstawowa znajomość obsługi systemu Linux.

Dokumentacja projektu QUAIKE Architektura oprogramowania

Konspekt pracy inżynierskiej

76.Struktura oprogramowania rozproszonego.

Programowanie dla początkujących w 24 godziny / Greg Perry, Dean Miller. Gliwice, cop Spis treści

edziennik Ustaw Opis architektury

Automatyczna instalacja oprogramowania.

Od programowania wizualnego do tekstowego

Programowanie w języku Python. Grażyna Koba

Tom 6 Opis oprogramowania

Analityka danych w środowisku Hadoop. Piotr Czarnas, 27 czerwca 2017

Wykład Ćwiczenia Laboratorium Projekt Seminarium

Rozwiązanie Compuware dynatrace

Java w 21 dni / Rogers Cadenhead. Gliwice, cop Spis treści. O autorze 11. Wprowadzenie 13 TYDZIEŃ I JĘZYK JAVA

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

WYKORZYSTANIE I ROZWÓJ WOLNEGO OPROGRAMOWANIA W WOJEWÓDZKIM WĘŹLE INFRASTRUKTURY INFORMACJI PRZESTRZENNEJ

OPROGRAMOWANIE WSPOMAGAJĄCE ZARZĄDZANIE PROJEKTAMI. PLANOWANIE ZADAŃ I HARMONOGRAMÓW. WYKRESY GANTTA

Biorąc udział w projekcie, możesz wybrać jedną z 8 bezpłatnych ścieżek egzaminacyjnych:

Programowanie Komponentowe WebAPI

Maciej Piotr Jankowski

Informacje wstępne Autor Zofia Kruczkiewicz Wzorce oprogramowania 4

Środowiska i platformy programistyczne

Systemy baz danych w zarządzaniu przedsiębiorstwem. W poszukiwaniu rozwiązania problemu, najbardziej pomocna jest znajomość odpowiedzi

Metody eksploracji danych w odkrywaniu wiedzy (MED) projekt, dokumentacja końcowa

Historia modeli programowania

PDM wbudowany w Solid Edge

Tom 6 Opis oprogramowania Część 8 Narzędzie do kontroli danych elementarnych, danych wynikowych oraz kontroli obmiaru do celów fakturowania

Wprowadzenie do optymalnego wykorzystania MapReduce

Grzegorz Ruciński. Warszawska Wyższa Szkoła Informatyki Promotor dr inż. Paweł Figat

Uniwersytet Warszawski Wydział Matematyki, Informatyki i Mechaniki. Paweł Parys. Nr albumu: Aukcjomat

SOA Web Services in Java

Język R : kompletny zestaw narzędzi dla analityków danych / Hadley Wickham, Garrett Grolemund. Gliwice, cop Spis treści

Wykorzystanie standardów serii ISO oraz OGC dla potrzeb budowy infrastruktury danych przestrzennych

Podstawy programowania

CUDA Median Filter filtr medianowy wykorzystujący bibliotekę CUDA sprawozdanie z projektu

Wykład V. Rzut okiem na języki programowania. Studia Podyplomowe INFORMATYKA Podstawy Informatyki

Raport Hurtownie Danych

Struktury systemów operacyjnych

Baza danych sql. 1. Wprowadzenie

Szablony funkcji i klas (templates)

1. Mapowanie diagramu klas na model relacyjny.

java.util.* :Kolekcje Tomasz Borzyszkowski

Dni: 3. Opis: Adresaci szkolenia

SYSTEMY OPERACYJNE: STRUKTURY I FUNKCJE (opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX)

Transkrypt:

Apache Hadoop framework do pisania aplikacji rozproszonych Piotr Praczyk Wprowadzenie Istnieje wiele rodzajów obliczeń, których wykonywanie na pojedynczej maszynie, nawet najpotężniejszej, jest zbyt czasochłonne. Wśród takich zadań wymienić można analizowanie skomplikowanych danych (na przykład Seti@Home, dane z LHC etc...), albo przetwarzanie ogromnych ich ilości (na przykład Google Maps). Z tego powodu rozwijane są narzędzia ułatwiające wykonywanie obliczeń na wielu komputerach jednocześnie. W przypadku tradycyjnych podejść, programista musi samemu rozwiązywać problemy narastające między innymi kiedy więcej niż jeden działający fragment obliczenia chce uzyskać dostęp do zasobu, kiedy potrzebna jest komunikacja między maszynami itp. Google zaproponował własny paradygmat tworzenia aplikacji rozproszonych, Map Reduce [1] Struktura programów napisanych zgodnie z nim, ułatwia rozwiązywanie wielu skomplikowanych problemów współbieżności automatycznie, ułatwiając zadanie programisty. Przedstawione podejście sprawdza się wyjątkowo dobrze w przypadku programowania zadań wymagających przetwarzania dużych ilości danych. Apache Hadoop jest wolną implementacją Map Reduce. Jest wykorzystywany przez wiele dużych firm takich, jak Yahoo, Amazon czy Facebook. Google posiada własną implementację Map Reduce, którą wykorzystuje wewnętrznie. Hadoop składa się z oprogramowania uruchamianego na maszynach przeznaczonych do wykonywania obliczeń i przechowywania danych oraz z zestawu bibliotek

Apache Hadoop framework do pisania aplikacji rozproszonych 59 Rys 1 Elementy zadania Map Reduce umożliwiających pisanie zadań. Językiem, w którym Hadoop jest napisany, jest głównie Java. Konsekwencją tego jest dostarczenie największej liczby interfejsów programistycznych dla tego języka. Również najbardziej naturalną metodą tworzenia programów działających pod kontrolą Hadoop, jest dostarczenie odpowiednich klas w Javie. Istnieje możliwość wykorzystania dowolnego innego języka programowania. Czasami możliwe jest również uruchomienie istniejącego programu, jako części zadania Map Reduce, bez ingerencji w jego strukturę wewnętrzną. Podstawy Map Reduce W najprostszym przypadku, przygotowanie zadania dla Map Reduce, sprowadza się do zaimplementowania dwóch funkcji, map oraz reduce. Konieczne jest również zdefiniowanie położenia danych wejściowych oraz miejsca, gdzie mają być składowane wyniki. Zadaniem funkcji map jest wykonanie pewnych obliczeń na przekazanym jej fragmencie danych wejściowych oraz wygenerowanie ciągu par składających się z klucza oraz przypisanej mu wartości. Dane wygenerowane w tym kroku, są agregowane z wykorzystaniem klucza oraz przekazywane do funkcji reduce. Każde wywołanie reduce związane jest z jednym kluczem oraz listą wszystkich odpowiadających mu wartości. Zadanie funkcji reduce polega na wygenerowaniu par stanowiących wynik obliczenia. Są one zapisywane w lokalizacji wskazanej jako wyjściowa. Rysunek 1 pokazuje strukturę dowolnego obliczenia Map Reduce. Dopóki cały opisany proces odbywa się na jednej maszynie, stosowanie infrastruktury związanej z Map Reduce wiąże się głównie ze stratami wydajności. Jeśli jednak dane wejściowe są odpowiednio duże, implementacja Map Reduce (na przykład Hadoop) zadba o to, aby obliczenia zostały automatycznie rozproszone. Rysunek 2 przedstawia schemat wykonania zadania przygotowanego dla Hadoop na wielu maszynach jednocześnie. Na pierwszy rzut oka, rozwiązanie wydaje się dość niewydajne, ponieważ przesyłanie dużych ilości danych za pośrednictwem sieci jest stosunkowo wolnym procesem. Hadoop stara się umieszczać obliczenia na tych samych maszynach, gdzie przechowywane są dane. Jeśli nie jest to możliwe, obliczenia wykonywane są w miejscach, które są bliskie ze względu na szybkość połączenia sieciowego. Klasycznym przykładem zastosowania paradygmatu Map Reduce, opisanym w [1], jest generowanie statystyk słów pojawiających się w tekście przekazanym jako wejście. Funkcja map, odpowiedzialna może być w takim przypadku za podzielenie otrzymanego napisu na wyrazy oraz wygenerowanie par zawierających wyraz jako klucz oraz liczbę 1 jako wartość. W następnym kroku, framework automatycznie pogrupuje pary ze względu na słowa będące kluczami par. Zadaniem funkcji reduce

60 Piotr Praczyk Rys 2 Struktura rozproszonego Map Reduce Rys 3 Liczenie statystyk słów w tekście z wykorzystaniem Map Reduce będzie policzenie, ile par zostało przekazanych dla danego słowa, oraz zwrócenie pary składającej się z rozważanego słowa oraz liczby jego wystąpień. Rysunek 3 pokazuje, jak może przebiegać liczenie słów w przykładowym tekście. Implementacje zadań Domyślnym sposobem implementacji zadań dla Hadoop, jest przygotowanie klas Javy, implementujących interfejsy Mapper oraz Reducer odpowiedzialne odpowiednio za etapy map oraz reduce tworzonego zadania. Oba interfejsy wymagają, aby zostały określone typy par pojawiających się na wejściu oraz wyjściu odpowiednich kroków, z tego powodu są zaimplementowane jako interfejsy generyczne pobierające 4 typy jako argumenty. Składnia dla tych interfejsów przedstawiona jest na listingu 1

Apache Hadoop framework do pisania aplikacji rozproszonych 61 Mapper<InputKeyType, InputValType, IntermKeyType, IntermValType> Reducer<IntermKeyType, IntermValType, OutputKeyType, OutputValType> Listing 1 Składnia interfejsów wykorzystywanych przy implementacji zadań Map Reduce w Javie Odporność na awarie Hadoop został zaprojektowany, aby możliwe było wykonywanie z jego pomocą obliczeń na zwyczajnych komputerach. Wiąże się to z o wiele większą podatnością na awarie i błędy. Jeden z węzłów wykorzystywanego klastra jest odpowiedzialny za śledzenie obliczeń. Jeśli wykryta zostanie awaria, część zadania jest powtarzana na innej m aszynie. W jaki sposób wspierane są heurystyki dbające o lokalność obliczeń? Aby możliwe było wykonywanie obliczeń w pobliżu danych przeznaczonych do przetworzenia, konieczne jest posiadanie informacji na temat ich lokacji. Stosowanie zwykłego systemu plików, dostarczanego przez system operacyjny nie jest dobrym rozwiązaniem ze względu na wysoki poziom abstrakcji danych. W przypadku systemów unixowych, system stara się ukryć szczegóły dotyczące fizycznego przechowywania danych poprzez utrzymywanie wirtualnego drzewa katalogów. Dzięki temu możliwe jest działanie tych samych programów na różnych zbiorach danych, często przechowywanych w sposób nie rozważany w trakcie pisania aplikacji. Jednocześnie jednak program taka nie jest w stanie odróżnić, czy plik znajduje się na lokalnej maszynie, czy może jest jedynie widoczny za pośrednictwem sieciowego systemu plików a zatem nie jest w stanie określić, jak kosztowne będzie jego odczytanie. Z tego powodu konieczne jest zastosowanie innych rozwiązań. HDFS Domyślną metodą przechowywania danych przez Hadoop jest dedykowany rozproszony system plików, HDFS (Hadoop Distributed File System). Został on zaprojektowany, aby zoptymalizować wykonywanie czynności związanych z Map Reduce, takich jak szybki dostęp do dużych, spójnych obszarów danych, udostępnianie informacji o fizycznym ich położeniu, tworzenie kopii danych na innych maszynach zgodnie z topologią sieci. Aby przyspieszyć powyższe operacje, niektóre standardowe wymagania stawiane przed systemem plików, wymienione w specyfikacji POSIX, nie zostały spełnione. W HDFS wspierany jest model, według którego pliki zapisywane są tylko raz, lecz mogą być odczytywane wielokrotnie. Możliwe jest również dopisywanie danych na końcu istniejących już plików, jednak w obecnej wersji funkcjonalność ta nie jest jeszcze uważana za stabilną. Aby zapewnić całkowitą lokalność danych, te same maszyny powinny być wykorzystywane do obliczeń jak i przechowywania danych.

62 Piotr Praczyk Ze względu na to, że zadania Map Reduce, z natury przetwarzają duże ilości danych, system plików HDFS posiada duży rozmiar bloku. Dzięki temu, obciążenie związane z przechowywaniem i uzyskiwaniem metadanych jest o wiele mniejsze niż w przypadku standardowych rozwiązań. konsekwencją takiego podejścia jest jednak to, że HDFS nie nadaje się do przechowywania wielu małych plików [2]. Za każdym razem kiedy plik jest zapisywany, najmniejsza liczba bloków dostarczająca potrzebnej przestrzeni dyskowej, jest alokowana. Jeśli plik nie wykorzystuje pełnego bloku, reszta pozostaje pusta. Uruchamiając zadanie Hadoop, jako parametr można przekazać foldery służące do przechowywania tych danych. Wszystkie operacje na plikach zostaną wykonane automatycznie a program otrzyma na wejściu odpowiednie pary. Istnieje sterownik wykorzystujący bibliotekę Fuse, który pozwala na zmontowanie HDFS w drzewie katalogów. Domyślnym sposobem dostępu do systemu plików jest jednak wywołanie Hadoop z parametrem dfs. Udostępniane operacje są podobne do tych udostępnianych przez powłokę systemową w stosunku do zwykłych sys temów plików. HBase Czasami system plików nie jest najlepszym rozwiązaniem. Może tak się zdarzyć, kiedy na przykład specyfika rozwiązywanego problemu wymaga przechowywania wielu niewielkich porcji danych. HBase jest implementacją rozproszonej bazy danych BigTable, przedstawionej przez Google w [3]. HBase nie jest relacyjną bazą danych, lecz tak zwanym Key-value store. Dane przechowywane są w strukturze przypominającej wielopoziomowy słownik. Kluczami są dowolne ciągi bajtów. Dane są fizycznie przechowywane w kolejności leksykograficznej względem klucza, co pozwala na szybkie wyszukiwanie oraz na pewne optymalizacje przy tworzeniu zadań. Podobnie, jak w przypadku HDFS, HBase została zoptymalizowana pod kątem operacji typowych dla Map Reduce. Zrezygnowano z funkcjonalności, które były kosztowne w przypadku rozproszonych, relacyjnych baz danych. Z tego powodu nie ma możliwości definiowania logicznych powiązań między danymi, takich jak klucze obce. Również obsługa transakcji jest bardzo okrojona i ogranicza się do atomowego wykonywania ciągu operacji dotyczących jednego wiersza. W chwili pisania tego teksu, jedynie API dla języka Java było dostępne. Możliwość implementacji własnych formatów wejściowych Lista możliwych źródeł danych wejściowych oraz sposobów zapisywania wyników nie ogranicza się do opisanych powyżej. Możliwe jest wykorzystanie tradycyjnych systemów plików oraz relacyjnych baz danych, w przypadku których korzyści związane z lokalnością obliczeń zostaną utracone. Istnieje również możliwość implementacji własnych źródeł danych. Zadanie takie sprowadza się do napisania zestawu klas w Javie, implementujących interfejsy InputFormat, RecordReader oraz InputSplit. Dzięki temu możliwa jest współpraca zadań Hadoop z dowolnymi nośnikami, możliwe jest konwertowanie danych w locie a nawet generowanie ich w czasie wykonania.

Apache Hadoop framework do pisania aplikacji rozproszonych 63 Sytuacja wygląda podobnie w przypadku sposobów przechowywania wyników. Alternatywne metody implementacji zadań Map Reduce Często implementacja zadań w języku Java nie jest najwygodniejszym rozwiązaniem. Powodem mogą być sytuacje kiedy zamknięta biblioteka programistyczna, niedostępna w Javie, musi zostać wykorzystana. Czasami wygodne mogło by być również wykorzystywanie gotowych programów, jako zadań Map Reduce. Hadoop udostępnia dwa interfejsy pozwalające na wykorzystanie innych języków programowania. Stosowanie ich wiąże się z pewnymi ograniczeniami w stosunku do stosowania natywnej implementacji. W niektórych sytuacjach może być jednak wygodne. Streaming Najbardziej uniwersalnym interfejsem programistycznym jest Hadoop Streaming. Pozwala on na wykorzystanie dowolnego programu w obu krokach wykonywania zadania Map Reduce. Dane wejściowe przekazywane są za pomocą standardowego wejścia. Dane wyjściowe powinny zostać przekazane przez standardowe wyjście. Ponieważ dane składają się z ciągu par klucz, wartość, zdefiniowany jest sposób interpretacji napisów. Każda linia koduje jedną parę. Istnieje możliwość zdefiniowania separatora. W obecnej wersji Hadoop nie wspiera przekazywania danych binarnych przy stosowaniu Streamingu, są jednak plany zaimplementowania tej funkcjonalności w przyszłości. Dzięki opisanemu sposobowi komunikacji z frameworkiem, możliwe jest wykorzystanie istniejących programów jako zadań Hadoop. Możliwe jest również uruchamianie ciągów poleceń powłoki. Pipes Kolejny z dostarczonych interfejsów programistycznych jest dedykowany dla języka C++. Zamiast implementacji klas w Javie, umożliwia on dostarczenie klas C++. Muszą one dziedziczyć po klasach zdefiniowanych w odpowiednim pliku nagłówkowym będącym częścią dystrybucji Hadoop. Rozwiązanie te jest mniej uniwersalne, jednak pozwala na większą kontrolę nad zadaniem. Dzięki zastosowaniu struktur danych języka programowania, łatwy jest dostęp do wewnętrznych struktur opisujących zadanie. Są one mapowane na odpowiednie obiekty C++. Podobnie, jak w przypadku stosowania Streamingu, pojawiają się problemy przy przekazywaniu danych binarnych. Przy zastosowaniu SWIG, możliwe jest stworzenie wrapperów dla wielu języków programowania. Stosowanie zarówno Hadoop Pipes jak i Streamingu, może łączyć się z wykorzystaniem dowolnych formatów wejściowych, wyjściowych oraz innych wtyczek dla Hadoop. Elementy te muszą być jednak zaimplementowane w Javie.

64 Piotr Praczyk Projekty związane z Map Reduce Poza HBase, istnieją również inne projekty związane z Hadoop, rozszerzające jego możliwości albo pozwalające na wykonywanie konkretnych rodzajów obliczeń. Kilka przykładów zostało opisanych poniżej. Dumbo Dumbo jest biblioteką języka Python, oraz zestawem narzędzi usprawniających pisanie zadań korzystających z Hadoop Streaming. Wśród dostarczanych udogodnień, warto wymienić automateczne parsowanie wejścia i przekazywanie go do funkcji map i reduce za pomocą odpowiednich struktur danych oraz wsparcie dla przekazywania danych binarnych. Hama Hama jest biblioteką pozwalającą na wykonywanie operacji na dużych macierzach z wykorzystaniem Map Reduce a w szczególności Hadoop. W obecnym stadium rozwoju brakuje jej wiele funkcji, jak liczenia wartości własnych, w związku z czym jest rozwijana w ramach Apache Incubator. Mahout Projekt Mahout ma na celu dostarczenie bibliotek wspomagających uczenie maszynowe, wykorzystujących Hadoop w celu wykonywania obliczeń. Hadoop a Cloud Computing Najbardziej oczywistą metodą uzyskania dostępu do klastra działającego pod kontrolą Hadoop jest własnoręczne skonfigurowanie takiego. Nie jest to jednak jedyna możliwość. Firma Amazon, udostępnia instalację Hadoop w ramach swoich serwisów Cloud Computing [4]. Korzystając ze strony internetowej, możliwe jest uruchomienie dowolnej liczby maszyn mających wykonywać zadania Map Reduce. Opłaty pobierane są od godziny działania instalacji. Dzięki takiemu podejściu, możliwe jest dynamiczne rezerwowanie oraz zwalnianie potrzebnych zasobów co może prowadzić do zmniejszenia kosztów działania instalacji. Niekorzystnym efektem pojawiającym się przy stosowaniu rozwiązania Amazon jest to, że dane trzymane są domyślnie w sieciowym systemie plików S3. W efekcie, rozwiązanie nie korzysta z lokalności obliczeń. Czasami jednak, na przykład kiedy ilość obliczeń jest duża w porównaniu z ilością danych, nie ma to dużego znaczenia. Couldera Firma Cloudera dostarcza komercyjną dystrybucję Hadoop zawierającą dodatkowe narzędzia konfiguracyjne. Oferuje również wsparcie techniczne.

Podsumowanie Apache Hadoop framework do pisania aplikacji rozproszonych 65 Map Reduce wydaje się być dobrą alternatywą dla standardowych API umożliwiających pisanie aplikacji rozproszonych. Wiele problemów daje się wyrazić za pomocą tego paradygmatu w bardzo naturalny sposób, czyniąc powstałe programy bardziej czytelnymi. Pomimo stosunkowo wczesnej fazy rozwoju, projekt Hadoop udowodnił już swoją przydatność. Wiele znanych firm wykorzystuje go do przetwarzania danych na wielką skalę. Dzięki przejrzystej strukturze Map Reduce, łatwo jest zacząć pisać własne zadania działające pod kontrolą Hadoop. Implementacja pozwalająca pisać własne wtyczki, jak na przykład formaty wejścia i wyjścia, zwiększa rozdział komponentów programu sprawiając, że podatność na błędy jest o wiele mniejsza. Literatura [1] J. Dean and S. Ghemawat, Mapreduce: simplified data processing on large clusters, Commun. ACM 51 (2008), no. 1, 107 113 [2] T. White The Small Files Problem. [3] F. Changet al. Bigtable: a distributed storage system for structured data, in OSDI 06: Proceedings of the 7th symposium on Operating systems design and implementation (USENIX Association, Berkeley, CA, USA, 2006), pp. 205 218. [4] Amazon Elastic MapReduce.