Spark vs Hadoop: Care este cel mai bun cadru Big Data?



Această postare de blog vorbește despre apache spark vs hadoop. Vă va oferi o idee despre care este cadrul potrivit pentru Big Data de ales în diferite scenarii.

Voi începe acest blog Apache Spark vs Hadoop introducând mai întâi Hadoop și Spark pentru a seta contextul potrivit pentru ambele cadre. Apoi, mergând mai departe, vom compara ambele cadre de date mari pe diferiți parametri pentru a le analiza punctele tari și punctele slabe.Dar, oricare ar fi rezultatul comparației noastre, ar trebui să știți că atât Spark, cât și Hadoop sunt componente esențiale ale .

Apache Spark vs Hadoop: Introducere în Hadoop

Hadoop este un cadru care vă permite să stocați mai întâi Big Data într-un mediu distribuit, astfel încât să îl puteți procesa în paralel. În principiu, există două componente în Hadoop:





HDFS

HDFS creează o abstractizare a resurselor, permiteți-mi să o simplific pentru dvs. La fel ca virtualizarea, puteți vedea HDFS în mod logic ca o singură unitate pentru stocarea Big Data, dar de fapt vă stocați datele pe mai multe noduri într-un mod distribuit. Aici aveți arhitectură master-slave. În HDFS, Namenode este un nod master și Datanodes sunt sclavi.

NameNode

Este demonul master care întreține și gestionează DataNodes (noduri slave). Înregistrează metadatele tuturor fișierelor stocate în cluster, de ex. locația blocurilor stocate, dimensiunea fișierelor, permisiunile, ierarhia etc. Înregistrează fiecare schimbare care are loc la metadatele sistemului de fișiere.



De exemplu, dacă un fișier este șters în HDFS, NameNode va înregistra imediat acest lucru în EditLog. Acesta primește în mod regulat un Heartbeat și un raport de blocare de la toate DataNodes din cluster pentru a se asigura că DataNodes sunt active. Păstrează o evidență a tuturor blocurilor din HDFS și în care noduri sunt stocate aceste blocuri.

DataNode

Acestea sunt demonii sclavi care rulează pe fiecare mașină sclavă. Datele reale sunt stocate pe DataNodes. Ei sunt responsabili pentru servirea cererilor de citire și scriere de la clienți. De asemenea, aceștia sunt responsabili pentru crearea blocurilor, ștergerea blocurilor și reproducerea acestora pe baza deciziilor luate de NameNode.

HDFS - Apache Spark vs Hadoop - EdurekaYARN

YARN realizează toate activitățile de procesare prin alocarea resurselor și programarea sarcinilor. Are doi demoni majori, adică Manager de resurse și NodeManager .



Manager de resurse

Este o componentă la nivel de cluster (una pentru fiecare cluster) și rulează pe mașina principală. Gestionează resursele și programează aplicațiile care rulează pe YARN.

NodeManager

Este o componentă la nivel de nod (una pe fiecare nod) și rulează pe fiecare mașină sclavă. Este responsabil de gestionarea containerelor și de monitorizarea utilizării resurselor în fiecare container. De asemenea, ține evidența stării nodului și a gestionării jurnalelor. Comunică continuu cu ResourceManager pentru a rămâne actualizat. Deci, puteți efectua procesări paralele pe HDFS folosind MapReduce.

Pentru a afla mai multe despre Hadoop, puteți parcurge acest lucru blog. Acum, că suntem pregătiți cu introducerea Hadoop, să trecem la introducerea Spark.

Apache Spark vs Hadoop: Introducere în Apache Spark

Apache Spark este un cadru pentru analiza datelor în timp real într-un mediu de calcul distribuit. Execută calcule în memorie pentru a crește viteza de procesare a datelor. Este mai rapid pentru prelucrarea datelor la scară largă, deoarece exploatează calcule în memorie și alte optimizări. Prin urmare, necesită o putere mare de procesare.

Resilient Distributed Dataset (RDD) este o structură de date fundamentală a Spark. Este o colecție distribuită imuabilă de obiecte. Fiecare set de date din RDD este împărțit în partiții logice, care pot fi calculate pe diferite noduri ale clusterului. RDD-urile pot conține orice tip de obiecte Python, Java sau Scala, inclusiv clase definite de utilizator. Componentele Spark îl fac rapid și fiabil. Apache Spark are următoarele componente:

  1. Spark Core - Spark Core este motorul de bază pentru prelucrarea la scară largă a datelor paralele și distribuite. Mai mult, bibliotecile suplimentare care sunt construite deasupra nucleului permit diverse sarcini de lucru pentru streaming, SQL și învățare automată. Este responsabil pentru gestionarea memoriei și recuperarea defecțiunilor, programarea, distribuirea și monitorizarea lucrărilor pe un cluster și interacțiunea cu sistemele de stocare
  2. Spark Streaming - Spark Streaming este componenta Spark care este utilizată pentru a procesa date de streaming în timp real. Astfel, este un supliment util la API-ul Spark de bază. Permite procesarea fluxurilor de date în timp real și tolerante la erori
  3. Spark SQL : Spark SQL este un nou modul în Spark care integrează procesarea relațională cu API-ul funcțional de programare Spark. Suportă interogarea datelor fie prin SQL, fie prin Hive Query Language. Pentru cei dintre voi familiarizați cu RDBMS, Spark SQL va fi o tranziție ușoară de la instrumentele dvs. anterioare, unde puteți extinde limitele procesării tradiționale a datelor relaționale.
  4. GraphX : GraphX ​​este API-ul Spark pentru grafice și calcul paralel grafic. Astfel, extinde Spark RDD cu un grafic de proprietăți distribuite rezistent. La un nivel înalt, GraphX ​​extinde abstracția Spark RDD prin introducerea Resilient Distributed Property Graph: un multigraf direcționat cu proprietăți atașate la fiecare vârf și margine.
  5. MLlib (Învățare automată): MLlib înseamnă Machine Learning Library. Spark MLlib este folosit pentru a efectua învățarea automată în Apache Spark.

După cum puteți vedea, Spark este livrat cu biblioteci de nivel înalt, inclusiv suport pentru R, SQL, Python, Scala, Java etc. Aceste biblioteci standard măresc integrările perfecte în fluxul de lucru complex. În plus, permite, de asemenea, să se integreze diverse seturi de servicii, cum ar fi MLlib, GraphX, SQL + Data Frames, servicii de streaming etc., pentru a-și spori capacitățile.

Pentru a afla mai multe despre Apache Spark, puteți parcurge acest lucru blog. Acum terenul este pregătit pentru Apache Spark vs Hadoop. Să mergem mai departe și să comparăm Apache Spark cu Hadoop pe diferiți parametri pentru a le înțelege punctele forte.

Apache Spark vs Hadoop: Parametri de comparat

Performanţă

Spark este rapid, deoarece are procesare în memorie. De asemenea, poate utiliza disc pentru date care nu se potrivesc toate în memorie. Procesarea în memorie a Spark oferă analize aproape în timp real. Acest lucru face ca Spark să fie adecvat pentru sistemul de procesare a cardului de credit, învățarea automată, analiza securității și senzorii Internet of Things.

Hadoop a fost inițial configurat pentru a colecta în mod continuu date din mai multe surse, fără a vă face griji cu privire la tipul de date și stocarea acestora în mediul distribuit. MapReduce folosește procesarea batch. MapReduce nu a fost niciodată construit pentru procesare în timp real, ideea principală din spatele YARN este procesarea paralelă peste setul de date distribuite.

Problema cu compararea celor două este că procesează diferit.

Ușurință în utilizare

Spark vine cu API-uri ușor de utilizat pentru Scala, Java, Python și Spark SQL. Spark SQL este foarte asemănător cu SQL, astfel încât devine mai ușor pentru dezvoltatorii SQL să îl învețe. Spark oferă, de asemenea, un shell interactiv pentru ca dezvoltatorii să interogheze și să efectueze alte acțiuni și să primească feedback imediat.

Puteți ingera date în Hadoop cu ușurință fie folosind shell-ul sau integrându-le cu mai multe instrumente precum Sqoop, Flume etc. YARN este doar un cadru de procesare și poate fi integrat cu mai multe instrumente precum Hive și Pig. HIVE este o componentă de stocare a datelor care efectuează citirea, scrierea și gestionarea seturilor mari de date într-un mediu distribuit utilizând o interfață de tip SQL. Puteți trece prin asta Ecosistem Hadoop blog pentru a afla despre diferitele instrumente care pot fi integrate cu Hadoop.

Cheltuieli

Hadoop și Spark sunt ambele proiecte open source Apache, deci nu există niciun cost pentru software. Costul este asociat doar cu infrastructura. Ambele produse sunt concepute în așa fel încât să poată rula pe hardware de marfă cu TCO scăzut.

Acum s-ar putea să vă întrebați modurile în care acestea sunt diferite. Stocarea și procesarea în Hadoop se bazează pe disc și Hadoop folosește cantități standard de memorie. Deci, cu Hadoop avem nevoie de mult spațiu pe disc, precum și de discuri mai rapide. Hadoop necesită, de asemenea, mai multe sisteme pentru a distribui I / O pe disc.

Datorită procesării de memorie a lui Apache Spark, necesită multă memorie, dar poate face față unei viteze standard și a unei cantități de disc. Deoarece spațiul pe disc este un produs relativ ieftin și din moment ce Spark nu folosește I / O pe disc pentru procesare, în schimb necesită cantități mari de RAM pentru a executa tot ce este în memorie. Astfel, sistemul Spark atrage costuri mai mari.

Dar da, un lucru important de reținut este că tehnologia Spark reduce numărul de sisteme necesare. Are nevoie de sisteme semnificativ mai puține care costă mai mult. Deci, va exista un moment în care Spark reduce costurile pe unitate de calcul, chiar și cu cerința RAM suplimentară.

Procesarea datelor

Există două tipuri de prelucrare a datelor: Procesarea în lot și Procesarea în flux.

Procesarea în serie vs Procesarea în flux

Prelucrarea în serie : Procesarea pe loturi a fost crucială pentru lumea datelor mari. În cel mai simplu termen, procesarea în serie funcționează cu volume mari de date colectate pe parcursul unei perioade. În procesarea lotului, datele sunt mai întâi colectate și apoi rezultatele procesate sunt produse într-o etapă ulterioară.

Procesarea în serie este un mod eficient de procesare a unor seturi de date statice mari. În general, efectuăm procesarea în serie pentru seturile de date arhivate. De exemplu, calcularea venitului mediu al unei țări sau evaluarea schimbării comerțului electronic în ultimul deceniu.

Procesarea fluxului : Procesarea fluxului este tendința actuală în lumea big data. Nevoia orei este viteza și informațiile în timp real, ceea ce face procesarea aburului. Procesarea în serie nu permite companiilor să reacționeze rapid la schimbarea nevoilor de afaceri în timp real, procesarea în flux a înregistrat o creștere rapidă a cererii.

Revenind acum la Apache Spark vs Hadoop, YARN este practic un cadru de procesare în serie. Când trimitem un job la YARN, acesta citește datele din cluster, efectuează operațiuni și scrie rezultatele înapoi în cluster. Apoi citește din nou datele actualizate, efectuează următoarea operație și scrie rezultatele înapoi în cluster și așa mai departe.

Spark efectuează operațiuni similare, dar folosește procesarea în memorie și optimizează pașii. GraphX ​​permite utilizatorilor să vizualizeze aceleași date ca grafice și ca colecții. Utilizatorii pot, de asemenea, să transforme și să alăture grafice cu seturi de date distribuite rezistente (RDD).

Toleranță la erori

Hadoop și Spark oferă ambele toleranță la erori, dar ambele au o abordare diferită. Pentru HDFS și YARN, ambii demoni master (adică NameNode și ResourceManager) verifică bătăile inimii demonilor slave (respectiv DataNode și respectiv NodeManager). În cazul în care un daemon sclav eșuează, demonii master reprogramează toate operațiunile în așteptare și în curs către un alt sclav. Această metodă este eficientă, dar poate crește semnificativ timpii de finalizare și pentru operațiunile cu eșec unic. Deoarece Hadoop folosește hardware de marfă, un alt mod prin care HDFS asigură toleranța la erori este prin replicarea datelor.

Așa cum am discutat mai sus, RDD-urile sunt elemente constitutive ale Apache Spark. RDD-urile oferă toleranță la erori pentru Spark. Se pot referi la orice set de date prezent în sistemul de stocare extern, cum ar fi HDFS, HBase, sistemul de fișiere partajat. Ele pot fi acționate în paralel.

cum să compilați programe Java

RDD-urile pot persista un set de date în memorie între operații, ceea ce face ca acțiunile viitoare să fie de 10 ori mult mai rapide. Dacă se pierde un RDD, acesta va fi automat recalculat utilizând transformările originale. Acesta este modul în care Spark oferă toleranță la erori.

Securitate

Hadoop acceptă Kerberos pentru autentificare, dar este dificil de gestionat. Cu toate acestea, suportă și furnizori terți precum LDAP (Lightweight Directory Access Protocol) pentru autentificare. De asemenea, oferă criptare. HDFS acceptă permisiuni tradiționale de fișiere, precum și liste de control al accesului (ACL). Hadoop oferă autorizare la nivel de serviciu, care garantează că clienții au permisiunile corecte pentru trimiterea postului.

Spark acceptă în prezent autentificarea printr-un secret comun. Spark se poate integra cu HDFS și poate utiliza ACL-uri HDFS și permisiuni la nivel de fișier. Spark poate rula și pe YARN, valorificând capacitatea Kerberos.

Cazuri de utilizare în care Hadoop se potrivește cel mai bine:

  • Analiza datelor de arhivă. YARN permite prelucrarea în paralel a unor cantități uriașe de date. Părți de date sunt prelucrate în paralel și separat pe diferite DataNodes și adună rezultatele fiecărui NodeManager.
  • Dacă nu sunt necesare rezultate instantanee. Hadoop MapReduce este o soluție bună și economică pentru procesarea în serie.

Cazuri de utilizare în care Spark se potrivește cel mai bine:

Analiza Big Data în timp real:

Analiza datelor în timp real înseamnă procesarea datelor generate de fluxurile de evenimente în timp real care intră cu rata de milioane de evenimente pe secundă, de exemplu date Twitter. Punctul forte al Spark constă în abilitățile sale de a sprijini transmiterea de date împreună cu procesarea distribuită. Aceasta este o combinație utilă care oferă prelucrarea aproape în timp real a datelor. MapReduce are un handicap de un astfel de avantaj, deoarece a fost conceput pentru a efectua procesarea distribuită în serie pe cantități mari de date. Datele în timp real pot fi procesate în continuare pe MapReduce, dar viteza sa nu se apropie de cea a lui Spark.

Spark susține că procesează datele de 100 de ori mai repede decât MapReduce, în timp ce de 10 ori mai rapid cu discurile.

Procesare grafică:

Majoritatea algoritmilor de procesare a graficelor, cum ar fi rangul paginii, efectuează iterații multiple asupra acelorași date și acest lucru necesită un mecanism de transmitere a mesajelor. Trebuie să programăm MapReduce în mod explicit pentru a gestiona astfel de iterații multiple pe aceleași date. Aproximativ, funcționează astfel: Citiți datele de pe disc și după o anumită iterație, scrieți rezultatele pe HDFS și apoi citiți datele de pe HDFS pentru următoarea iterație. Acest lucru este foarte ineficient, deoarece implică citirea și scrierea datelor pe disc, ceea ce implică operații I / O grele și replicarea datelor în cluster pentru toleranță la erori. De asemenea, fiecare iterație MapReduce are o latență foarte mare, iar următoarea iterație poate începe numai după ce lucrarea anterioară s-a terminat complet.

De asemenea, transmiterea mesajului necesită scoruri de noduri învecinate pentru a evalua scorul unui anumit nod. Aceste calcule au nevoie de mesaje de la vecinii săi (sau de date în mai multe etape ale lucrării), un mecanism de care MapReduce nu are. Diferite instrumente de procesare a graficelor, cum ar fi Pregel și GraphLab, au fost concepute pentru a răspunde nevoii unei platforme eficiente pentru algoritmi de procesare a graficelor. Aceste instrumente sunt rapide și scalabile, dar nu sunt eficiente pentru crearea și post-procesarea acestor algoritmi complexi în mai multe etape.

Introducerea Apache Spark a rezolvat aceste probleme într-o mare măsură. Spark conține o bibliotecă de calcul grafic numită GraphX ​​care ne simplifică viața. Calculul în memorie împreună cu suportul pentru grafic încorporat îmbunătățește performanța algoritmului cu o magnitudine de unu sau două grade față de programele tradiționale MapReduce. Spark folosește o combinație de Netty și Akka pentru distribuirea mesajelor pe toți executanții. Să vedem câteva statistici care descriu performanța algoritmului PageRank folosind Hadoop și Spark.

Algoritmi iterativi de învățare automată:

Aproape toți algoritmii de învățare automată funcționează iterativ. După cum am văzut mai devreme, algoritmii iterativi implică blocaje I / O în implementările MapReduce. MapReduce folosește sarcini grosiere (paralelism la nivel de activitate) care sunt prea grele pentru algoritmi iterativi. Spark cu ajutorul Mesos - un kernel de sistem distribuit, cache-ul setului de date intermediar după fiecare iterație și rulează mai multe iterații pe acest set de date cache, care reduce I / O și ajută la executarea mai rapidă a algoritmului într-un mod tolerant la erori.

Spark are o bibliotecă de învățare automată scalabilă încorporată numită MLlib care conține algoritmi de înaltă calitate care valorifică iterațiile și oferă rezultate mai bune decât aproximările cu o singură trecere utilizate uneori pe MapReduce.

  • Prelucrare rapidă a datelor. După cum știm, Spark permite procesarea în memorie. Ca urmare, Spark este de până la 100 de ori mai rapid pentru datele din RAM și de până la 10 ori pentru datele din stocare.
  • Prelucrare iterativă. RDD-urile Spark permit efectuarea mai multor operații de hartă în memorie, fără a fi nevoie să scrieți seturi de date intermediare pe un disc.
  • Procesare aproape în timp real. Spark este un instrument excelent pentru a oferi informații de afaceri imediate. Acesta este motivul pentru care Spark este utilizat în sistemul de streaming al cardului de credit.

„Apache Spark: un ucigaș sau un salvator al lui Apache Hadoop?”

Răspunsul la acest lucru - Hadoop MapReduce și Apache Spark nu concurează unul cu celălalt. De fapt, se completează destul de bine. Hadoop aduce sub control seturi imense de date de către sistemele de mărfuri. Spark oferă procesare în memorie în timp real pentru acele seturi de date care o necesită. Atunci când combinăm, abilitatea Apache Spark, adică viteză mare de procesare, analize avansate și asistență de integrare multiplă cu operațiunea Hadoop cu costuri reduse pe hardware de bază, oferă cele mai bune rezultate. Hadoop completează capacitățile Apache Spark. Spark nu poate înlocui complet Hadoop, dar vestea bună este că cererea pentru Spark este în prezent la un nivel maxim! Acesta este momentul potrivit pentru a stăpâni Spark și a profita la maximum de oportunitățile de carieră care îți apar. Incepe acum!

Ai o întrebare pentru noi? Vă rugăm să menționați acest lucru în secțiunea de comentarii și vă vom contacta cel mai devreme.

Dacă doriți să învățați Spark și să construiți o carieră în domeniul Spark pentru a efectua prelucrări de date la scară largă utilizând RDD, Spark Streaming, SparkSQL, MLlib, GraphX ​​și Scala cu cazuri de utilizare Real Life, consultați interactivul nostru, live-online Aici, care vine cu suport 24 * 7 pentru a vă ghida pe toată perioada de învățare.