ABONAMENTE VIDEO REDACȚIA
RO
EN
NOU
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 46
Abonament PDF

Apache Spark - Să facem din Big Data un lucru simplu

Tudor Lăpușan
Java & Big Data developer @ Telenav



DIVERSE


În ultimul an, Apache Spark a beneficiat de atenţie sporită din parte domeniilor Big Data şi Data Science, în principiu pentru că are un API mai accesibil şi o gestionare mai bună a memoriei decât MapReduce, ceea ce permite ca programatorii să se concentreze asupra operaţiilor logice care stau la baza computării sau a calculului, deci nu asupra detaliilor care se referă la modul cum aceasta este executată în spate.

Scopul acestui articol este de a introduce principalele concepte Spark şi de a ne arăta cât de uşor poate fi să învăţăm şi să scriem cod în Spark. 

Conţinutul articolului tratează următoarele teme:

Istoria Apache Spark

Apache Spark este un proiect care a fost început în 2009 la UC Berkeley AMPLab de doi români, Matei Zaharia şi Ionel Stoica. În 2013, proiectul a fost donat către Apache Software Foundation sub licenţa Apache 2.0.

Obiectivele Spark erau să ofere un API uşor de utilizat şi o gestionare a memoriei (memory management) mult mai bună decât MapReduce, astfel încât programatorii să se poată concentra pe operaţiile logice din cadrul computării, şi nu pe detaliile modului în care aceasta este executată în spate.

Toate acestea ne pot da impresia că nu lucrăm cu un framework distribuit, care să facă codul mai uşor de înţeles, de menţinut, care să grăbească timpii de dezvoltare.

Unde putem învăţa mai multe despre Spark?

Există multe tutoriale pe Internet de unde se poate învăţa Spark, inclusiv acesta.

Însă, dacă doriţi să sacrificaţi mai mult din timpul vostru, pentru a înţelege funcţionalităţile Spark mai bine, vă recomand să citiţi cartea "Learning Spark".

Cartea se citeşte uşor, porneşte de la zero, descrie toate funcţionalităţile Spark şi conţine multe exemple practice în Java, Scala şi Python.

O altă sursă foarte bună pentru a învăţa Spark este propria lor documentaţie publică (public documentation). Marele avantaj al acesteia este că include cele mai noi feature-uri Spark. De exemplu, la momentul scrierii acestui articol, cartea"Learning Spark" se referă la Spark 1.3, în timp ce ultima documentaţie prezintă Spark 1.6.

Dacă doriţi să învăţaţi Spark, vă recomand să începeţi cu cartea şi doar apoi să apelaţi la documentaţia care descrie ultimele feature-uri. Prefer să încep cu cartea deoarece prezintă informaţia în ordinea corectă şi deoarece o explică foarte bine.

Arhitectura Spark

După părerea mea, aici găsim adevărata valoare a lui Spark. Dacă învăţaţi fundamentele Spark Core, puteţi să le aplicaţi în mai multe contexte de lucru precum procesarea batch, machine learning, SQL, procesare streaming şi procesare de graph-uri. Mai mult, aveţi posibilitatea de a combina, de exemplu, codul batch cu codul SQL în acelaşi fişier al unei clase Java. Imaginaţi-vă câte linii de cod Java ar fi necesare pentru a completa următorul statement SQL"select * from user_table where location = "US" order by age desc".

Ecosistemul Hadoop este foarte mare şi include framework-uri diferite pentru diverse contexte de lucru: Hive pentru SQL, MapReduce pentru procesare batch, Giraph pentru procesare de graph-uri, Storm pentru procesare în timp real, Mahout pentru machine learning. Dacă doriţi să învăţaţi/lucraţi cu mai multe contexte de lucru de acest fel, va trebui ca, de fiecare dată, să învăţaţi un nou framework. Spark integrează toate aceste contexte, astfel încât perioada de învăţare, atunci când se trece de la procesare batch (Spark Core) la procesare în timp real (Spark Streaming) să fie mai mică decât atunci când se trece de la MapReduce la Storm, de exemplu.

Moduri simple de a rula Spark

Primul lucru la care trebuie să vă gândiţi înainte de a scrie cod Spark este că aveţi nevoie de un cluster de calculatoare și abilităţi Linux pentru a crea un cluster. Probabil că vă gândiţi să renunţaţi la a scrie cod Spark în acest moment.

Mai jos voi prezenta câteva moduri simple de a rula codul Spark.

1.IDE-ul vostru preferat (ex. IDEA, Eclipse pentru Java)

Puteţi să scrieţi şi să vă testaţi codul direct de pe IDE-ul vostru, fără vreun cluster Spark. 

2.Lansare de sine stătătoare (standalone)

Dacă trebuie să accesaţi funcţionalităţile unui cluster Spark, puteţi lansa Spark pe o singură maşină (calculator). Trebuie doar să descărcaţi o versiune pre-build de Spark, să o dezarhivaţi (unzip) şi să rulaţi ſcript-ul sbin/start-all.sh. Puteţi citi mai multe detalii aici (here).

3.Amazon EMR

Utilizând serviciul EMR, puteţi lansa clusterul Spark pe mai multe maşini, utilizând doar o pagină web şi un mouse. Consultaţi documentaţia Amazon pentru un tutorial complet. Singurul dezavantaj este că vă va costa ceva bani.

4.Furnizori Hadoop

Cei mai mari furnizori Hadoop sunt Cloudera şi Hortonworks. Hadoop oferă maşini virtuale (virtual machines) pe care le puteţi descărca şi instala pe calculatorul vostru. Astfel veţi avea un singur cluster Hadoop, cluster care va conţine serviciul Spark.

5.Cum utilizăm Docker

Puteţi urmări acest tutorial (video tutorial) pentru a vedea cum Docker şi Zeppelin vă pot ajuta să rulaţi exemplele Spark.

Suport pentru limbaje multiple

Apache Spark asigură suport nativ pentru Scala, Java, Python şi, mai recent, pentru R language, deci o gamă largă de programatori se pot folosi de Spark.

Spark este scris, în mare parte, în Scala, şi rulează într-un JVM container, deci are o performanţă bună pentru Java. Python este un limbaj integrat care asigură o performanţă bună prin utilizarea inteligentă a Py4J.

RDD

RDD este doar o colecţie imutabilă (permanentă), distribuită de obiecte.

Pornind de la imaginea de mai sus, putem să ne imaginăm RDD drept o colecţie de caractere (pentru Java), partiţionate şi distribuite pe mai multe maşini (calculatoare). Partiţiile sunt unităţile de distribuţie pentru RDD, similare blocurilor de date pentru HDFS.

RDD este modalitatea prin care Spark asigură o gestionare bună a datelor (data management) în timpul execuţiei, un pe care MapReduce nu îl oferă.

Operaţiuni Spark: transformări şi acţiuni

Orice aplicaţie Spark presupune două tipuri de operaţii: transformări şi acţiuni (transformations and actions).Transformările vă permit să creaţi un nou RDD dintr-un alt RDD.

Diagramele de mai jos ilustrează două dintre operaţiile cele mai frecvente: map şi filter (filtrarea).

Pentru cazul transformării de tip « map », din imaginea de mai jos, Spark iterează distribuit pentru fiecare element şi incrementează valoarea cu o unitate, rezultând astfel un nou RDD, numit MapRDD.

Toate transformările din Spark sunt leneşe.

Acţiunea calculează un rezultat dintr-un RDD.

Un exemplu de acţiune este count(), care returnează numărul de elemente dintr-un RDD.

Acţiunile luate returnează un şir cu elementele RDD, iar saveAsTextFile() persistă elementele RDD pe o sursă externă de date, precum HDFS.

Gata cu teoria!

În cadrul prezentării de la TSM, vă voi arăta mostre de cod Spark care vor include toate exemplele descrise în acest articol.

Dacă doriţi să aflaţi mai multe despre Spark şi alte framework-uri BigData, vă invit să vă abonaţi la BigData/DataScience community from Cluj

În aceeaşi ediţie ... (46)

▼ TOATE ARTICOLELE ▼

Conferință TSM

NUMĂRUL 147 - Automotive

Sponsori

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