Differences

This shows you the differences between two versions of the page.

Link to this comparison view

laboratoare:laborator08b [2015/12/11 03:36]
Andrei Roșu-Cojocaru created
laboratoare:laborator08b [2015/12/11 03:56] (current)
Andrei Roșu-Cojocaru
Line 54: Line 54:
 <note tip>​Există de asemenea posibilitatea de a accesa valorile având o anumită amprentă de timp (respectiv înainte sau după o amprentă de timp) sau chiar mai multe versiuni în cadrul unei singure interogări.</​note>​ <note tip>​Există de asemenea posibilitatea de a accesa valorile având o anumită amprentă de timp (respectiv înainte sau după o amprentă de timp) sau chiar mai multe versiuni în cadrul unei singure interogări.</​note>​
  
-{{ :​laboratoare:​laborator10:figura08_structura_unui_rand_HBase.png?nolink }}+{{ :​laboratoare:​laborator08:08hbase_record_structure.png?nolink }}
  
 <​html>​ <​html>​
Line 81: Line 81:
 Fiecare regiune este gestionată de un **server de regiune** (//eng.// regionserver),​ fiecare dintre aceste servere putând opera asupra mai multor regiuni concomitent. Numărul de regiuni care pot fi gestionate de un server de regiune este cuprins între 10 şi 1000, fiecare regiune putând avea o dimensiune cuprinsă între 1GB şi 2GB. Aceste valori pot fi modificate cu timpul, principiul de distribuire a regiunilor pe serverele aferente fiind determinat de posibilităţile de stocare şi de capacităţile de procesare ale acestora. Implementarea unui astfel de mecanism permite recuperarea în caz de eroare în momentul în care un server se opreşte din funcţionare din cauza unei erori şi asigură echilibrarea încărcării. Procesul de împărţire este de asemenea foarte rapid (aproape instantaneu) de vreme ce regiunile sunt citite din fişierele de stocare originale până la momentul în care sunt rescrise în alte fişiere de stocare în mod asincron. Fiecare regiune este gestionată de un **server de regiune** (//eng.// regionserver),​ fiecare dintre aceste servere putând opera asupra mai multor regiuni concomitent. Numărul de regiuni care pot fi gestionate de un server de regiune este cuprins între 10 şi 1000, fiecare regiune putând avea o dimensiune cuprinsă între 1GB şi 2GB. Aceste valori pot fi modificate cu timpul, principiul de distribuire a regiunilor pe serverele aferente fiind determinat de posibilităţile de stocare şi de capacităţile de procesare ale acestora. Implementarea unui astfel de mecanism permite recuperarea în caz de eroare în momentul în care un server se opreşte din funcţionare din cauza unei erori şi asigură echilibrarea încărcării. Procesul de împărţire este de asemenea foarte rapid (aproape instantaneu) de vreme ce regiunile sunt citite din fişierele de stocare originale până la momentul în care sunt rescrise în alte fişiere de stocare în mod asincron.
  
-{{ :​laboratoare:​laborator10:figura09_servere_de_regiune.png?nolink }}+{{ :​laboratoare:​laborator08:09regionservers.png?nolink }}
    
 În HBase, datele sunt reţinute în fişiere de stocare, denumite **HFile**, implementate ca asocieri persistente şi ordonate invariabil de la chei la valori. Acestea oferă un API pentru a accesa valori specifice şi pentru a scana o gamă de valori, dându-se o cheie de început şi o cheie de sfârşit. Intern, ele sunt reprezentate ca secvenţe de blocuri sufixate de un index. Dimensiunea implicită a unui bloc este de 64KB, dar aceasta poate fi configurată diferit în cazul în care este necesar. El este încărcat atunci când fişierul e deschis şi reţinut în memorie. Întrucât fiecare HFile dispune de un index de bloc, căutările pot fi realizate printr-o singură parcurgere a datelor pe disc. Astfel, blocul care ar putea conţine cheia solicitată este identificat printr-o căutare binară în indecşii aflaţi în memorie, după care este citit de pe disc pentru a se determina cheia propriu-zisă. De regulă, fişierele de stocare sunt reţinute în sistemul de fişiere distribuit HDFS, caracterizat prin scalabilitate,​ persistenţă şi replicabilitate,​ garantând că datele nu sunt niciodată pierdute prin reţinerea modificărilor în cadrul unui număr de maşini fizice. În HBase, datele sunt reţinute în fişiere de stocare, denumite **HFile**, implementate ca asocieri persistente şi ordonate invariabil de la chei la valori. Acestea oferă un API pentru a accesa valori specifice şi pentru a scana o gamă de valori, dându-se o cheie de început şi o cheie de sfârşit. Intern, ele sunt reprezentate ca secvenţe de blocuri sufixate de un index. Dimensiunea implicită a unui bloc este de 64KB, dar aceasta poate fi configurată diferit în cazul în care este necesar. El este încărcat atunci când fişierul e deschis şi reţinut în memorie. Întrucât fiecare HFile dispune de un index de bloc, căutările pot fi realizate printr-o singură parcurgere a datelor pe disc. Astfel, blocul care ar putea conţine cheia solicitată este identificat printr-o căutare binară în indecşii aflaţi în memorie, după care este citit de pe disc pentru a se determina cheia propriu-zisă. De regulă, fişierele de stocare sunt reţinute în sistemul de fişiere distribuit HDFS, caracterizat prin scalabilitate,​ persistenţă şi replicabilitate,​ garantând că datele nu sunt niciodată pierdute prin reţinerea modificărilor în cadrul unui număr de maşini fizice.
Line 104: Line 104:
 Totodată, serverul de tip master este responsabil pentru gestiunea încărcării serverelor de regiune, distribuind regiunile către noduri mai puţin ocupate, realizându-se astfel echilibrarea acestora. El nu se ocupă cu stocarea datelor şi nu este implicat în procesul de obţinere a informaţiilor din baza de date. Rolul său este doar de a realiza încărcarea uniformă, gestionând starea clusterului,​ fără a oferi însă servicii de date nici serverelor de regiune şi nici clienţilor,​ astfel încât gradul său de ocupare este destul de redus. Serverul de tip master gestionează şi modificările la nivelul schemei de date precum şi alte operaţii legate de metadate (cum ar fi crearea de tabele sau de familii de coloane). Responsabilitatea serverelor de regiune constă în tratarea cererilor de citire şi de scriere pentru toate regiunile pe care le gestionează şi totodată pentru împărţirea regiunilor care depăşesc pragul configurat pentru dimensiunea maximă a acestora. Clienţii comunică direct cu serverele de regiune atunci când doresc să realizeze orice fel de operaţii care implică date. Totodată, serverul de tip master este responsabil pentru gestiunea încărcării serverelor de regiune, distribuind regiunile către noduri mai puţin ocupate, realizându-se astfel echilibrarea acestora. El nu se ocupă cu stocarea datelor şi nu este implicat în procesul de obţinere a informaţiilor din baza de date. Rolul său este doar de a realiza încărcarea uniformă, gestionând starea clusterului,​ fără a oferi însă servicii de date nici serverelor de regiune şi nici clienţilor,​ astfel încât gradul său de ocupare este destul de redus. Serverul de tip master gestionează şi modificările la nivelul schemei de date precum şi alte operaţii legate de metadate (cum ar fi crearea de tabele sau de familii de coloane). Responsabilitatea serverelor de regiune constă în tratarea cererilor de citire şi de scriere pentru toate regiunile pe care le gestionează şi totodată pentru împărţirea regiunilor care depăşesc pragul configurat pentru dimensiunea maximă a acestora. Clienţii comunică direct cu serverele de regiune atunci când doresc să realizeze orice fel de operaţii care implică date.
  
-{{ :​laboratoare:​laborator10:figura10_interactiunea_HBase_cu_alte_sisteme.png?nolink }}+{{ :​laboratoare:​laborator08:10hbase_integration.png?nolink }}
  
 Intern, HBase foloseşte tabele speciale denumite ''​-ROOT-''​ şi ''​.META.'',​ în cadrul cărora menţine lista curentă, starea şi locaţia tuturor regiunilor din cluster. Tabela ''​-ROOT-''​ reţine lista tabelelor de regiune ''​.META.''​. Tabela ''​.META.''​ conţine lista tuturor regiunilor din spaţiul utilizatorilor. Intrările din această tabelă sunt ordonate după denumirea regiunii, aceasta fiind formată din numele tabelei corespunzătoare regiunii din care face parte, rândul de început al regiunii, momentul de timp la care a fost creată şi un rezumat MD5 al acestor informaţii. Întrucât cheile de rând sunt sortate, identificarea unei regiuni care găzduieşte o anumită înregistrare este o problemă de determinarea unei intrări a cărei cheie este mai mare sau egală cu cea a cheii solicitate. Aceste tabele sunt actualizate pe măsură ce sunt realizate tranziţii în cadrul regiunilor, astfel încât starea tuturor regiunilor din cluster să reflecte starea lor curentă. Astfel de operaţii sunt împărţirea unei regiuni, activarea sau dezactivarea acesteia, ştergerea, relansarea unei regiuni de către procesul de echilibrare a încărcării sau în cazul opririi serverului de regiune din cauza unei erori. Intern, HBase foloseşte tabele speciale denumite ''​-ROOT-''​ şi ''​.META.'',​ în cadrul cărora menţine lista curentă, starea şi locaţia tuturor regiunilor din cluster. Tabela ''​-ROOT-''​ reţine lista tabelelor de regiune ''​.META.''​. Tabela ''​.META.''​ conţine lista tuturor regiunilor din spaţiul utilizatorilor. Intrările din această tabelă sunt ordonate după denumirea regiunii, aceasta fiind formată din numele tabelei corespunzătoare regiunii din care face parte, rândul de început al regiunii, momentul de timp la care a fost creată şi un rezumat MD5 al acestor informaţii. Întrucât cheile de rând sunt sortate, identificarea unei regiuni care găzduieşte o anumită înregistrare este o problemă de determinarea unei intrări a cărei cheie este mai mare sau egală cu cea a cheii solicitate. Aceste tabele sunt actualizate pe măsură ce sunt realizate tranziţii în cadrul regiunilor, astfel încât starea tuturor regiunilor din cluster să reflecte starea lor curentă. Astfel de operaţii sunt împărţirea unei regiuni, activarea sau dezactivarea acesteia, ştergerea, relansarea unei regiuni de către procesul de echilibrare a încărcării sau în cazul opririi serverului de regiune din cauza unei erori.
Line 114: Line 114:
 Un API pentru scanare permite iterarea eficientă pentru anumite limite ale rândurilor,​ specificând şi care coloane vor fi întoarse, respectiv numărul de versiuni pentru fiecare celulă. Coloanele pot fi identificate prin intermediul unor filtre, iar versiunile sunt determinate de intervalele de timp specificate (început şi sfârşit). În plus, sunt implementate şi funcţionalităţi mai avansate. Sistemul HBase oferă suport pentru tranzacţii ce includ un singur rând, implementând secvenţe de tip citeşte-modifică-scrie realizate în mod atomic pentru datele identificate printr-o unică cheie de rând. Deşi nu există tranzacţii pentru operaţii ce implică mai multe rânduri sau mai multe tabele, aceste operaţii pot fi realizate de utilizator în mod secvenţial,​ prin intermediul unui script, obţinându-se aceleaşi performanţe cu siguranţa accesului la date. Valorile celulelor pot fi interpretate drept contoare, actualizate în mod atomic printr-o singură operaţie astfel că, în ciuda naturii distribuite a arhitecturii,​ utilizatorii pot folosi acest mecanism pentru a implementa contoare globale, secvenţiale,​ strict consistente. ​ Un API pentru scanare permite iterarea eficientă pentru anumite limite ale rândurilor,​ specificând şi care coloane vor fi întoarse, respectiv numărul de versiuni pentru fiecare celulă. Coloanele pot fi identificate prin intermediul unor filtre, iar versiunile sunt determinate de intervalele de timp specificate (început şi sfârşit). În plus, sunt implementate şi funcţionalităţi mai avansate. Sistemul HBase oferă suport pentru tranzacţii ce includ un singur rând, implementând secvenţe de tip citeşte-modifică-scrie realizate în mod atomic pentru datele identificate printr-o unică cheie de rând. Deşi nu există tranzacţii pentru operaţii ce implică mai multe rânduri sau mai multe tabele, aceste operaţii pot fi realizate de utilizator în mod secvenţial,​ prin intermediul unui script, obţinându-se aceleaşi performanţe cu siguranţa accesului la date. Valorile celulelor pot fi interpretate drept contoare, actualizate în mod atomic printr-o singură operaţie astfel că, în ciuda naturii distribuite a arhitecturii,​ utilizatorii pot folosi acest mecanism pentru a implementa contoare globale, secvenţiale,​ strict consistente. ​
  
-De asemenea, există posibilitatea de a rula cod oferit de utilizator în cadrul spaţiului de adrese al serverului. Contextul care suportă aceste operaţii la nivelul serverului este numit **coprocesor**,​ codul având acces la datele locale aflate ​             pe server, el putând fi utilizat pentru a implementa sarcini pe seturi de date sau pentru a folosi expresii spre a sumariza datele pe baza diverşilor operatori. Această funcționalitate a fost implementată începând cu versiune 0.91.0 a HBase.+De asemenea, există posibilitatea de a rula cod oferit de utilizator în cadrul spaţiului de adrese al serverului. Contextul care suportă aceste operaţii la nivelul serverului este numit **coprocesor**,​ codul având acces la datele locale aflate pe server, el putând fi utilizat pentru a implementa sarcini pe seturi de date sau pentru a folosi expresii spre a sumariza datele pe baza diverşilor operatori. Această funcționalitate a fost implementată începând cu versiune 0.91.0 a HBase.
  
 Sistemul HBase este de asemenea integrat cu paradigma MapReduce, oferind metode care convertesc tabelele în surse de date şi în locaţii pentru stocarea datelor de ieşire, specifice sarcinilor de acest tip. Sistemul HBase este de asemenea integrat cu paradigma MapReduce, oferind metode care convertesc tabelele în surse de date şi în locaţii pentru stocarea datelor de ieşire, specifice sarcinilor de acest tip.
Line 128: Line 128:
 Pornirea shell-ului HBase se face prin comanda ''​hbase''​ (din directorul ''​$HBASE_HOME/​bin''​),​ care primeşte argumentul ''​shell'':​ Pornirea shell-ului HBase se face prin comanda ''​hbase''​ (din directorul ''​$HBASE_HOME/​bin''​),​ care primeşte argumentul ''​shell'':​
  
-<​code ​bash>+<​code>​
 student@aipi2015:/​usr/​local/​hbase/​bin$ ./hbase shell student@aipi2015:/​usr/​local/​hbase/​bin$ ./hbase shell
 </​code>​ </​code>​
Line 136: Line 136:
 O listă a tuturor comenzilor disponibile poate fi obţinută prin intermediul comenzii ''​help'',​ aceasta putând fi de asemenea invocată pentru un grup de comenzi sau pentru o comandă specifică, precizate ca parametri între ghilimele: O listă a tuturor comenzilor disponibile poate fi obţinută prin intermediul comenzii ''​help'',​ aceasta putând fi de asemenea invocată pentru un grup de comenzi sau pentru o comandă specifică, precizate ca parametri între ghilimele:
  
-<​code ​bash>+<​code>​
 hbase(main):​001:​0>​ help hbase(main):​001:​0>​ help
 hbase(main):​002:​0>​ help "​COMMAND_GROUP"​ hbase(main):​002:​0>​ help "​COMMAND_GROUP"​
Line 146: Line 146:
 Shell-ul HBase poate fi apelat cu o serie de parametrii în linia de comandă, care pot fi obţinuţi dacă se specifică parametrii ''​-h''​ sau ''​--help'':​ Shell-ul HBase poate fi apelat cu o serie de parametrii în linia de comandă, care pot fi obţinuţi dacă se specifică parametrii ''​-h''​ sau ''​--help'':​
  
-<​code ​bash>+<​code>​
 student@aipi2015:/​usr/​local/​hbase/​bin$ ./hbase shell [-h | --help] student@aipi2015:/​usr/​local/​hbase/​bin$ ./hbase shell [-h | --help]
 Usage: shell [OPTIONS] [SCRIPTFILE [ARGUMENTS]] Usage: shell [OPTIONS] [SCRIPTFILE [ARGUMENTS]]
Line 191: Line 191:
 | **version** | afişează versiunea curentă a bazei de date distribuită HBase instalată\\ <​code>​ | **version** | afişează versiunea curentă a bazei de date distribuită HBase instalată\\ <​code>​
 hbase> version hbase> version
-0.98.8-hadoop2,​ r6cfc8d064754251365e070a10a82eb169956d5fe,​ Fri Nov 14 18:26:29 PST 2014+0.98.8-hadoop2,​ r6cfc8d064754251365e070a10a82eb169956d5fe,​ Fri Nov 14 18:26:29 PST 2015
 </​code>​ | </​code>​ |
 | **whoami** | afişează utilizatorul curent autentificat în cadrul bazei de date distribuite HBase\\ <​code>​ | **whoami** | afişează utilizatorul curent autentificat în cadrul bazei de date distribuite HBase\\ <​code>​
 hbase> whoami hbase> whoami
-aipi2014 ​(auth:​SIMPLE) +aipi2015 ​(auth:​SIMPLE) 
-    groups: ​aipi2014, adm, cdrom, sudo, dip, plugdev, lpadmin, sambashare+    groups: ​aipi2015, adm, cdrom, sudo, dip, plugdev, lpadmin, sambashare
  
 </​code>​ | </​code>​ |
laboratoare/laborator08b.1449797793.txt.gz · Last modified: 2015/12/11 03:36 by Andrei Roșu-Cojocaru
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0