Tutorial Apache Sqoop - Import / Export date între HDFS și RDBMS



Tutorial Apache Sqoop: Sqoop este un instrument pentru transferul de date între Hadoop și bazele de date relaționale. Acest blog acoperă importul și exportul Sooop din MySQL.

Înainte de a începe cu acest tutorial Apache Sqoop, să facem un pas înapoi. Vă puteți aminti importanța ingestiei de date, așa cum am discutat în blogul nostru anterior Apache Flume . Acum, după cum știm că Apache Flume este un instrument de ingestie de date pentru surse nestructurate, dar organizațiile își stochează datele operaționale în baze de date relaționale. Deci, a fost nevoie de un instrument care să poată importa și exporta date din baze de date relaționale. Acesta este motivul pentru care s-a născut Apache Sqoop. Sqoop se poate integra cu ușurință cu Hadoop și poate arunca date structurate din baze de date relaționale pe HDFS, completând puterea Hadoop. De-aceea, impune o bună cunoaștere a Apache Sqoop și Flume.

Inițial, Sqoop a fost dezvoltat și întreținut de Cloudera. Ulterior, pe 23 iulie 2011, a fost incubat de Apache. În aprilie 2012, proiectul Sqoop a fost promovat ca proiect de nivel superior al lui Apache.





În acest blog tutorial Apache Flume, vom acoperi:



Vom începe acest tutorial Apache Sqoop prin introducerea Apache Sqoop. Apoi, mergând mai departe, vom înțelege avantajele utilizării Apache Sqoop.

Tutorial Apache Sqoop: Introducere Sqoop

Apache Sqoop - Tutorial Apache Sqoop - EdurekaÎn general, aplicațiile interacționează cu baza de date relațională utilizând RDBMS și, prin urmare, acest lucru face din bazele de date relaționale una dintre cele mai importante surse care generează Big Data. Astfel de date sunt stocate în serverele RDB în structura relațională. Aici, Apache Sqoop joacă un rol important în , oferind interacțiuni fezabile între serverul de baze de date relaționale și HDFS.

Deci, Apache Sqoop este un instrument în care este conceput pentru a transfera date între HDFS (Stocare Hadoop) și servere de baze de date relaționale precum MySQL, Oracle RDB, SQLite, Teradata, Netezza, Postgres etc. Apache Sqoop importă date din baze de date relaționale în HDFS și exportă date din HDFS în baze de date relaționale. Transferă în mod eficient date în bloc între Hadoop și magazine de date externe precum depozite de date pentru întreprinderi, baze de date relaționale etc.



Așa și-a luat numele Sqoop - „ SQ L to Had deschis & Hadoop la SQL ”.

În plus, Sqoop este utilizat pentru a importa date din stocuri de date externe în instrumentele ecosistemului Hadoop, cum ar fi Stup & HBase .

Acum, după cum știm ce este Apache Sqoop. Deci, haideți să avansăm în tutorialul nostru Apache Sqoop și să înțelegem de ce Sqoop este utilizat pe scară largă de către organizații.

Tutorial Apache Sqoop: De ce Sqoop?

Pentru dezvoltatorul Hadoop, jocul propriu-zis începe după ce datele sunt încărcate în HDFS. Se joacă în jurul acestor date pentru a obține diverse informații ascunse în datele stocate în HDFS.

Deci, pentru această analiză, datele care se află în sistemele de gestionare a bazelor de date relaționale trebuie transferate în HDFS. Sarcina scrisului codul pentru importul și exportul de date din baza de date relațională către HDFS este neinteresant și plictisitor. Aici Apache Sqoop vine să salveze și le îndepărtează durerea. Automatizează procesul de import și export al datelor.

Sqoop ușurează viața dezvoltatorilor, oferind CLI pentru importul și exportul de date. Trebuie doar să furnizeze informații de bază, cum ar fi autentificarea bazei de date, sursa, destinația, operațiunile etc. Se ocupă de partea rămasă.

Sqoop convertește intern comanda în sarcini MapReduce, care sunt apoi executate prin HDFS. Folosește cadrul YARN pentru a importa și exporta datele, ceea ce oferă toleranță la erori pe lângă paralelism.

Înaintând în acest blog Tutorial Sqoop, vom înțelege caracteristicile cheie ale Sqoop și apoi vom trece la arhitectura Apache Sqoop.

Tutorial Apache Sqoop: Caracteristici cheie ale Sqoop

Sqoop oferă multe caracteristici importante, cum ar fi:

  1. Încărcare completă : Apache Sqoop poate încărca întregul tabel printr-o singură comandă. De asemenea, puteți încărca toate tabelele dintr-o bază de date folosind o singură comandă.
  2. Incremental Sarcină : Apache Sqoop oferă, de asemenea, facilitatea de încărcare incrementală în care puteți încărca părți ale tabelului ori de câte ori este actualizat.
  3. Paralel import Export : Sqoop folosește cadrul YARN pentru a importa și exporta datele, ceea ce oferă toleranță la erori pe lângă paralelism.
  4. Import rezultate de SQL interogare : De asemenea, puteți importa rezultatul returnat dintr-o interogare SQL în HDFS.
  5. Comprimare : Vă puteți comprima datele utilizând algoritmul deflate (gzip) cu argumentul -compress sau prin specificarea argumentului –compression-codec. De asemenea, puteți încărca tabelul comprimat în Apache Hive .
  6. Conectori pentru toate major RDBMS Baze de date : Apache Sqoop oferă conectori pentru mai multe baze de date RDBMS, acoperind aproape întreaga circumferință.
  7. Kerberos Securitate Integrare : Kerberos este un protocol de autentificare a rețelei de calculatoare care funcționează pe baza „biletelor” pentru a permite nodurilor care comunică printr-o rețea nesecurizată să-și dovedească identitatea reciproc într-un mod sigur. Sqoop acceptă autentificarea Kerberos.
  8. Sarcină date direct în HIVE / HBase : Puteți încărca date direct în Apache Hive pentru analiză și, de asemenea, aruncați datele dvs. în HBase, care este o bază de date NoSQL.
  9. A sustine pentru Acumulare : De asemenea, puteți instrui Sqoop să importe tabelul în Accumulo mai degrabă decât un director în HDFS.

Arhitectura este una care împuternicește Apache Sqoop cu aceste beneficii. Acum, așa cum știm caracteristicile Apache Sqoop, să mergem mai departe și să înțelegem arhitectura și funcționarea Apache Sqoop.

Tutorial Apache Sqoop: Sqoop Architecture & Working

Să înțelegem cum funcționează Apache Sqoop folosind diagrama de mai jos:

șirul java a împărțit mai mulți delimitatori

Instrumentul de import importă tabele individuale din RDBMS în HDFS. Fiecare rând dintr-un tabel este tratat ca o înregistrare în HDFS.

Când trimitem comanda Sqoop, sarcina noastră principală este împărțită în subtaskuri, care sunt gestionate de sarcina de hartă individuală intern. Sarcina hartă este subtask-ul, care importă o parte din date în ecosistemul Hadoop. În mod colectiv, toate sarcinile Hărții importă toate datele.

Exportul funcționează, de asemenea, într-un mod similar.

Instrumentul de export exportă un set de fișiere din HDFS înapoi într-un RDBMS. Fișierele date ca intrare în Sqoop conțin înregistrări, care sunt numite ca rânduri în tabel.

Când trimitem jobul nostru, acesta este mapat în Map Tasks, ceea ce aduce o parte din date din HDFS. Aceste bucăți sunt exportate către o destinație de date structurate. Combinând toate aceste bucăți de date exportate, primim toate datele la destinație, care în majoritatea cazurilor este un RDBMS (MYSQL / Oracle / SQL Server).

Faza de reducere este necesară în cazul agregărilor. Dar, Apache Sqoop doar importă și exportă datele, nu realizează agregări. Lucrarea pe hărți lansează mai multe mapere în funcție de numărul definit de utilizator. Pentru importul Sqoop, fiecărei sarcini de mapare i se va atribui o parte din date care urmează să fie importată. Sqoop distribuie datele de intrare între mape în mod egal pentru a obține performanțe ridicate. Apoi, fiecare mapator creează o conexiune cu baza de date utilizând JDBC și preia partea de date alocată de Sqoop și o scrie în HDFS sau Hive sau HBase pe baza argumentelor furnizate în CLI.

Acum că înțelegem arhitectura și funcționarea Apache Sqoop, să înțelegem diferența dintre Apache Flume și Apache Sqoop.

Tutorial Apache Sqoop: Flume vs Sqoop

Diferența majoră între Flume și Sqoop este că:

  • Flume ingerează doar date nestructurate sau semi-structurate în HDFS.
  • În timp ce Sqoop poate importa și exporta date structurate din RDBMS sau antrepozite de date Enterprise în HDFS sau invers.

Acum, avansând în tutorialul nostru Apache Sqoop, este momentul să parcurgeți comenzile Apache Sqoop.

Tutorial Apache Sqoop: Comenzi Sqoop

  • Sqoop - Comanda IMPORT

Comanda Import este folosită pentru a importa un tabel din baze de date relaționale în HDFS. În cazul nostru, vom importa tabele din bazele de date MySQL în HDFS.

După cum puteți vedea în imaginea de mai jos, avem tabelul angajaților în baza de date a angajaților pe care o vom importa în HDFS.

cum se creează o alertă în javascript

Comanda pentru importarea tabelului este:

import sqoop --conectați jdbc: mysql: // localhost / angajați - nume de utilizator edureka - angajați tabel

După cum puteți vedea în imaginea de mai jos, după executarea acestei comenzi, sarcinile de hartă vor fi executate în partea din spate.

După executarea codului, puteți verifica interfața web a HDFS, adică localhost: 50070 unde sunt importate datele.

  • Sqoop - Comandă IMPORT cu director țintă

De asemenea, puteți importa tabelul într-un director specific din HDFS folosind comanda de mai jos:

import sqoop --conectați jdbc: mysql: // localhost / angajați - nume de utilizator edureka - tabela angajați --m 1 - țintă-dir / angajați

Sqoop importă date în paralel din majoritatea surselor bazei de date. -m proprietatea este utilizată pentru a specifica numărul de mapere de executat.

Sqoop importă date în paralel din majoritatea surselor bazei de date. Puteți specifica numărul de sarcini ale hărții (procese paralele) de utilizat pentru a efectua importul utilizând -m sau –Num-mappers argument. Fiecare dintre aceste argumente ia o valoare întreagă care corespunde gradului de paralelism de utilizat.

Puteți controla numărul de mapere independent de numărul de fișiere prezente în director. Performanța exportului depinde de gradul de paralelism. În mod implicit, Sqoop va utiliza patru sarcini în paralel pentru procesul de export. Acest lucru poate să nu fie optim, va trebui să experimentați cu propria dvs. configurare specială. Sarcinile suplimentare pot oferi concurență mai bună, dar dacă baza de date este deja blocată la actualizarea indicilor, invocarea declanșatorilor și așa mai departe, atunci sarcina suplimentară poate reduce performanța.

Puteți vedea în imaginea de mai jos, că numărul sarcinii de mapare este 1.

Numărul de fișiere care sunt create în timpul importului tabelelor MySQL este egal cu numărul de mapere create.

  • Sqoop - Comanda IMPORT cu clauza Where

Puteți importa un subset al unui tabel utilizând clauza „unde” din instrumentul de import Sqoop. Execută interogarea SQL corespunzătoare în respectivul server de baze de date și stochează rezultatul într-un director țintă în HDFS. Puteți utiliza următoarea comandă pentru a importa date cu „ Unde „Clauză:

import sqoop --conectați jdbc: mysql: // localhost / angajați - nume de utilizator edureka - angajați de tabel --m 3 --unde 'emp_no & gt 49000' --target-dir / Latest_Employees

  • Sqoop - Import incremental

Sqoop oferă un mod de import incremental care poate fi utilizat pentru a prelua numai rânduri mai noi decât unele seturi de rânduri importate anterior. Sqoop acceptă două tipuri de importuri incrementale: adăuga și modificat ultima dată . Puteți utiliza argumentul –incremental pentru a specifica tipul de import incremental de efectuat.

Ar trebui să specificați adăuga modul la importul unui tabel în care se adaugă continuu rânduri noi cu valori crescute ale idului rândului. Specificați coloana care conține ID-ul rândului cu –Check-column . Sqoop importă rânduri în care coloana de verificare are o valoare mai mare decât cea specificată cu –Ultima valoare .

O strategie alternativă de actualizare a tabelelor acceptată de Sqoop este numită modificat ultima dată modul. Ar trebui să utilizați acest lucru atunci când rândurile din tabelul sursă pot fi actualizate și fiecare astfel de actualizare va seta valoarea unei coloane modificate ultima dată la marcajul de timp curent.

Când rulați un import ulterior, trebuie să specificați –Ultima valoare în acest fel pentru a vă asigura că importați numai datele noi sau actualizate. Acest lucru este gestionat automat prin crearea unui import incremental ca o lucrare salvată, care este mecanismul preferat pentru efectuarea unui import incremental recurent.

Mai întâi, introducem un nou rând care va fi actualizat în HDFS-ul nostru.

Comanda pentru importul incremental este:

import sqoop --conectați jdbc: mysql: // localhost / angajați - nume de utilizator edureka - angajați tabel - direcție-țintă / Ultimii_employați - anexă incrementală --check-column emp_no - ultima valoare 499999

Puteți vedea în imaginea de mai jos, un nou fișier este creat cu datele actualizate.

aplicații de analiză big data
  • Sqoop - Importați toate tabelele

Puteți importa toate tabelele de pe serverul de baze de date RDBMS în HDFS. Fiecare dată a tabelului este stocată într-un director separat, iar numele directorului este același cu numele tabelei. Este obligatoriu ca fiecare tabel din acea bază de date să aibă un câmp cheie primară. Comanda pentru importul tuturor tabelelor dintr-o bază de date este:

sqoop import-all-tables --conectați jdbc: mysql: // localhost / angajați - nume de utilizator edureka

  • Sqoop - Lista de baze de date

Puteți lista bazele de date prezente în baza de date de relații utilizând Sqoop. Instrumentul Sqoop list-database analizează și execută interogarea „SHOW DATABASES” pe serverul bazei de date. Comanda pentru listarea bazelor de date este:

sqoop list-databases --connect jdbc: mysql: // localhost / --username edureka

  • Sqoop - Listează tabele

De asemenea, puteți lista tabelele unei anumite baze de date în serverul de baze de date MySQL folosind Sqoop. Instrumentul Sqoop list-tables analizează și execută interogarea „SHOW TABLES”. Comanda pentru listarea tabelelor este o bază de date este:

sqoop list-tables --conectați jdbc: mysql: // localhost / angajați - nume de utilizator edureka

  • Sqoop - Export

Așa cum am discutat mai sus, puteți exporta și date din HDFS în baza de date RDBMS. Tabelul țintă trebuie să existe în baza de date țintă.Datele sunt stocate ca înregistrări în HDFS. Aceste înregistrări sunt citite, analizate și delimitate cu un delimitator specificat de utilizator.Operația implicită este de a insera toate înregistrările din fișierele de intrare în tabelul bazei de date folosind instrucțiunea INSERT. În modul de actualizare, Sqoop generează instrucțiunea UPDATE care înlocuiește înregistrarea existentă în baza de date.

Deci, mai întâi creăm un tabel gol, unde vom exporta datele noastre.

Comanda pentru a exporta date din HDFS în baza de date relațională este:

sqoop export --conectați jdbc: mysql: // localhost / angajați - nume de utilizator edureka --table emp --export-dir / user / edureka / angajați

  • Sqoop - Codegen

În aplicația orientată obiect, fiecare tabel de bază de date are o clasă de obiecte de acces la date care conține metode „getter” și „setter” pentru inițializarea obiectelor. Codegen generează clasa DAO în mod automat. Generează clasa DAO în Java, pe baza structurii Table Schema.

Comanda pentru generarea codului Java este:

sqoop codegen --conectați jdbc: mysql: // localhost / angajați - nume de utilizator edureka - angajați tabel

Puteți vedea calea din imaginea de mai sus unde este generat codul. Să mergem pe cale și să verificăm fișierele create.

Sper că acest blog vă este informativ și cu valoare adăugată. Dacă sunteți interesat să aflați mai multe, puteți parcurge acest lucru care vă spune despre Big Data și despre modul în care Hadoop rezolvă provocările legate de Big Data.

Acum că ați înțeles Apache Sqoop, verificați de Edureka, o companie de învățare online de încredere, cu o rețea de peste 250.000 de elevi mulțumiți răspândiți pe tot globul. Cursul Edureka Big Data Hadoop Certification Training îi ajută pe cursanți să devină experți în HDFS, Yarn, MapReduce, Pig, Hive, HBase, Oozie, Flume și Sqoop folosind cazuri de utilizare în timp real în domeniul Retail, Social Media, Aviație, Turism, Finanțe.

Ai o întrebare pentru noi? Vă rugăm să o menționați în secțiunea de comentarii și vă vom răspunde.