Ce este Hive? Architectură și moduri
⚡ Rezumat inteligent
Hive este stratul SQL al ecosistemului Hadoop, transformând instrucțiunile HiveQL în joburi distribuite care citesc date structurate deja existente pe HDFS, astfel încât analiștii interoghează tabele de petabytes fără a scrie ei înșiși cod MapReduce.

Ce este Hive?
Hive este un instrument ETL și de depozitare a datelor dezvoltat pe baza sistemului de fișiere distribuit Hadoop (HDFS). Hive facilitează efectuarea de operațiuni precum
- Încapsularea datelor
- Interogări ad-hoc
- Analiza seturi de date uriașe
Caracteristici importante ale Stupului
Punctele de mai jos explică ce diferențiază Hive de un program MapReduce simplu.
- În Hive, tabelele și bazele de date sunt create mai întâi și apoi datele sunt încărcate în aceste tabele.
- Hive este un depozit de date conceput pentru gestionarea și interogarea doar a datelor structurate stocate în tabele.
- Deși gestionează date structurate, MapReduce nu are funcții de optimizare și utilizabilitate precum UDF-urile, însă framework-ul Hive are. Optimizarea interogărilor se referă la o modalitate eficientă de execuție a interogărilor din punct de vedere al performanței.
- Limbajul inspirat de SQL al Hive separă utilizatorul de complexitatea programării MapReduce. Reutilizează concepte familiare din lumea bazelor de date relaționale, cum ar fi tabele, rânduri, coloane și scheme, pentru o învățare mai ușoară.
- Programarea Hadoop funcționează pe fișiere plate. Așadar, Hive poate folosi structuri de directoare pentru a „partiție” date pentru a îmbunătăți performanța anumitor interogări.
- O componentă importantă a Hive este metastore-ul, utilizat pentru stocarea informațiilor despre schemă. Acest metastore se află de obicei într-o bază de date relațională. Putem interacționa cu Hive folosind metode precum
- GUI Web
- Java Interfață de conectare la baze de date (JDBC).
- Majoritatea interacțiunilor tind să aibă loc printr-o interfață de linie de comandă (CLI). Hive oferă o interfață CLI pentru a scrie interogări Hive folosind limbajul de interogare Hive (HQL).
- În general, sintaxa HQL este similară cu SQL sintaxă cu care majoritatea analiștilor de date sunt familiarizați. Exemplul de interogare de mai jos afișează toate înregistrările prezente în numele tabelului menționat.
- Exemplu de interogare : Alege din
- Hive acceptă patru formate de fișiere, acestea fiind TEXTFILE, SEQUENCEFILE, ORC și RCFILE (Înregistrare Fișier Columnar).
- Pentru stocarea metadatelor pentru un singur utilizator, Hive folosește baza de date Derby, iar pentru metadatele pentru mai mulți utilizatori sau partajate, Hive folosește MySQL.
Pentru configurare MySQL ca baza de date și pentru a stoca informații despre metadate, consultați tutorialul despre configurarea metastore-ului Hive cu MySQL, care vine în continuarea Ghid de instalare a stupului.
Câteva dintre punctele cheie despre Hive:
- Principala diferență dintre HQL și SQL este că o interogare Hive se execută pe infrastructura Hadoop, mai degrabă decât pe o bază de date tradițională.
- Execuția interogărilor Hive este o serie de interogări generate automat MapReduce locuri de munca.
- Hive acceptă conceptele de partiție și bucket pentru recuperarea ușoară a datelor atunci când clientul execută interogarea.
- Hive acceptă personalizarea UDF-uri (funcții definite de utilizator) pentru curățarea datelor, filtrare și lucrări similare. În funcție de cerințele programatorilor, se pot defini UDF-uri Hive.
Hive vs baze de date relaționale
Hive îndeplinește funcții pe care bazele de date relaționale nu le pot îndeplini. Când datele se execută în petabytes, returnarea rezultatelor în secunde este importantă, iar Hive face acest lucru eficient. Diferențele cheie sunt următoarele.
Bazele de date relaționale sunt de „schemă la citire și schemă la scriere”Mai întâi se creează un tabel, apoi datele sunt inserate în acel tabel. În tabelele bazelor de date relaționale, se pot efectua funcții precum inserări, actualizări și modificări.
Stupul este „schemă doar în citire”Așadar, funcții precum actualizarea și modificarea nu funcționau în versiunile timpurii, deoarece o interogare Hive dintr-un cluster tipic rulează pe mai multe DataNode-uri, ceea ce făcea imposibilă actualizarea și modificarea datelor pe mai multe noduri (versiunile Hive anterioare versiunii 0.13).
Hive susține, de asemenea, „Citește mult, scrie o dată” model, astfel încât în versiunile recente un tabel poate fi actualizat după inserare.
NOTĂ: Versiunile mai noi de Hive vin cu funcții actualizate. Hive 0.14 a introdus UPDATE și DELETE ca funcții noi, iar versiunile ulterioare au adăugat suport complet pentru tranzacții ACID.
Tabelul de mai jos condensează comparația.
| Aspect | Baza de date relațională | Apache Hive |
|---|---|---|
| Validarea schemei | La scriere | La citire |
| Volum tipic de date | Gigaocteți în teraocteți | Terabytes la petabytes |
| Volumul de muncă | Citiri și scrieri OLTP la nivel de rând | Analiză completă a lotului de scanare |
| Limbajul de interogare | SQL | HQL, un dialect inspirat de SQL |
| Execuție | Motor de baze de date | Lucrări de cluster distribuite |
Stup Architectură
Diagrama de mai jos explică Apache Arhitectura stupului în detaliu.
Stupul este alcătuit în principal din 3 părți principale:
- Clienți Hive
- Servicii de stup
- Stocare și calcul Hive
Clienții Hive
Hive oferă drivere diferite pentru comunicarea cu diferite tipuri de aplicații. Pentru aplicațiile bazate pe Thrift, oferă un client Thrift pentru comunicare.
Pentru Java Pentru aplicațiile conexe, furnizează drivere JDBC. Pentru orice alt tip de aplicație, furnizează drivere ODBC. Acești clienți și drivere comunică, la rândul lor, cu serverul Hive în cadrul serviciilor Hive.
Servicii de stup
Interacțiunile clienților cu Hive se realizează prin intermediul serviciilor Hive. Dacă clientul dorește să efectueze orice operațiune legată de interogare în Hive, trebuie să comunice prin intermediul serviciilor Hive.
Interfața CLI acționează ca serviciu Hive pentru operațiunile DDL. Toate driverele comunică cu serverul Hive și cu driverul principal din serviciile Hive, așa cum se arată în diagrama arhitecturii de mai sus.
Driverul din serviciile Hive este driverul principal: acesta comunică cu JDBC, ODBC și alte aplicații specifice clientului, apoi transmite cererile acestora către metastore și sistemul de fișiere pentru procesare ulterioară.
Stocare și calcul Hive
Serviciile Hive, cum ar fi metastore-ul, sistemul de fișiere și clientul de joburi, comunică la rândul lor cu spațiul de stocare Hive și efectuează următoarele acțiuni:
- Informațiile despre metadatele tabelelor create în Hive sunt stocate în Hive baza de date metastore.
- Rezultatele interogărilor și datele încărcate în tabele sunt stocate în clusterul Hadoop pe HDFS.
Fluxul de execuție a lucrărilor
Diagrama de mai jos tractransmite o interogare de la interfața cu utilizatorul către DataNodes și înapoi.
Din diagrama de mai sus putem înțelege fluxul de execuție a joburilor în Hive cu Hadoop. Fluxul de date în Hive se comportă în următorul model.
- Executarea unei interogări din interfața utilizator (UI)
- Driverul interacționează cu compilatorul pentru a obține planul. (Aici, planul se referă la procesul de execuție a interogării și la colectarea informațiilor despre metadate aferente.)
- Compilatorul creează planul pentru executarea jobului. Compilatorul comunică cu metastore-ul pentru a obține cererea de metadate.
- Metastore-ul trimite informații despre metadate înapoi compilatorului
- Compilatorul comunică cu driverul cu planul propus pentru executarea interogării.
- Șoferul trimite planuri de execuție către motorul de execuție
- Motorul de execuție (EE) acționează ca o punte între Hive și Hadoop pentru a procesa interogarea, inclusiv operațiunile DFS:
- EE contactează mai întâi NameNode și apoi DataNode-urile pentru a obține valorile stocate în tabele.
- EE preia înregistrările dorite din DataNodes. Datele tabelare propriu-zise se află doar pe nodurile de date; din NameNode preia doar metadatele pentru interogare.
- Colectează date reale de la nodurile de date legate de interogarea menționată
- EE comunică bidirecțional cu metastore-ul pentru a efectua operațiuni DDL (limbaj de definire a datelor), cum ar fi CREAȚI, ELIMINAȚI și MODIFICAȚI pe tabele și baze de date. Metastore-ul stochează doar numele bazelor de date, tabelelor și coloanelor.
- La rândul său, EE comunică cu daemonii Hadoop, cum ar fi NameNode, DataNodes și job tracker pentru a executa interogarea pe sistemul de fișiere Hadoop
- Preluarea rezultatelor de la driver
- Trimiterea rezultatelor către motorul de execuție. Odată ce rezultatele sunt preluate de la nodurile de date către EE, acesta trimite rezultatele înapoi către driver și către UI (frontend).
Hive rămâne în contact cu sistemul de fișiere Hadoop și daemonii săi prin intermediul motorului de execuție. Săgeata punctată din diagramă arată această comunicare.
Diferite moduri de Hive
Hive poate funcționa în două moduri, în funcție de dimensiunea nodurilor de date din Hadoop. Aceste moduri sunt:
- Mod local
- Modul MapReduce
Când se utilizează modul local
- Dacă Hadoop este instalat în mod pseudo-distribuit cu un singur nod de date, folosim Hive în acest mod.
- Dacă dimensiunea datelor este suficient de mică pentru a fi limitată la o singură mașină locală, putem folosi acest mod
- Procesarea va fi foarte rapidă pe seturi de date mai mici prezente în mașina locală
Când se utilizează modul MapReduce
- Dacă Hadoop are mai multe noduri de date și datele sunt distribuite pe diferite noduri, folosim Hive în acest mod.
- Lucrează pe cantități mari de date, iar interogarea se execută în paralel
- Procesarea seturilor mari de date cu performanțe mai bune poate fi realizată prin acest mod
În Hive putem seta o proprietate care să indice în ce mod ar trebui să funcționeze Hive. În mod implicit, funcționează în modul MapReduce, iar pentru modul local puteți utiliza următoarea setare:
SET mapred.job.tracker=local;
Începând cu versiunea 0.7 de Hive, este compatibil un mod care execută automat joburi MapReduce în modul local. Pe Hive 4.x, motorul implicit este Apache Tez, deci această proprietate se aplică căii MapReduce vechi.
Ce este Hive Server2 (HS2)?
HiveServer2 (HS2) este o interfață de server care îndeplinește următoarele funcții:
- Permite clienților la distanță să execute interogări împotriva Hive
- Preia rezultatele acelor interogări
Versiunile actuale adaugă funcții avansate bazate pe Thrift RPC, cum ar fi:
- Concurență multi-client
- Autentificare
HS2 se află în spatele Beeline și al fiecărei sesiuni JDBC sau ODBC, motiv pentru care a înlocuit interfața CLI Hive pentru un singur utilizator. Operatori HiveQL și funcții încorporate Referința este următorul pas firesc.


