ABONAMENTE VIDEO REDACȚIA
RO
EN
NOU
Numărul 150
Numărul 149 Numărul 148 Numărul 147 Numărul 146 Numărul 145 Numărul 144 Numărul 143 Numărul 142 Numărul 141 Numărul 140 Numărul 139 Numărul 138 Numărul 137 Numărul 136 Numărul 135 Numărul 134 Numărul 133 Numărul 132 Numărul 131 Numărul 130 Numărul 129 Numărul 128 Numărul 127 Numărul 126 Numărul 125 Numărul 124 Numărul 123 Numărul 122 Numărul 121 Numărul 120 Numărul 119 Numărul 118 Numărul 117 Numărul 116 Numărul 115 Numărul 114 Numărul 113 Numărul 112 Numărul 111 Numărul 110 Numărul 109 Numărul 108 Numărul 107 Numărul 106 Numărul 105 Numărul 104 Numărul 103 Numărul 102 Numărul 101 Numărul 100 Numărul 99 Numărul 98 Numărul 97 Numărul 96 Numărul 95 Numărul 94 Numărul 93 Numărul 92 Numărul 91 Numărul 90 Numărul 89 Numărul 88 Numărul 87 Numărul 86 Numărul 85 Numărul 84 Numărul 83 Numărul 82 Numărul 81 Numărul 80 Numărul 79 Numărul 78 Numărul 77 Numărul 76 Numărul 75 Numărul 74 Numărul 73 Numărul 72 Numărul 71 Numărul 70 Numărul 69 Numărul 68 Numărul 67 Numărul 66 Numărul 65 Numărul 64 Numărul 63 Numărul 62 Numărul 61 Numărul 60 Numărul 59 Numărul 58 Numărul 57 Numărul 56 Numărul 55 Numărul 54 Numărul 53 Numărul 52 Numărul 51 Numărul 50 Numărul 49 Numărul 48 Numărul 47 Numărul 46 Numărul 45 Numărul 44 Numărul 43 Numărul 42 Numărul 41 Numărul 40 Numărul 39 Numărul 38 Numărul 37 Numărul 36 Numărul 35 Numărul 34 Numărul 33 Numărul 32 Numărul 31 Numărul 30 Numărul 29 Numărul 28 Numărul 27 Numărul 26 Numărul 25 Numărul 24 Numărul 23 Numărul 22 Numărul 21 Numărul 20 Numărul 19 Numărul 18 Numărul 17 Numărul 16 Numărul 15 Numărul 14 Numărul 13 Numărul 12 Numărul 11 Numărul 10 Numărul 9 Numărul 8 Numărul 7 Numărul 6 Numărul 5 Numărul 4 Numărul 3 Numărul 2 Numărul 1
×
▼ LISTĂ EDIȚII ▼
Numărul 4
Abonament PDF

Big Data Apache Hadoop

Robert Enyedi
Senior Software Developer
@Betfair



PROGRAMARE

Continuând seria de articole despre "big data", începută cu introducerea în lumea "big data" în numărul 2 al revistei și urmată de articolul despre bazele de date de tip "nosql" din numărul 3, a venit rîndul unui articol care să prezinte mai pe larg una din tehnologiile semnificative din lumea "big data" și anume Apache Hadoop.

Apache Hadoop este un framework care facilitează procesarea unor seturi de date mari și foarte mari, pe mai multe calculatoare folosind un model de programare simplu: paradigma map/reduce. Este proiectat în așa fel, încît să scaleze de o mașiniă la mii de mașini, fiecare din ele punînd la dispoziție putere de procesare și spațiu de stocare. În loc să se bazeze efectiv pe hardware pentru "high-availability", framework-ul în sine este proiectat în așa fel încît să detecteze erorile la nivel de aplicație.

Este un proiect open source aflat sub tutela Apache Foundation, cu o comunitate globală de contributori, dintre care cel mai semnificativ la dezvoltarea lui a fost Yahoo!.

Apache Hadoop este folosit de Yahoo! pentru motorul de căutare, Facebook se laudă cu cel mai mare cluster de Hadoop (30 petabytes de date), folosit pentru printre altele și la Facebook Messaging.

Amazon pune la dispoziție o platformă de tip MapReduce ca parte a Amazon Web Services numită Amazon Elastic MapReduce.

Numeroase alte firme din IT și nu doar folosesc Apache Hadoop (Twitter, IBM, HP, Fox, American Airlines, Foursquare, Linkedin, Chevron, etc), pentru a-i ajuta în rezolvarea problemelor de diverse tipuri: călătorii online, e-commerce, detectare de fraude, procesare de imagini, sănătate, etc

Istoric

Hadoop a fost creat de către Doug Cutting, care l-a numit după jucăria de pluș a fiului lui.

A fost dezvoltat inițial pentru a oferi un sistem distribuit pentru motorul de căutare Nutch, prin anii 2004-2006 și se bazează pe articolele despre GFS (Google File System) si MapReduce făcute publice de către Google în perioada respectivă.

În anul 2006 Yahoo! a angajat o echipă dedicată (inclusiv pe Doug), care a contribuit semnifcativ la dezvoltarea frameworkului, care între timp a devenit un proiect de sine stătător, independent de Nutch.

img6_4.jpg

Arhitectura

Apache Hadoop este dezvoltat în Java și are două componente principale:

  • HDFS (Hadoop Distributed File System)
  • MapReduce

HDFS

Este un sistem de fișiere distribuit care pune la dispoziție acess, cu throughput ridicat, la datele applicațiilor.

HDFS dispune de o arhitectură de tip master/slave. Un cluster HDFS este compus (de obicei) dintr-un singur Namenode, un server master care gestionează namespace-ul sistemului de fișiere și reglementează accesul clienților la fișiere. În plus, există un număr de servere Datanode, de obicei unul pentru fiecare mașină din cluster, care gestionează spațiul de stocare al mașinii pe care rulează. HDFS expune un namespace al sistemului de fișiere și permite stocarea datelor utilizator in fișiere. Intern, un fișier este împărțit în unul sau mai multe blocuri (dimensiunea blocului este configurabilă, de obicei este între16-128 MB), iar aceste blocuri sunt stocate pe Datanode-uri. Namenode-ul execută operații asupra sistemului de fișiere, precum: deschiderea, ștergerea, redenumirea fișierelor și a directoarelor. Totodată determină și maparea blocurilor de date la Namenode-uri. Datanodurile sunt responsabile pentru servirea cererilor de citire și scriere primite de la clienții sistemului de fișiere. De asemenea, Datanode-urile execută operații de creare, ștergere și replicare de blocuri, ca urmare a comenzilor primite de la Namenode.

HDFS implementează un model de permisi pentru fișiere și directoare care împărtășește mult cu modelul POSIX.

MapReduce

MapReduce este un framework care permite scrierea de aplicații care proceseză cantitați mari de date, în paralel, într-un mod sigur și cu toleranță la erori.

Un job MapReduce împarte setul de date de intrare în părți independente care sunt procesate de task-urile de map în paralel. Framework-ul sortează si concatenează output-ul task-urilor de map fiind pe urma folosit ca și date de intrare pentru task-ul de reduce. Tipic, atît datele de intrare cît si cele de ieșire sunt stocate în HDFS. Framework-ul are grijă de planificarea rulării task-urilor, monitorizarea lor, precum și re-executarea task-urilor cu erori.

De obicei, nodurile de calcul și cele care stochează datele (Datanode) sunt aceleași. Cu alte cuvinte, framework-ul MapReduce și HDFS-ul rulează pe același set de noduri. Această configurație permite framework-ului să planifice rularea task-urilor pe nodurile pe care datele de intrare sunt deja prezente, rezultând în optimizarea traficului de date din rețeaua cluster-ului.

MapReduce constă dintr-un singur proces master JobTracker, și câte un proces TaskTracker pentru fiecare nod din cluster. JobTracker-ul este responsabil cu planificarea task-urilor pe TaskTracker-e. Totodată ține evidența taskurilor de MapReduce care rulează pe diferite TaskTracker-e, dacă vreunul din aceste task-uri nu reușește, realocă task-ul altui TaskTracker. În termeni simpli JobTracker trebuie să se asigure ca un query pe un set de date mare se execută cu success și că rezultatul ajunge la client într-un mod sigur.

TaskTracker excută task-urile de map și reduce, care-i sunt asignate de către JobTracker.

Totodată TaskTracker trimite constant mesaje de heartbeat către JobTracker, fapt care ajută JobTracker-ul să decidă dacă poate delega un nou task nodului respectiv, sau dacă trebuie să re-execute respectivul task pe alt nod din cauza erorilor.

Pentru a specifica un job MapReduce, applicațiile trebuie să specifice cel puțin următoarele: locația în HDFS a datelor de intrare, locația unde vor fi stocate datele de ieșire, o funcție de map și o funcție de reduce. Acestea precum și alți parametri ai jobului alcătuiesc configurația jobului.

Odată ce sunt create jobul si configurația, utilizatorul le poate înainta JobTracker-ului, care își va asuma responsabilitatea pentru planificarea rulării jobului, precum și a distribuirii și rulării pe node-urile TaskTracker, monitorizarea lor, precum și expunerea statusului către utilizator.

Datele de intrare sunt trimise către funcția map ca perechi cheie-valoare, care la rîndul ei produce perechi cheie-valoare, posibil de alt tip. Odată ce partea de map s-a terminat, rezultatele, de tip cheie-valoare, de la toate map-urile sunt concatenate și mai apoi ordonate servind ca date de intrare pentru funcția de reduce, aceasta va produce rezultate tot de tip perechi cheie-valoare.

Limitări

Implementarea curentă a framework-ului MapReduce începe să-și arate vîrsta. Observând trendurile în dimensiunea și puterea de procesare a clusterelor Hadoop, componenta JobTracker are nevoie de o drastică reproiectare pentru a adresa deficiențele de scalabilitate, memorie consumata, model de threading si performanță.

Cerințele pentru framework-ul MapReduce, care să satisfacă toate limitarile menționate anterior ar fi:

  • siguranță (reliability)
  • disponibilitate (availability)
  • scalabilitate (clustere de ~10000 de mașini), implementarea curentă suportă cam 4000 de mașini
  • evoluție
  • latență predictibilă
  • utlilizarea optimă a clusterului
  • suport pentru paradigme alternative la MapReduce

MapReduce 2.0 (YARN sau MRv2)

Următoarea generație MapReduce a fost proiectată pentru a adresa limitările menționate anterior și totodată să satisfacă cerințele de mai sus.

Ideea fundamentală a rearhitecturării, a fost sa se împartă cele doua funcții majore ale JobTracker, managementul resurselor și programarea/monitorizarea joburilor, în componente separate. Noul ResourceMananger se ocupă de alocarea globală a resurselor de calcul pentru aplicații, iar câte un ApplicationMaster per aplicație se ocupă de coordonarea/planificarea aplicației. O aplicație este fie un singur job MapReduce sau un DAG (directed acyclic graph) de joburi.

img7_2.jpg

Figura 2. Arhitectura MRv2

ResourceManager-ul si serverul slave NodeManager, al fiecărei mașini, care dirijează procesele user de pe masina respectivă, formeaza structura de calcul. ApplicationMaster-ul, per aplicație, este de fapt o librărie a framework-ului a cărei rol este de a negocia resursele de la ResourceManager, și a lucra cu NodeManger(i) pentru a executa și monitoriza task-urile.

ResourceManager-ul are doua componente principale:

  • Scheduler (S)
  • ApplicationsManager (ASM)

 

 

Scheduler-ul este responsabil cu alocarea resurselor pentru diferitele aplicații care rulează, supuse constrîngerilor de capacitate, cozi, etc. Scheduler-ul este un planificator pur, în sensul că nu se ocupă de monitorizarea sau urmărirea statusului aplicației. Totodata nu oferă nici o garanție cu privire la restartarea taskurilor cu erori, datorate fie erorilor hardware sau la nivel de aplicație.

Scheduler-ul își executa funcția de planificator bazat pe nevoile de resurse ale aplicațiilor, și face asta bazându-se pe noțiunea de Resource Container, care încorporează elemente ca memorie, procesor, disc, rețea, etc.

Scheduler-ul permite o politică de tip plug-in, responsabilă cu împărțirea resurselor clusterului între diferitele cozi, aplicații, etc. Scheduler-ul standard folosește FIFO. Planificatoarele MapReduce existente, precum CapacityScheduler și FairScheduler ar fi exemple plugin-uri.

CapacityScheduler-ul permite cozi ierarhice, pentru a oferi o mai predictibilă partajare a resurselor clusterului. A fost dezvoltat de către Yahoo!. Menirea FairScheduler-ului este să ofere timpi de execuție rapizi pentru joburile mici și QoS (quality of service) pentru joburile de producție.

ApplicationsManager-ul este responsabil cu acceptarea joburilor, negocierea primului container pentru execuția ApplicationMaster-ului specific aplicației, și oferă serviciul pentru restartarea ApplicationMaster-ului în caz de eroare.

NodeManager-ul este, procesul, per mașină, responsabil cu lansarea containerelor aplicațiilor, monitorizarea utilizării resurselor, de către aplicații, și raportarea către Scheduler.

ApplicationMaster-ul, per aplicație, este responsabil cu negocierea de containere de resurse de la Scheduler, urmărirea statusului si monitorizarea progresului.

MRv2 face parte dintr-un release major de Hadoop (2.x) care pe lîngă MRv2 include și HDFS Federation.

HDFS Federation vine să rezolve o altă posibila limitare a framework-ului, și anume natura singulară a Namenode-ului.

Pentru a putea scala orizontal serviciul de nume, federația folosește mai multe Namenode-uri independente, fiecare din ele avînd un namespace, al sistemului de fișiere, diferit. Namenode-urile sunt independente și nu necesită o coordonare a lor. Datanode-urile sunt folosite ca și spațiu comun de stocare al blocurilor de date, de către toate Namenod-urile. Fiecare Datanode se înregistrează la toate Namenode-urile din cluster și raspunde la comenzile primite de la acestea. Totodata trimit periodic heartbeat-uri, precum și rapoarte la Namenode-uri.

Tool-uri adiacente

Dezoltarea Apache Hadoop a dus cu sine și la dezvoltarea unui adevărat eco-system de tool-uri/framework-uri adiacente, unele bazate pe Hadoop altele folosite pentru a facilita anumite aspecte ale folosirii Hadoop.

Enumerăm mai jos cîteva dintre cele mai importante.

  • Scribe - este un server pentru agregarea fluxilor de loguri, care se poate integra cu HDFS (fișiere de loguri care mai apoi pot fi folosite ca și date de intrare pentru joburi MapReduce).
  • Sqoop - este un tool folosit pentru a transfera (importa și exporta) date, în masa, între HDFS și datastores structurate, precum baze de date relaționale.
  • Hive - un tool, de tip data warehouse, care oferă posibilitatea de interogări ad-hoc (prin intermediul HiveQL) a seturilor de date stocate în HDFS.
  • HBase - bază de date de tip NoSQL, având la baza modelul Google BigTable, care folosește ca si mediu de stocare HDFS.
  • Pig- este o platformă folosită pentru analizarea unor seturi de date mari având un limbaj propriu, pentru descrierea programelor de analiză a datelor. Caracteristica principală a Pig este că prin natura programelor Pig, permite paralelizarea lor la momentul rulării. Complilatorul Pig produce joburi MapReduce.
  • ZooKeper - este un serviciu de coordonare pentru aplicațiile distribuite
  • Oozie - este un tool pentru managementul workflowului/coordonarea joburilor MapReduce.
  • Cascading - este un nivel de abstracție soft pentru Apache Hadoop. Este folosit pentru a crea și executa workflowuri de procesare a datelor într-un cluster Hadoop, astfel ascunzând complexitatea joburilor MapReduce.
  • Mahout - este o librarie ce conține algoritimi de "machine learning" și "data mining", bazată pe MapReduce.
  • Chukwa - este un tool pentru monitorizarea aplicațiilor distribuite, bazându-se pe arhitectura HDFS și MapReduce.

Concluzii

Acest articol se vrea o introducere în ceea ce înseamnă Apache Hadoop și a unor technologii ce-l înconjoară. Pentru cei interesați de mai multe detalii, numeroase surse sunt disponibile pe internet incepând cu http://hadoop.apache.org. De asemenea, există o mulțime de soluții comerciale bazate pe Apache Hadoop, una din cele mai cunoscute fiind cea oferită de Cloudera (www.cloudera.com - aici existând și numeroase prezentări precum și traininguri).

NUMĂRUL 149 - Development with AI

Sponsori

  • Accenture
  • BT Code Crafters
  • Accesa
  • Bosch
  • Betfair
  • MHP
  • BoatyardX
  • .msg systems
  • P3 group
  • Ing Hubs
  • Cognizant Softvision
  • Colors in projects

Robert Enyedi a mai scris