Cum se instalează și se configurează HIVE Metastore cu MYSQL

⚡ Rezumat inteligent

Metastore-ul Hive stochează fiecare definiție de tabel, nume de coloană și tip de date în spatele Apache Hive, iar mutarea acelui depozit din baza de date Derby implicită în MySQL este ceea ce permite conectarea mai multor utilizatori simultan.

  • 🗄️ Ce conține: Metastore-ul păstrează metadatele schemei în tabele relaționale, în timp ce datele tabelului în sine rămân pe HDFS.
  • 🚫 De ce eșuează Derby-ul: Metastore-ul Derby inclus acceptă o sesiune activă, ceea ce îl exclude pentru orice cluster partajat sau de producție.
  • 🔧 Patru proprietăți: ConexiuneURL, ConnectionDriverName, ConnectionUserName și ConnectionPassword în hive-site.xml indică Hive la MySQL.
  • 🔗 Plasarea șoferului: MySQL Conectorul JDBC trebuie să fie legat la directorul Hive lib înainte ca orice încercare de conectare să reușească.
  • 🧱 Schema mai întâi: Utilitarul schematool creează tabelele metastore, iar Hive refuză să pornească pe o schemă neinițializată.
  • 🔎 Verificați în MySQL: Un tabel creat în Hive apare imediat ca un rând în tabelul TBLS al bazei de date metastore.

Cum se instalează și se configurează metastore-ul Hive cu MySQL

Ce este HIVE Metastore?

Metastore-ul Hive este un depozit care stochează metadate (nume de coloane, tipuri de date, comentarii etc.) legate de Apache Hive folosind MySQL or PostgreSQL. Acest metastore Hive este implementat folosind tabele dintr-o bază de date relațională.

Nimic din metastore nu deține rândurile în sine. Înregistrările rămân pe HDFS, iar metastore-ul înregistrează doar unde se află fiecare tabel și cum se numesc coloanele sale, motiv pentru care pierderea acestuia costă schema și nu datele.

De ce să folosiți MySQL în Hive ca Metastore

Backend-ul metastore este o opțiune, nu o parte fixă ​​a Hive, iar configurația implicită este în mod deliberat minimală. Trei limite îndepărtează aproape fiecare instalare de aceasta.

  • În mod implicit, Hive vine cu baza de date Derby ca metastore.
  • Derby poate suporta un singur utilizator activ la un moment dat.
  • Derby nu este recomandat într-un mediu de producție.

Deci soluția aici este

  • Utilizare MySQL ca meta-stocare în backend pentru a conecta mai mulți utilizatori la Hive simultan
  • MySQL este cea mai bună alegere pentru metastore-ul independent

Cum se instalează și se configurează Hive Metastore la MySQL Baza de date

Cei nouă pași de mai jos se execută în ordine pe o mașină pe care sunt deja instalate Hadoop și Hive. Fiecare pas se încheie cu o captură de ecran a ieșirii reale a terminalului sau shell-ului.

Pasul 1) Instalați MySQL server de
În acest pas, vom efectua două sarcini

  1. Instalarea mysql-server
  2. Verificarea mysql-server și a procesului acestuia

Utilizarea sudo apt-get a instala mysql-server comandă, putem descărca MySQL server. Instalare MySQL așa cum se arată în imaginea de mai jos.

Terminal care rulează sudo apt-get install mysql-server pe Ubuntu

După instalarea cu succes, MySQL va rula așa cum se arată în captura de ecran de mai jos, unde verificarea procesului confirmă că serviciul este activ.

Terminal care confirmă rularea procesului mysql-server după instalare

Pasul 2) Instalați MySQL Java Conector
instalarea MySQL Java conector. Acesta este pentru Java dependențe și scopuri de conectare, deoarece Hive ajunge MySQL prin JDBC. Următoarea captură de ecran arată instalarea pachetului.

Terminal care instalează libmysql-java MySQL Java pachet de conectori

Pasul 3) Creați o legătură soft pentru conector
Crearea unei legături soft pentru conectorul din directorul Hive lib. Aceasta este legătura soft dintre Java și MySQLși este ceea ce plasează fișierul JAR al driverului pe calea de clasă Hive. Comanda și rezultatul acesteia apar mai jos.

Terminalul creează o legătură soft pentru MySQL conector JAR în directorul Hive lib

Pasul 4) Configurare MySQL depozitare în Hive
MySQL shell-ul trebuie deschis ca cont root înainte de a putea fi creat orice utilizator Hive, așa cum se arată în continuare.

Deschiderea terminalului MySQL shell cu comanda mysql -u root -p

  • Tastați mysql –u root –p urmat de parolă
  • Aici –u reprezintă numele de utilizator root și –p reprezintă parola
  • După introducerea comenzii de mai sus, utilizatorul trebuie să introducă o parolă validă și apoi să apese Enter.
  • Apoi va intra în MySQL modul shell

Pasul 5) Creați nume de utilizator și parolă
Crearea unui nume de utilizator și a unei parole pentru MySQLși acordarea de privilegii. Captura de ecran de mai jos prezintă cele trei instrucțiuni care rulează în interiorul MySQL coajă.

MySQL shell-ul creează contul hiveuser și acordă privilegii

Trebuie să executăm comenzile așa cum se arată mai jos,

mysql> CREATE USER 'hiveuser'@'%' IDENTIFIED BY 'hivepassword'; 
mysql> GRANT all on *.* to 'hiveuser'@localhost identified by 'hivepassword';
mysql>  flush privileges;

On MySQL 8 forma combinată a celei de-a doua instrucțiuni nu mai este analizată, deoarece IDENTIFIED BY a fost eliminat din GRANT. Creați mai întâi contul, apoi acordați-i dreptul și repetați linia CREATE USER atât pentru gazda localhost, cât și pentru gazda wildcard.

Pasul 6) Configurarea fișierului hive-site.xml

  • După ce Pasul 5 atribuie un nume de utilizator și o parolă MySQL baza de date și acordă privilegii.
  • Aici vom configura câteva proprietăți în Hive pentru a obține o conexiune cu MySQL Bază de date.

Fișierul de configurare este deschis din directorul Hive conf, așa cum se arată în următoarea captură de ecran.

Terminalul deschide fișierul hive-site.xml pentru editare în directorul Hive conf

Captura de ecran care urmează arată fișierul finalizat cu toate cele patru proprietăți configurate.

hive-site.xml care prezintă cele patru proprietăți de conexiune javax.jdo.option

Din captura de ecran de mai sus, observăm următoarele. Aici definim 4 proprietăți necesare pentru a stabili MySQL ca metastore în Hive.

Acestea sunt după cum urmează:

  1. Această proprietate este pentru conexiune URLAici definim ConexiuneaURL în această proprietate. Acționează ca șir de conexiune JDBC și reprezintă locația metastore-ului.
  2. Această proprietate este pentru numele driverului de conexiune. Aici, com.mysql.jdbc.Driver este valoarea pe care trebuie să o menționăm în eticheta de valoare.
  3. Această proprietate este utilizată pentru definirea numelui de utilizator al conexiunii. În acest caz, am definit „hiveuser” ca nume de utilizator.
  4. Această proprietate este utilizată pentru menționarea parolei de conectare. În acest caz, am definit „hivepassword” ca parolă de utilizator.

Odată ce proprietățile sunt plasate în hive-site.xml, trebuie să salvăm manual (Ctrl+S) și să închidem fișierul. După închiderea acestui fișier, trebuie să creăm un tabel Hive și să verificăm detaliile tabelului în MySQL depozitare.

Plasați acest cod în hive-site.xml

hive-site.xml

<configuration>
	<property>
		<name>javax.jdo.option.ConnectionURL</name>
		<value>jdbc:mysql://localhost/metastore?createDatabaseIfNotExist=true</value>
		<description>metadata is stored in a MySQL server</description>
	</property>
	<property>
		<name>javax.jdo.option.ConnectionDriverName</name>
		<value>com.mysql.jdbc.Driver</value>
		<description>MySQL JDBC driver class</description>
	</property>
	<property>
		<name>javax.jdo.option.ConnectionUserName</name>
		<value>hiveuser</value>
		<description>user name for connecting to mysql server</description>
	</property>
	<property>
		<name>javax.jdo.option.ConnectionPassword</name>
		<value>hivepassword</value>
		<description>password for connecting to mysql server</description>
	</property>
</configuration>

Cele două valori de mai sus depind de versiunea conectorului utilizată. MySQL Connector/J 8 a redenumit clasa driverului în com.mysql.cj.jdbc.Driver și așteaptă, de asemenea, un port explicit și o setare SSL, deci o versiune modernă URL de obicei citește jdbc:mysql://localhost:3306/metastore?createDatabaseIfNotExist=true&useSSL=false. Deoarece parola se află în text clar, fișierul ar trebui să poată fi citit doar de contul de serviciu Hive.

Pasul 7) Creați un tabel
Creați tabelul „guru99” în Hive, așa cum se arată în shell-ul Hive de mai jos.

Shell-ul Hive creează tabelul guru99 cu un număr întreg și o coloană de șir de caractere

Din captura de ecran de mai sus, putem observa următoarele

  • Crearea unui tabel numit „guru99” cu două nume de coloană
  • Numele coloanelor sunt menționate cu tipurile lor de date, unul un număr întreg și celălalt un șir de caractere

În pasul următor, vom verifica dacă este stocat în MySQL sau nu.

Pasul 8) Intrați în MySQL modul shell
Baza de date metastore este selectată mai întâi, iar tabelul care urmează este afișat mai jos.

MySQL shell-ul care rulează folosește metastore și show tables pentru a lista tabelele metastore

Din captura de ecran de mai sus, putem observa următoarele

  • Mai întâi trebuie să selectăm baza de date cu „use metastore”
  • Odată ce metastore-ul este ales, putem verifica tabelele prezente în acesta folosind comanda „show tables”, așa cum se arată în captura de ecran.
  • Indiferent de tabelele create în Hive, metadatele corespunzătoare acelor tabele sunt stocate în TBLS, în MySQL Baza de date
  • Tabelul „guru99” este creat în Hive, astfel încât metadatele corespunzătoare sunt stocate în MySQL sub TBLS

Pasul 9) Introduceți select * din TBLS
Verificarea prezenței tabelului creat în MySQL sau nu. Interogarea și rezultatul acesteia apar în captura de ecran de mai jos.

MySQL shell care rulează select * din TBLS și afișează rândul din tabelul guru99

Introducând select * din TBLS, va afișa tabelele pe care le-am creat în modul shell Hive

Din captura de ecran de mai sus putem observa următoarele lucruri:

  • Numele tabelului „guru99” care a fost creat în Hive poate fi afișat în MySQL modul shell
  • Pe lângă acestea, va oferi și informații precum ora creării tabelului, ora accesării și alte proprietăți, așa cum se arată în captura de ecran de mai sus.

Cum se inițializează schema Hive Metastore cu schematool

Indicatorul createDatabaseIfNotExist din conexiune URL creează o bază de date metastore goală, dar nu creează cele aproximativ șaptezeci de tabele pe care Hive le așteaptă în interiorul acesteia. Pe Hive 1.x și versiunile ulterioare, acel job aparține utilitarului schematool și se trece pesteping Este cel mai frecvent motiv pentru care un metastore proaspăt configurat refuză să pornească.

$HIVE_HOME/bin/schematool -dbType mysql -initSchema

Comanda citește aceleași patru proprietăți din hive-site.xml, se conectează cu contul hiveuser și execută scriptul SQL inclus care corespunde versiunii Hive. O execuție reușită se încheie cu un mesaj de finalizare, după care starea poate fi confirmată în orice moment.

$HIVE_HOME/bin/schematool -dbType mysql -info

Steagurile de mai jos acoperă întreaga durată de viață a unei scheme metastore.

Opțiune Ce face
-dbType Denumește backend-ul, cum ar fi mysql, derby, postgres, oracle sau mssql
-initSchema Creează tabelele metastore pentru versiunea curentă a Hive
-info Raportează versiunea schemei înregistrată în baza de date
-upgradeSchema Migrează o schemă existentă după o actualizare Hive
-valida Verifică schema pentru tabele lipsă și nepotriviri de versiune

O proprietate conexă merită cunoscută înainte de prima pornire. Când hive.metastore.schema.verification este true, Hive compară versiunea schemei din MySQL împotriva propriilor sale și refuză să ruleze în cazul unei nepotriviri. Această verificare este o măsură de siguranță, așadar răspunsul corect este rularea actualizării, mai degrabă decât oprirea acesteia. Același lucru MySQL backend-ul este utilizat de instalarea Hive descrisă în instalați Hive pe Ubuntu.

Erori comune ale Hive Metastore și cum să le remediați

Majoritatea eșecurilor în această etapă produc unul dintre puținele mesaje, iar fiecare indică o etapă specifică de mai sus, mai degrabă decât Hive-ul în sine.

Simptom Cauză și remediere
Informațiile despre versiune nu au fost găsite în metastore Schema nu a fost niciodată creată. Rulați schematool cu ​​-initSchema pentru aceeași bază de date numită în conexiune. URL
Excepție ClassNotFound pentru driverul JDBC Fișierul JAR al conectorului lipsește din directorul Hive lib sau Connector/J 8 este în uz, iar clasa este acum com.mysql.cj.jdbc.Driver. Verificați din nou linkul soft de la Pasul 3.
Acces refuzat pentru utilizatorul hiveuser Privilegiile au fost acordate unei singure gazde. Creați contul atât pentru localhost, cât și pentru gazda wildcard, apoi executați eliminarea privilegiilor.
Eroare de sintaxă în apropierea IDENTIFICAT DE MySQL 8 a eliminat IDENTIFIED BY din instrucțiunea GRANT. Emiteți mai întâi CREATE USER și GRANT după aceea.
Recuperarea cheii publice nu este permisă Conectorul/J 8 refuză în mod implicit o strângere de mână necriptată. Adăugați useSSL=false și allowPublicKeyRetrieval=true la JDBC. URL într-o rețea de încredere
Tabelele lipsesc după o actualizare Hive Schema încă corespunde cu versiunea veche. Rulați schematool cu ​​-upgradeSchema în loc să dezactivați verificarea schemei.

Odată ce metastore-ul răspunde în mod fiabil, definițiile tabelului pe care le înregistrează sunt create cu instrucțiunile descrise în Crearea, modificarea și eliminarea tabelelor în Hive.

Întrebări frecvente

Nave stup care sprijină Derby, MySQL, PostgreSQL, Oracle și Microsoft SQL Server, iar schematool le acceptă pe fiecare dintre ele prin intermediul indicatorului -dbType. Derby rămâne implicit și limitat la o singură sesiune.

Embedded rulează Derby în interiorul procesului Hive. Local rulează codul metastore în interiorul Hive, dar pe o bază de date externă, cum ar fi MySQLRemote rulează metastore-ul ca propriul serviciu Thrift, pe care îl partajează mai mulți clienți.

Baze de date cu înregistrări DBS, tabele cu înregistrări TBLS, definiții de coloane cu înregistrări COLUMNS_V2, descriptori de stocare a înregistrărilor SDS și intrări de partiție cu înregistrări PARTITIONS. Aceste nume sunt interne, așadar trebuie interogate pentru inspecție, în loc să le editați manual.

Stocați-l într-un keystore al furnizorului de acreditări Hadoop și indicați hive.metastore.credential.provider.path către fișierul respectiv, apoi eliminați valoarea simplă. Restricționarea permisiunilor de fișier pe hive-site.xml este soluția minimă.

Fișierele de pe HDFS supraviețuiesc, dar fiecare definiție de tabel, partiție și coloană dispare și Hive nu le mai poate citi. Regular MySQL Prin urmare, dump-urile bazei de date metastore fac parte din backup-ul normal al clusterului.

Serviciul Thrift metastore ascultă implicit pe portul 9083, setat prin hive.metastore.port. Clienții îl accesează cu hive.metastore.uris, nu cu acreditări JDBC directe, ceea ce împiedică accesul la parola bazei de date de pe mașinile client.

Da. Detectarea anomaliilor prin jurnalele de interogări metastore semnalează vârfuri bruște de apeluri, listări lente ale partițiilor și creșterea necontrolată a tabelelor înainte de expirarea joburilor. Modelul evidențiază candidații, iar un administrator confirmă în continuare cauza.

Copilot schițează blocul de proprietăți javax.jdo.option dintr-un comentariu scurt, iar asistenții agenți pot scrie scripturi pentru întreaga configurare. Verificați clasa driverului și portul, deoarece datele de antrenament favorizează în continuare numele mai vechi al conectorului.

Rezumați această postare cu: