Procesari Hadoop folosind multiple tipuri de [623136]

Universitatea POLITEHNICA Bucure ști
Facultatea Automatică și Calculatoare
Departamentul Automatică și Informatică Industrială

Procesari Hadoop folosind multiple tipuri de
baze de date

Coordonato r Student: [anonimizat]

2016

Cuprins

1. Introducere ………………………….. ………………………….. ………………………….. ………………………….. ………… 3
2. Scopul lucrarii ………………………….. ………………………….. ………………………….. ………………………….. …….. 4
3. Neo4j ………………………….. ………………………….. ………………………….. ………………………….. …………………. 5
4. MongoDb ………………………….. ………………………….. ………………………….. ………………………….. ………….. 10
5. Topu l Bazelor de Date ………………………….. ………………………….. ………………………….. …………………… 13
6. Hadoop si Neo4j ………………………….. ………………………….. ………………………….. ………………………….. . 13
Bibliografie ………………………….. ………………………….. ………………………….. ………………………….. …………….. 15

1. Introducere

Bazele de date relaționale sau RDMBS (Relational database management systems) fac
parte din tehnologia predominantă care este folosită la ora actuală pentru a stoca și păstra date
atât pentru aplicațiile web cât și pentru aplicațiile din companii. Chiar dacă pe parc ursul timpului
s-a mai încercat adoptarea unor alte tehnologii cum ar fi baze de date bazate pe obiecte sau
stocarea sub formă de XML nu au reușit să fie atât de populare ca bazele de date relaționale,
acestea chiar fiind absorbite ajungându -se să se poată stoca direct un XML și apoi să fie folosit
pentru indexare de text.
Recent conceptul de a avea o singură bază de date care poate acoperi absolut orice nevoie
de stocare a început să fie analizat de către cei care lucrează în domeniu și astfel s -au lovit d e
probleme de eficiență și consistență a datelor lucru ce a făcut la apariția unei varietăți mari de
alternative ale bazelor de date relaționale.
Acest lucru a dus la apariția de baze de date numite NOSQL (not only SQL), utilizat pentru a
specifica creșter ea bazelor de date non relaționale care devin din ce în ce mai folosite de către
dezvoltatorii Web.
Conceptele de bază, tehnicile și modelele de programare folosite la implementarea bazelor
de date NoSql sunt următoarele: Consistența datelor care spune în ce mod un sistem de date
este consistent sau nu după execuția unor operații. Se poate spune că într -un sistem distribuit
de obicei atunci când cineva efectuează o operație de scriere în baza de date, toți ceilalți cliente
care vor să efectueze o operație d e citire trebuie să aibă disponibile toate datele care au fost
scrise anterior.
Disponibilitatea datelor înseamnă că datele trebuie să fie stocate într -un sistem care permite
citirea și scrierea continuă chiar și atunci când unul dintre computerele din sis temul distribuit are
o problemă hardware sau software. Toleranța la partiții se referă la faptul că atunci când
comunicația se face în rețea, datele trebuie să fie disponibile chiar dacă între două noduri din
rețea nu se poate realiza o conexiune la moment ul în care se face cererea. Astfel sistemul
trebuie să reușească să gestioneze acest tip de problemă iar una din rezolvări ar fi multiplicarea
datelor astfel încât atunci când un nod nu este disponibil, datele necesare să fie accesate dintr –
o altă locație.
Stocare datelor se realizează sub formă de cheie -valoare, având un model simplu în comun:
un dicționar, o mapare care ajută clienții să pună sau să extragă valori pentru diferite chei. Pe
lângă faptul că ne oferă un API (interfețe ce pot fi implementate î n funcție de nevoia de
business), stocările moderne sub formă de cheie valoare favorizează scalabilitatea crescută și
consistentă iar multe dintre ele omit cererile ad -hoc și în special join -urile și operațiile agregate.
De obicei lungimea cheilor stocare au o dimensiune limitată la un număr de octeți pe când la
valoare sunt mai puține limitări de dimensiune pentru date.

Cum se poate vedea in poza de mai sus sunt patru tipuri de baze de date.
Pentru fiecare tip, se va alege o baza de dat e si va fi analiza ta pentru a putea stabili cum se
comporta fiecare baza de date atunci cand este vorba de o cantitate mare de informatie.

2. Scopul lucrarii

Cercetarea se bazeaza pe folosirea de multiple baze de date, in vederea alegerii celei mai
potrivite pentru proiectul actual.
Se vor studia timpii de raspuns de scriere si citire dar si stabilitatea de care dau dovada.
De asemenea este foarte importanta utilizarea lor in retea pentru a putea fi distribuite pe intreg
cluster -ul de computere.

Obiectivul general este de a crea o aplicație cu ajutorul căreia firmele de Business
Intelligence (BI) care vor analiza datele provenite dintr -un lanț de magazine de tip supermarket
să poată scoate rapoarte în ceea ce privește vânzările acestora.
De asemenea vor putea să precizeze care vor fi vânzările în anumite zile cheie și cu ce
anume trebuie să alimenteze stoc ul de produse într -un mod eficient.

Un obiectiv secundar al proiectului este învățarea de tehnologii noi și implementarea lor în
aplicații care vor putea fi folosite pe piață pentru a ușura munca oamenilor.

3. Neo4j

Neo4j este o baza de date open -source fondată pe teoria grafurilor, fiind o soluție optimizată
pentru a modela și interoga volum e mari de date strâns relaționate, reprezentabile prin structuri
de tip graf. Dinamismul,creșterea volumului datelor, precum și evolutia continuă a procesării
informațiilora impus ieșirea din spațiul bazelor de date relaționale tradiționale și orientarea s pre
soluții NOSQL.

Neo4j face parte din fenomenul NOSQL încadrându -se încategoria bazelor de date de tip
graf. O caracteristică unică a acestora este gradul ridicat de adaptibilitate la modelele reale de
date.
Atât în cazul bazelor de date relaționale cât și în cazul unor soluțiiNOSQL (non -graph)
procesulde modelare / design trece prin două faze :
 Definirea conceptelor , a entitățilorși a interacți unii dintre ele – model logic/real
 Materializarea modelului logic într -un model fizic/abstract ( Ex. În cazul bazelor de date
relaționale schemă)
De cele mai multe ori modelul logic este foarte diferit de modelul fizic. În cadrul unei
organizații software în prima fază poate participa orice echipă nu neapărat tehnică(management
/ sales ) pentru o mai bună definire a cerințelor sau conceptelor.În cea de a doua fază însă are
loc abstractizarea modelului logic în funcție de opțiunea de stocare. Astfel gradul d e înțelegere
al modelului logic scade odată cu creșterea complexității datelor.
Marele avantaj al bazelor de date de tip graf și implicit utilizarea Neo4j este că modelul logic
este același cu modelul fizic. Având acest mod de reprezentare uniformă sau as tfel spus o
reprezentare "human readable" ce oferă un mare grad de flexibilitate , adaptibilitate și
expresivitate în modelarea datelor reale.
Acest tip de bază de date permite o abordare iterativă putând fi utilizată cu succes în
strategia de development de tip Agile.
Reprezentarea datelor:
În Neo4j datele sunt reprezentate prin noduri și relații. Atât nodurile cât și relațiile pot fi avea
proprietăți.Relațiile au un rol foarte important în cadrul bazei de date de tip graf pentru că
traversarea grafului și implicit manipularea datelor se realizează prin intermediul lor.
O relație implică întotdeauna două noduri, are o direcțieși un tip identificat unic printr -un nume.

În exemplul de mai sus relația "KNOWS" conectează nodurile "Autor 1" cu "Autor 2 "
precizând de asemenea proprietatea adițională "since".
Relativ la un nod relațiile se pot clasifica în două tipuri :
 incoming
 outgoing

Atât proprietățile unui nod cât și cele aleunei relații pot fi indexate pentru îmbunătățirea
performanței de traversare a grafului ( similar cu indexarea coloanelor în bazele de date
tradiționale ).
Forțând o comparație cu bazele de date tradiționale, vă puteți imagina un nod ca o înregistrare
dintr-un tabel, iar o relație ca o înregistrare dintr -un tabel de legătură sau o pereche de coloane
din același tabel în cazul unei reprezentări tip denormaliza t.
Limbajul de interogare Cypher
Neo4j are propriul limbaj de interogare a datelor organizate în structuri de graf.Este folosit
conceptul de "Traversal" prin intermediul căruia se navighează în graf, se indentifică drumurile
și implicit se selecteză nodu rile pentru rezultatul unei interogări.
Limbajul Cypher este un limbaj de interogare declarativ fiind foarte intuitiv și "human readable",
putând fi înțeles cu ușurință chiar și de o persoană non -tehnică.
Unele cuvinte cheie sunt inspirate din SQL cum ar fi: where, order by , limit, skip (echivalentul
offset)
Limbajul este alcătuind din următoarele clauze :
START – punctul de intrare în graf. Orice interogare în graf are cel puțin un nod de start,
MATCH -șablonul pentru căutarea nodurilor și care este l egat de nodul de start,
WHERE -condițiile de filtrare a nodurilor / relațiilor,
RETURN -rezultatul interogării,
CREATE -creează noduri sau relații ,
DELETE -șterge noduri sau relații,
SET -setează proprietăți noduri sau relații,
FOREACH -update pe liste de noduri,

WITH -împarte interogarea în mai multe părți distincte.
Pentru exemplificare vă propun următorul graf care rep rezintă autorii care publică într -o revista
relaționați după cum urmează :

Graful de mai sus se poate crea cu următoar ea instrucțiune Cypher :
CREATE autor1 = { name : "Autor1, worksAt : "Company1" },
articol1 = { title : "Artic ol1" },
articol2= { title : "Articol2" },
(autor1) -[:Wrote] ->(articol1),
(autor1) -[:Wrote] ->(articol2),
revista = { name : " Revista", domain : "IT" , poweredBy:"Gemini
Solutions"},

(articol1) -[:Published_in {date:"2013} ] ->(revista),
autor2 = { name : "Autor2, worksAt : "Company2" },
articol3 = { title : "Articol3" },
(autor2) -[:Wrote] ->(articol3)},
autor3 = { name : "Autor3, worksAt : "Company3" },
articol4 = { title : " Articol4" },
(autor3) – [:Wrote] ->(articol4)}
(autor2) -[:Knows] ->(autor3),
subject1 = { subject : " Spring Framework" },
subject2 = { subject : " NOSQL },
subject3 = { subject : " Agile" },
subject4 = { subject : " Android"},
(autor1) -[:Interested_in] ->(subject1),
(autor1) -[:Interested_in] ->(subject3),
(autor2) -[:Interested_in] ->(subject2),
(autor3) -[:Interested_in] ->(subject4);

Cum se observa și mai sus crearea nodurilor și a relațiilor este foarte intuitivă și flexibilă.
Exemple de interogări pe graful de mai sus:
1. start n=node(*) match n -[:WROTE] ->(a) return n, count(a)
(rezultatul va afisa fiecare autor cu numarul de articolo publicate)

2. start magazine=node(*) match magazine< -[:Published_in] –
(article)< -[:Wrote] -(author) -[:Interested_in] ->(subject) where
magazine.name?="" Revista" and subject.subject?="Java" return
author.name, article;
(rezultatul va afisa toate articolele cu subiectul Java impreuna cu numele autorului)

3. start n=n ode(*)match n< -[:Published_in] -(article) return
count(article)
( rezulatul afiseaza numarul de articolo publicate în Revista )

SpringData și Neo4j
Neo4j expune un API Java foarte variat care permite crearea și manipularea grafurilor.
O alta opțiune este utilizarea platformei REST. Fondatorii Spring Framework au creat un nou
modul adresat bazelor de date NOSQL.
Numele lui este String Data și are la bază aceeași abstactizare a interacțiunii cu bazele de date
princonceptul "Templates" ( ex. JDBCTemplate) .
Ca analogie, la fel cum interacțiunea cu SQL se realizează prin hibernate , interacțiunea cu
Cypher se realizează prin Spring Data Neo4j support.
Instalarea bazei de date
1. Se descarca executabilul de pe site -ul oficial: http://neo4j.com/download/
2. Se instaleaza urmand pasii de instalare
3. Se alege locatia bazei de date
4. Se porneste procesul iar baza de date poate fi accesata din browser la portul 7474

5. Accesarea ba zei plus executarea unui exemplu simplu:

4. MongoDb

MongoDB este o bază de date NoSQL open -source orientată pe documente. Acestă bază
de date beneficiază de suport din partea companiei 10gen. MongoDB face parte din familia de
sistemelor de baze de date NoSQL. Diferența principală constă în faptul că stocare a datelor nu
se face folosind tabele precum într -o bază de date relațională, MongoDB stochează datele sub
formă de documente JSON cu scheme dinamice.

MongoDB este o bază de date open -source NoSQL scrisă în C++. Aceasta poate conține mai
multe baze de date, colecții și indecși. În unele cazuri (baze de date și colecții ) aceste obiecte
pot fi create implicit. Odată create, ele se găsesc în catalogul sist emului db.systems.collection,
db.system.indexes. Colecțiile conțin documente (BSON). Aceste documente conțin la rândul lor
mai multe câmpuri. În MongoDB nu există câmpuri predefinite spre deosebire de bazele de date
relaționale, unde există coloanele care sunt definite în momentul în care tabelele sunt create.
Nu există schemă pentru câmpurile dintr -un document, acestea precum și tipurile lor pot varia.
Astfel nu există operația de „alter table” pentru adăugare de coloane. În practică este obișnuit
ca o col ecție să aibă o structură omogenă, deși nu este o cerință, colecțiile putând avea
structuri diferite. Această flexibilitate presupune ușurință în migrarea și modificarea imaginii de
ansamblu asupra datelor.

Caracteristicile MongoDB
Stocarea datelor sub fo rmă de documente ;
Baza de date MongoDB stochează obiecte (documente). Aceste documente reduc nevoia de
join;
Prezintă support pentru indexare
Indexarea pe fiecare din atribute se face în modul tradițional (RDBMS) asupra cheilor de
regăsire ale documentelo r;
Disponibilitate – Disponibilitatea datelor este asigurată printr -un proces automat de failover;
Auto -Sharding
Shardingul sau partiționarea datelor pe orizontală se face automat. Citirile și scrierile sunt
distribuite pe partiții. Lipsa joinurilor face c a interogările distribuite să fie rapide;
Limbajul de interogare
Limbajul de interogare este îmbunatatit și păstreaza principii SQL si C++;
Modificări rapide
MongoDB suportă operații de actualizare atomice căt și pe cele tradiționale. Operatiile de mai
jos demonstrează flexibilitatea limbajului NoSQL
$inc – { $inc : { camp : valoare } } – incementează câmpul “camp” cu numărul dat ca valoare
$set -{ $set : { camp : valoare } } – câmpul „camp” ia valoarea dată
$push -{ $push : { camp : valoare } } – se adaugă valoarea dată câmpului specificat
$addToSet -{ $addToSet : { camp : valoare } } – adaugarea valorii într -un vector
$pop -{ $pop : { camp : 1 } } –șterge ultimul element dintr -un vector
$pop -{ $pop : { camp : -1 } } –șterge primul element dintr -un vector
$pull -{ $pull : { camp : _valoare } } – șterge toate valorile egale cu “valoare” din câmpul “camp
Map Reduce
MongoDB folosește map/reduce pentru agregare și procesare batch;

Instalarea bazei de date Mongo:

1. Descarcarea ultimei ve rsiuni de baza de date accesand:
https://www.mongodb.org/downloads#production
2. Crearea locat iei de stocare a bazei de date ( pentru windows locatia prestabilita este
C:\data\db
3. Pornirea procesului mongod.exe
4. Accesarea bazei de date folosind Robomongo, utilitar de management al bazei de date
(portul pe care este pornita baza de date este 27017 initial )

Pentru pornirea securizata a bazei de date se folosesc urmatorii pasi:

1. Se deschide Shell -ul folosind mongo.exe
2. Se foloseste comanda : use admin pentru a accesa baza de date cu configurari
3. Se adauga un utilizator cu acces de root
db.createUser(
{
user: "accountUser",
pwd: "password",
roles: [ "readWrite", "dbAdmin" ]
}
)
Pentru a face un user sa fie root este nevoie ca el sa fie in urmatoarele grupuri :
readWriteAnyDatabas e,
dbAdminAnyDatabas e,
userAdminAnyDatabas e
4. Se pornest e procesul mongod.exe cu comand a –auth sau se adauga urmatoare linie in
fisierul config.properties “auth=true ”

5. Topul Bazelor de Date

Am preluat topul bazelor de date, efectuat de catre cei de la “DB-Engines Ranking ” . Topul
arata ultilizarea bazelor de date. Dupa cum observam, bazele de date relationale sunt inca cele
mai folosite, dar foarte rapid vin din urma cele bazate pe documente, cum ar fi MongoDB.
Hbase este in top pe locul 16, fiind o baza de date columnara, iar Neo4j este pe locul 21, fiind o
baza de date bazata pe grafuri.

6.Hadoop si Neo4j

Folosind Hadoop voi incerca sa aduc datele din starea de output, cea care este generata dupa
procesarea acestora in baza de date sub forma de graf pentru o mai buna gestiune.

Bibliografie

1. http://todaysoftmag.ro/article/384/neo4j -graph -database –
modelarea -datelor -interconectate
2. http://app.robomongo.org/
3. https://en.wikipedia.org/wiki/MongoDB
4. http://db -engines.com/en/ranking
5. https://github.com/neo4j -examples/movies -java-spring -data-
neo4j -4

Similar Posts