3.1 Istoria apariției termenului BigData

Termenul Big Data a apărut relativ recent. Google Trends arată începutul unei creșteri active în utilizarea expresiei începând cu 2011:

În același timp, doar leneșul nu folosește termenul acum. Mai ales adesea, termenul este folosit inadecvat de marketeri. Deci, ce este de fapt Big Data? Deoarece am decis să precizez și să evidențiez problematica în mod sistematic, este necesar să definesc conceptul.

În practica mea, m-am întâlnit cu diferite definiții:

  • Big Data este atunci când există mai mult de 100 GB de date (500 GB, 1 TB, orice doriți).
  • Big Data sunt date care nu pot fi procesate în Excel.
  • Big Data sunt date care nu pot fi procesate pe un singur computer.

Și chiar și acestea:

  • Big Data este, în general, orice date.
  • Big Data nu există, a fost inventat de marketeri.

Voi rămâne la definiția de pe wikipedia:

Big data reprezintă o serie de abordări, instrumente și metode de prelucrare a datelor structurate și nestructurate de volume uriașe și diversitate semnificativă în vederea obținerii de rezultate perceptibile de om și eficiente în condiții de creștere continuă, distribuție pe numeroase noduri ale unei rețele de calculatoare, formate la sfârșitul anilor 2000, alternativă la sistemele tradiționale de gestionare a bazelor de date și soluțiile de clasă business intelligence.

Astfel, prin Big Data voi înțelege nu o anumită cantitate de date și nici măcar datele în sine, ci metode de prelucrare a acestora, care permit prelucrarea distribuită a informațiilor. Aceste metode pot fi aplicate la seturi de date mari (cum ar fi conținutul tuturor paginilor de pe Internet), precum și la seturi de date mici (cum ar fi conținutul acestei prelegeri).

Iată câteva exemple de ceea ce ar putea fi o sursă de date care necesită tehnici de date mari:

  • Jurnalele comportamentului utilizatorului pe Internet
  • Semnale GPS de la mașini pentru o companie de transport
  • Date preluate de la senzorii din Large Hadron Collider
  • Cărți digitizate în Biblioteca de Stat Rusă
  • Informații despre tranzacțiile tuturor clienților băncii
  • Informații despre toate achizițiile dintr-un mare lanț de retail etc.

Numărul surselor de date crește rapid, ceea ce înseamnă că tehnologiile de procesare a datelor devin din ce în ce mai solicitate.

3.2 Principii de date mari

Pe baza definiției Big Data, putem formula principiile de bază ale lucrului cu astfel de date:

1. Scalabilitate orizontală. Deoarece poate exista o cantitate arbitrar de mare de date, orice sistem care implică prelucrarea datelor mari trebuie să fie extensibil. Volumul datelor a crescut de 2 ori - cantitatea de fier din cluster a crescut de 2 ori și totul a continuat să funcționeze.

2. Toleranta la erori. Principiul scalabilității orizontale implică faptul că într-un cluster pot exista multe mașini. De exemplu, clusterul Hadoop de la Yahoo are peste 42.000 de mașini (puteți vedea dimensiunile clusterelor din organizații la acest link). Aceasta înseamnă că unele dintre aceste mașini vor fi garantate să eșueze. Practicile de date mari trebuie să fie conștiente de aceste întreruperi și să le supraviețuiască fără consecințe semnificative.

3. Localitatea datelor. În sistemele mari distribuite, datele sunt distribuite pe un număr mare de mașini. Dacă datele sunt localizate fizic pe un server și procesate pe altul, costurile transferului de date pot depăși costurile prelucrării în sine. Prin urmare, unul dintre cele mai importante principii pentru proiectarea soluțiilor BigData este principiul localității datelor - dacă este posibil, procesăm datele pe aceeași mașină pe care le stocăm.

Toate instrumentele moderne de date mari urmează aceste trei principii într-un fel sau altul. Pentru a le urmări, este necesar să se vină cu câteva metode, metode și paradigme pentru dezvoltarea instrumentelor de dezvoltare a datelor. Una dintre cele mai clasice metode pe care o voi analiza în prelegerea de astăzi.

3.3 MapReduce

MapReduce este un model de procesare distribuită a datelor propus de Google pentru procesarea unor cantități mari de date pe clustere de computere. MapReduce este bine ilustrat de următoarea imagine:

MapReduce presupune că datele sunt organizate în unele înregistrări. Prelucrarea datelor are loc în 3 etape:

1. Etapa hartă . În această etapă, datele sunt preprocesate folosind funcția map(), care este definită de utilizator. Lucrarea acestei etape este de a preprocesa și filtra datele. Operația este foarte similară cu operarea hărții în limbaje de programare funcționale - fiecărei înregistrări de intrare se aplică o funcție personalizată.

Funcția map() aplicată unei singure înregistrări de intrare produce multe perechi cheie-valoare. Set - adică poate returna o singură înregistrare, nu poate returna nimic sau poate returna mai multe perechi cheie-valoare. Ceea ce va fi în cheie și în valoare depinde de utilizator, dar cheia este un lucru foarte important, deoarece datele cu o singură cheie în viitor vor intra într-o singură instanță a funcției de reducere.

2. Stage Shuffle. Trece neobservat de utilizator. În această etapă, ieșirea funcției de hartă este „binned” - fiecare bin corespunde unei taste de ieșire a etapei de hartă. În viitor, aceste coșuri vor servi drept input pentru reducere.

3. Etapa Reduce. Fiecare „coș” cu valori generate în etapa de amestecare ajunge la intrarea funcției reduce().

Funcția de reducere este dată de utilizator și calculează rezultatul final pentru un singur „coș” . Setul tuturor valorilor returnate de funcția reduce() este rezultatul final al sarcinii MapReduce.

Câteva fapte suplimentare despre MapReduce:

  1. Toate rulările funcției de hartă funcționează independent și pot rula în paralel, inclusiv pe diferite mașini cluster.
  2. Toate rulările funcției de reducere funcționează independent și pot rula în paralel, inclusiv pe diferite mașini cluster.
  3. Shuffle în interior reprezintă o sortare paralelă, deci poate funcționa și pe diferite mașini cluster. Punctele 1-3 vă permit să implementați principiul scalabilității orizontale .
  4. Funcția de hartă este utilizată de obicei pe aceeași mașină în care sunt stocate datele - acest lucru reduce transmiterea datelor prin rețea (principiul localității datelor).
  5. MapReduce este întotdeauna o scanare completă a datelor, nu există indici. Aceasta înseamnă că MapReduce este slab aplicabil atunci când un răspuns este necesar foarte rapid.

3.4 Exemple de sarcini rezolvate eficient cu MapReduce

Număr de cuvinte

Să începem cu sarcina clasică - Număr de cuvinte. Sarcina este formulată astfel: există un corp mare de documente. Sarcina este de a calcula numărul total de ori când apare în corpus pentru fiecare cuvânt care apare cel puțin o dată în corpus.

Soluţie:

Deoarece avem un corp mare de documente, să fie un document o înregistrare de intrare pentru sarcina MapRreduce. În MapReduce, putem defini doar funcții definite de utilizator, ceea ce vom face (vom folosi pseudocod asemănător python):

def map(doc): 
for word in doc: 
yield word, 1 
def reduce(word, values): 
yield word, sum(values) 

Funcția de hartă transformă documentul de intrare într-un set de perechi (cuvânt, 1), amestecați transparent pentru noi îl transformă în perechi (cuvânt, [1,1,1,1,1,1]), reduceți sumele acestea, revenind răspunsul final pentru cuvântul .

Procesarea jurnalelor sistemului de publicitate

Al doilea exemplu este preluat din practica reală a Alianței Data-Centric.

Sarcină: există un csv-log al sistemului de publicitate de forma:

<user_id>,<country>,<city>,<campaign_id>,<creative_id>,<payment></p> 
 
11111,RU,Moscow,2,4,0.3 
22222,RU,Voronezh,2,3,0.2 
13413,UA,Kyiv,4,11,0.7 
… 

Este necesar să se calculeze costul mediu de afișare a reclamelor în orașele Rusiei.

Soluţie:

def map(record): 
user_id, country, city, campaign_id, creative_id, payment = record.split(",") 
payment=float(payment) 
if country == "RU": 
yield city, payment 
def reduce(city, payments): 
yield city, sum(payments)/len(payments) 

Funcția de hartă verifică dacă avem nevoie de această intrare - iar dacă o facem, lasă doar informațiile necesare (oraș și suma de plată). Funcția reducere calculează răspunsul final pentru un oraș având în vedere o listă a tuturor plăților din acel oraș.