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: Un instrument ETL și de depozitare a datelor care adaugă tabele, rânduri și coloane peste fișierele stocate în HDFS.
  • 🗂️ Metastore: Informațiile schemei se află într-un metastore relațional, susținut de Derby pentru un utilizator și de MySQL pentru acces partajat.
  • 🆚 Împotriva unui RDBMS: Hive validează schema la citire, scalează pe orizontală și favorizează scanările mari în detrimentul actualizărilor la nivel de rând pe care le gestionează o bază de date.
  • 🏗️ Trei straturi: Clienții, serviciile și spațiul de stocare formează arhitectura, driverul coordonând compilatorul, metastore-ul și motorul de execuție.
  • 🔀 Două moduri: Modul local se potrivește unui singur nod de date și fișierelor mici, în timp ce modul MapReduce distribuie execuția pe un cluster cu mai multe noduri.
  • 🔌 HiveServer2: Interfața HS2 bazată pe Thrift adaugă concurență și autentificare multi-client pentru sesiunile la distanță.

Arhitectura și modurile Hive

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.

Diagrama arhitecturii Apache Hive care prezintă clienți, servicii, stocare și calcul

Stupul este alcătuit în principal din 3 părți principale:

  1. Clienți Hive
  2. Servicii de stup
  3. 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.

Diagrama fluxului de execuție a joburilor Hive tractrimiterea unei interogări din interfața utilizator către DataNodes

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.

  1. Executarea unei interogări din interfața utilizator (UI)
  2. 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.)
  3. Compilatorul creează planul pentru executarea jobului. Compilatorul comunică cu metastore-ul pentru a obține cererea de metadate.
  4. Metastore-ul trimite informații despre metadate înapoi compilatorului
  5. Compilatorul comunică cu driverul cu planul propus pentru executarea interogării.
  6. Șoferul trimite planuri de execuție către motorul de execuție
  7. 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
  1. Preluarea rezultatelor de la driver
  2. 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.

Întrebări frecvente

Hive este un strat de interogare batch care scanează tabele mari prin joburi distribuite. HBase este un depozit NoSQL construit pentru citiri și scrieri aleatorii de milisecunde pe rânduri individuale. Acestea rezolvă modele de acces opuse și adesea rulează alăturate.

Hive rulează pe MapReduce, Apache Tez sau Apache SparkMapReduce este depreciat, iar Hive 4.x folosește implicit Tez, care păstrează rezultatele intermediare în memorie în loc să le scrie pe disc între etape.

Un tabel gestionat oferă companiei Hive dreptul de proprietate asupra metadatelor și fișierelor, așadar eliminațiping șterge datele din directorul depozitului. Un tabel extern stochează doar metadate și eliminăping lasă fișierele subiacente neatinse.

Modelele de costuri învățate transmit statisticile de execuție înapoi în planificator pentru a prezice volumul de scanare, ordinea de joncțiune și eliminarea partițiilor mai precis decât estimările statice. Platformele cloud transmit aceleași semnale ca și recomandările de compactare și aspect al partițiilor.

Copilot schițează join-uri HiveQL, funcții de fereastră și Java Schelete UDF dintr-un comentariu, ceea ce scurtează lucrul standard. Numele coloanelor, cheile de partiție și tipurile de date trebuie verificate mai întâi cu metastore-ul real.

Da. Hive 0.14 a adăugat UPDATE și DELETE, iar versiunile ulterioare au oferit suport complet ACID pentru tabelele tranzacționale. Hive 4.x extinde acest lucru prin tabelele Apache Iceberg cu izolare de instantanee și evoluție a schemei.

Toate trei expun SQL peste aceleași fișiere. Hive favorizează joburile lungi în batch și deține metastore-ul pe care celelalte îl citesc. Spark SQL se potrivește cu conducte mixte; Trino vizează interogările interactive din mai multe surse.

Da, în mare parte prin intermediul Hive Metastore, care rămâne standardul din catalog. Spark, Trino, Presto și Flink citesc toate. Hive în sine încă deservește transformări programate în loturi și încărcări în depozit.

Rezumați această postare cu: