Apache Hadoop

De la Wikipedia, enciclopedia liberă
Apache Hadoop
Hadoop Logo
Autor inițialDoug Cutting[*][[Doug Cutting (American information theorist)|​]]
Mike Cafarella[*][[Mike Cafarella (American computer scientist)|​]]  Modificați la Wikidata
DezvoltatorApache Software Foundation
Versiune inițială
Ultima versiune2.7.1 (  (2015-07-06)[1])
Preversiune2.1.0-beta (  (2013-08-25)[1])
Repogit-wip-us.apache.org/repos/asf/hadoop.git Modificați la Wikidata
Stare de dezvoltareActiv
Scris înJava
Sistem de operareCross-platform
PlatformăJava Virtual Machine[*][[Java Virtual Machine (runtime environment that can execute Java bytecode as a result of compiling computer programs written in the Java programming language)|​]]  Modificați la Wikidata
TipDistributed File System
LicențăApache License 2.0
Prezență online
hadoop.apache.org

Apache Hadoop este un framework de dezvoltare de software[2] pentru cloud computing, care permite scrierea și executarea aplicațiilor distribuite ce procesează cantități mari de date sub o licență liberă. Aplicațiile se pot executa pe sute de sisteme de calcul independente și pot prelucra petabytes de informații.

Hadoop ofera un mediu de stocare partajat de înaltă disponibilitate și o analiză a sistemului. [3] Înalta disponibilitate în distribuirea datelor și procesarea pe mai multe clustere de calculatoare se fundamentează pe detectarea și corectarea erorilor la nivel de aplicație. (Hadoop: The Definitive Guide 2010, p. 4)

Hadoop a fost creat prin implementarea documentației proiectelor Google MapReduce și Google File System (GFS). Hadoop este un proiect Apache de prim rang, creat și utilizat de o comunitate globală de participanți, dezvoltat în limbajul de programare Java.[4] Yahoo a avut cea mai mare contribuție la crearea Hadoop,[5] pe care l-a utilizat într-o varietate amplă de proiecte de afaceri. [6]

Istoric[modificare | modificare sursă]

Fondatorul Hadoop este Doug Cutting, care a preluat informații din documentele publicate de Google și a implementat Google File System și Map reduce în Nutch.

Arhitectura[modificare | modificare sursă]

Hadoop constă în utilitarele Hadoop Common, care oferă acces la sistemul de fișiere Hadoop. Pachetul Hadoop Common conține fișierele în format JAR și scripturile necesare pentru a lansa Hadoop. Pachetul software care conține utilitarele Hadoop Common include de asemenea și codul sursă, documentația și secțiunea de contribuții, care reunește proiecte ale comunității de dezvoltatori Hadoop.

În scopul obținerii unei planificări eficiente a activității, fiecare sistem de fișiere compatibil cu Hadoop trebuie să furnizeze informații legate de amplasament: numele switch-ului sau al suportului în care se află un nod care îndeplinește activitatea.

Aplicațiile Hadoop pot folosi aceste informații pentru a executa activități pe nodul în care se află informațiile, iar în eventualitatea în care eșuează în acest demers, pentru a comuta execuția pe același suport sau switch, pentru a reduce traficul pe magistrala principală de comunicație. Sistemul distribuit de fișiere Hadoop (HDFS) utilizează acest mecanism la replicarea informațiilor, pentru a păstra copii diferite ale acestora pe suporturi distincte. Obiectivul urmărit constă în reducerea impactului unei pene de curent la nivelul suportului sau al unei defecțiuni a unui switch, pentru ca informațiile să poată fi accesibile la citire în aceste scenarii.[7]

Un cluster Hadoop de dimensiuni reduse va conține un singur nod cu rol de comandă și mai multe noduri subordonate. Nodul cu rol de comandă include JobTracker, TaskTracker, NameNode și DataNode. Un nod subordonat sau cu rol de execuție îndeplinește funcțiile specifice atât pentru DataNode cât și pentru TaskTracker. Există de asemenea posibilitatea de a dispune și de noduri cu rol de execuție specializate exclusiv pe stocarea informațiilor sau pe realizarea de operații. Categoriile acestea de noduri sunt utilizate exclusiv în aplicații nestandardizate. Hadoop necesită JRE versiunea 1.6 sau o versiune mai recentă. Scripturile standard de lansare și de oprire necesită setarea ssh între nodurile din cluster.

Într-un cluster mai mare, controlul asupra HDFS se execută printr-un server dedicat NameNode, care stochează indexul sistemului de fișiere și printr-un NameNode secundar, care poate genera instantanee ale structurilor de memorie cu numele nodurilor, prevenind astfel coruperea sistemului de fișiere și reducând pierderea informațiilor. În mod similar, un server JobTracker independent poate executa controlul asupra planificării activităților. În clusterele în care Hadoop MapReduce este implementat în conjuncție cu un sistem de fișiere alternativ, arhitectura HDFS care cuprinde NameNode, NameNode secundar și DataNode este substituită cu un sistem de fișiere specific echivalent.

Sistemele de fișiere[modificare | modificare sursă]

Sistemul distribuit de fișiere Hadoop[modificare | modificare sursă]

HDFS este un sistem de fișiere distribuit, scalabil și portabil, scris în Java, pentru framework-ul Hadoop. Fiecare nod dintr-o instanță Hadoop are în mod uzual un singur nod pentru stocarea informației. Un cluster de noduri pentru stocarea informațiilor formează un cluster HDFS. Situația este specifică, întrucât nodurile nu necesită prezența unui DataNode. Fiecare DataNode deservește blocuri de informație din rețea prin intermediul unui protocol specific sistemului HDFS. Sistemul de fișiere utilizează protocolul TCP/IP pentru comunicație, în timp ce stațiile client utilizează protocolul RPC pentru a comunica între ele. HDFS stochează fișiere de dimensiuni mari (mărimea ideală a unui fișier este de 64MB[8]), utilizând mai multe mașini de calcul. Replicarea informațiilor pe mai multe mașini gazdă conferă fiabilitate și nu necesită stocare pe discuri RAID la nivelul mașinii de calcul gazdă. Valoarea implicită de replicare este 3, informațiile fiind stocate pe 3 noduri, dintre care 2 se află pe același suport și o altă replicare se face pe un suport diferit. Nodurile de date pot comunica pentru a reechilibra datele, pentru a deplasa copii ale acestora și pentru a păstra replicarea datelor la un nivel înalt. HDFS nu este total compatibil cu POSIX, întrucât cerințele unui sistem de fișiere POSIX diferă de obiectivele aplicațiilor Hadoop. Compromisul de a renunța la o compatibilitate totală cu sistemul de fișiere POSIX se contrabalansează cu obținerea unei performanțe crescute a transferului de date. HDFS a fost conceput pentru a gestiona fișiere de dimensiuni foarte mari.

HDFS a adaugat recent capabilitați de înaltă disponibilitate, care permit ca în cazul unui eșec în funcționare să fie realizată manual tranziția stării serverului central de metadate, denumit Namenode, în modul de restaurare a stării inițiale și recuperarea datelor. Se fac demersuri pentru dezvoltarea unei modalități de tranziție automată în cazul unui eșec în funcționare. Sistemul de fișiere include și un Namenode secundar, care poate crea impresia eronată că atunci când nodul primar iese din funcțiune, rolul său este preluat de nodul secundar. În realitate, nodul secundar se conectează cu nodul primar și creează instantanee ale informațiilor din directorul nodului primar, care sunt apoi salvate în directoare locale sau la distanță. Imaginile de referință care se creează astfel pot fi utilizate pentru a reporni un nod primar care a avut un eșec în funcționare, fara reiterarea întregului jurnal cu acțiunile sistemului de fișiere și pentru editarea registrului în scopul creării unei structuri actualizate a directorului. Întrucât Namenode este un punct unic de stocare și management al metadatelor, performanța sistemului poate fi limitată la transferul unor fișiere de dimensiune mare și mai ales în cazul unor fișiere numeroase de dimensiuni reduse. HDFS Federation este o nouă funcționalitate al cărei scop este să abordeze această problemă permitând ca mai multe NameSpace să fie deservite de Namenode-uri distincte.

Printre avantajele utilizării HDFS se numară transferul informațiilor de localizare între Jobtracker și Tasktracker. Jobtracker planifică acțiunile de mapare și reducere pentru Tasktracker, pe baza localizării informațiilor. De exemplu, dacă nodul A conține informațiile (x, y, z) și nodul B conține (a, b, c), Jobtracker planifică pentru B execuția sarcinilor de mapare și reducere pentru informațiile (a, b, c) și (x, y, z) pentru nodul A. Metoda reduce traficul vehiculat în rețea și previne un transfer inutil de informații. Acest avantaj poate să nu mai fie evident dacă Hadoop este utilizat în conjuncție cu alt sistem de fișiere, întrucât acesta poate avea un impact semnificativ asupra perfomanței timpului de realizare a sarcinii, demonstrație facută la execuția unor prelucrări intensive de informație.[9]

O altă limitare a sistemului de fișiere Hadoop este imposibilitatea de a fi accesat direct de către un sistem de operare existent. Extragerea și introducerea informațiilor în sistemul de fișiere HDFS, înainte sau dupa execuția unei sarcini, pot prezenta deseori inconveniente. Pentru rezolvarea acestei probleme a fost dezvoltat un sistem de fișiere virtual în spatiul de lucru al utilizatorului (FUSE), pentru sistemele de operare Linux și Unix.

Accesul la fișier poate fi obținut printr-un API Java nativ, prin Thrift API care să genereze un client în limbajul de programare selectat de utilizator (C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk și Ocaml), prin linia de comandă sau accesat prin intermediul aplicației web HDFS-UI, prin protocolul HTTP.

Alte sisteme de fișiere[modificare | modificare sursă]

Lista sistemelor de fișiere suportate pana în mai 2011:

  • HDFS: Este sistemul de fișiere Hadoop, conceput pentru stocarea a zeci de petabytes de informație.
  • Sistemul de fișiere Amazon.com S3: Dedicat infrastructurii de clustere gazduită pe Amazon Elastic Compute Cloud.
  • CloudStore
  • Sistemul de fișiere FTP
  • Sistemele de fișiere disponibile doar la citire HTTP și HTTPS.

Hadoop se poate implementa cu orice sistem de fișiere care poate fi montat pe sistemul de operare, utilizând calea către fișier prin URL de tipul file://, dar consecința o reprezintă pierderea localizării informațiilor. Pentru reducerea traficului în rețea, Hadoop trebuie să dețină informații despre serverele din proximitatea locurilor în care e stocată informația.

JobTracker și TaskTracker: Motorul MapReduce[modificare | modificare sursă]

În structura ierarhică Hadoop, deasupra sistemului de fișiere se plasează motorul MapReduce, care cuprinde un JobTracker, către care aplicațiile client remit sarcinile MapReduce. JobTracker atribuie sarcinile nodurilor TaskTracker disponibile din cluster pe criteriul promixității față de informațiile prelucrate. Datorită sistemului de fișiere care cunoaște localizarea suportului, JobTracker detectează nodurile care conțin informațiile și mașinile de calcul care se află în proximitate. În cazul în care execuția sarcinii nu se poate realiza pe nodul în care este localizată informația, nodurile din același suport au prioritate pentru a prelua atribuțiile. Consecința o reprezintă reducerea traficului pe magistrala principală a rețelei. Dacă un JobTracker eșuează sau tergiversează execuția sarcinii, aceasta este replanificată. TaskTracker-ul de pe fiecare nod rulează un proces distinct pe Java Virtual Machine, pentru a preveni situația în care TaskTracker eșuează dacă un proces întâmpină o eroare pe JVM. TaskTracker remite un semnal de confirmare a conectivității către JobTracker la fiecare minut pentru a-i verifica starea.[10] Stările JobTracker și TaskTracker sunt expuse de Jetty și pot fi vizualizate dintr-un browser web.

MapReduce reprezintă un model de programare pentru prelucrarea datelor. Hadoop poate executa programe MapReduce scrise în diferite limbaje de programare.

MapReduce prevede un model de programare care abstractizează problema de citire și scriere de la disc, transformând-o într-un calcul ce utilizează seturi de chei și valori.

MapReduce acționează prin segmentarea prelucrării în două faze: faza de mapare și faza de reducere.

O transformare Map are rolul de a transforma fluxul de date de intrare format din cheie și valoare într-o pereche cheie/valoare la ieșire. Rezultatul poate fi sub forma unei chei diferite față de cea de intrare și poate avea intrări multiple cu aceeași cheie.

O transformare Reduce preia toate valorile unei chei specificate și generează o nouă listă a rezultatului redus.[11]

Fiecare fază are o pereche de valori de tipul (key-value) ca intrare și ieșire, tipurile de date putând fi alese de programator.

Pasul de mapare[modificare | modificare sursă]

Nodul master preia input-ul, îl divide în sub-probleme mai mici și le distribuie nodurilor operaționale. Un nod operațional poate să replice acest comportament într-o structură arborescentă pe mai multe niveluri. Nodul operațional procesează problema mai mică și livrează nodului master răspunsul.

Pasul de reducere[modificare | modificare sursă]

Nodul master colectează răspunsurile de la toate sub-problemele și le combină într-o manieră corespunzătoare pentru a livra un rezultat care va constitui răspunsul la problema pe care a încercat inițial să o rezolve.

MapReduce permite procesarea distribuită a operațiilor de mapare și reducere. Toate operațiile de mapare sunt independente unele de altele, ceea ce permite ca toate mapările să se paralelizeze, deși în practică numărul lor este limitat de numărul surselor de informație independente și de numărul procesoarelor din proximitatea fiecărei surse.

În mod similar, un set de noduri reducătoare poate realiza faza de reducere, presupunând că toate rezultatele operației de mapare care au o cheie comună sunt livrate aceluiași nod reducător în același moment.

În pofida faptului că acest proces poate apărea adeseori ineficient în comparație cu algoritmii secvențiali, MapReduce poate fi aplicat unor seturi de date semnificativ mai mari în comparație cu serverele accesibile în mod uzual. Un ansamblu de servere poate utiliza MapReduce pentru a sorta un petabyte de date într-un interval de doar câteva ore.

Paralelismul oferă de asemenea posibilitatea de a recuperare a informațiilor în cazul incidentelor din timpul operațiilor apărute pe servere sau în mediile de stocare: dacă un nod care realizează maparea sau reducerea întampină un eșec, activitatea sa poate fi reprogramată, presupunând ca datele de intrare sunt încă disponibile. [12]

Planificarea[modificare | modificare sursă]

În mod implicit, Hadoop utilizează FIFO și 5 priorități opționale de planificare a sarcinilor din coada de execuție. În versiunea 0.19 s-au îmbunătățit atributele non-funcționale ale planificatorului de sarcini din JobTracker și a fost adaugată capacitatea de a utiliza un planificator alternativ, precum Fair scheduler sau Capacity scheduler.

Fair scheduler[modificare | modificare sursă]

Fair scheduler a fost dezvoltat de Facebook. Scopul pentru care a fost creat este de a furniza intervale de răspuns scurte pentru sarcini de execuție mici și QoS pentru sarcinile de producție.

Capacity scheduler[modificare | modificare sursă]

A fost dezvoltat de Yahoo. Suportă mai multe caracteristici similare cu Fair Scheduler.

Alte aplicații[modificare | modificare sursă]

Sistemul de fișiere HDFS nu se limitează la sarcinile MapReduce. Poate fi utilizat în alte aplicații, majoritatea aflate în faza de dezvoltare de către Apache. Între aceste aplicații se pot include baza de date Hbase, sistemul Apache Mahout și sistemul Apache Hive Data Warehouse. Printre ariile de interes în care este folosit Hadoop se înscriu:

  • Analiza înregistrărilor și fluxului de click-uri de orice natură
  • Analize de piață
  • Tehnici de data mining
  • Procesarea de imagini
  • Procesarea mesajelor XML
  • Procesarea de text și explorarea paginilor web
  • Arhivări generale

Note[modificare | modificare sursă]

  1. ^ a b „Hadoop Releases”. Hadoop.apache.org. Accesat în . 
  2. ^ „Welcome to Apache™ Hadoop®!”. Fundația Apache. Accesat în . 
  3. ^ „Welcome to Apache™ Hadoop®!”. Hadoop.apache.org. Accesat în . 
  4. ^ „PoweredBy - Hadoop Wiki”. Wiki.apache.org. . Accesat în . 
  5. ^ „Who We Are”. Hadoop.apache.org. Arhivat din original la . Accesat în . 
  6. ^ Verne,G. Kopitoff. "Yahoo Creates Company to Profit From Hadoop Software", The New York Times, New York, 27 June 2011. Retrieved on 30 April 2012.
  7. ^ „copie arhivă”. Arhivat din original la . Accesat în . 
  8. ^ „copie arhivă”. Arhivat din original la . Accesat în . 
  9. ^ http://eng.auburn.edu/~xqin/pubs/hcw10.pdf
  10. ^ J. Jeffrey Hanson, CTO, Max International (). „An introduction to the Hadoop Distributed File System” (în en). Ibm.com. Accesat în . 
  11. ^ „HadoopMapReduce - Hadoop Wiki”. Wiki.apache.org. . Accesat în . 
  12. ^ „MapReduce - Hadoop Wiki”. Wiki.apache.org. . Accesat în . 

Bibliografie[modificare | modificare sursă]

Legături externe[modificare | modificare sursă]