Esercitazione su Apache Sqoop: importazione / esportazione di dati tra HDFS e RDBMS



Esercitazione su Apache Sqoop: Sqoop è uno strumento per il trasferimento di dati tra database Hadoop e relazionali. Questo blog copre l'importazione e l'esportazione di Sooop da MySQL.

Prima di iniziare con questo tutorial su Apache Sqoop, facciamo un passo indietro. Ricordi l'importanza dell'inserimento dei dati, come abbiamo discusso nel nostro precedente blog su Apache Flume . Ora, come sappiamo, Apache Flume è uno strumento di importazione dei dati per origini non strutturate, ma le organizzazioni archiviano i propri dati operativi in ​​database relazionali. Quindi, c'era bisogno di uno strumento in grado di importare ed esportare dati da database relazionali. Ecco perché è nato Apache Sqoop. Sqoop può facilmente integrarsi con Hadoop ed eseguire il dump dei dati strutturati da database relazionali su HDFS, complimentandosi con la potenza di Hadoop. Ecco perché, richiede una buona conoscenza di Apache Sqoop e Flume.

Inizialmente, Sqoop è stato sviluppato e gestito da Cloudera. Successivamente, il 23 luglio 2011, è stato incubato da Apache. Nell'aprile 2012, il progetto Sqoop è stato promosso come il progetto di primo livello di Apache.





In questo blog tutorial di Apache Flume, tratteremo:



Inizieremo questo tutorial su Apache Sqoop introducendo Apache Sqoop. Quindi andando avanti, capiremo i vantaggi dell'utilizzo di Apache Sqoop.

Esercitazione su Apache Sqoop: Introduzione a Sqoop

Apache Sqoop - Tutorial di Apache Sqoop - EdurekaGeneralmente, le applicazioni interagiscono con il database relazionale utilizzando RDBMS, e quindi questo rende i database relazionali una delle fonti più importanti che generano Big Data. Tali dati vengono memorizzati nei server RDB nella struttura relazionale. In questo caso, Apache Sqoop svolge un ruolo importante in , fornendo una possibile interazione tra il server di database relazionale e HDFS.

Quindi, Apache Sqoop è uno strumento in che è progettato per trasferire dati tra HDFS (Archiviazione Hadoop) e server di database relazionali come MySQL, Oracle RDB, SQLite, Teradata, Netezza, Postgres ecc. Apache Sqoop importa dati da database relazionali a HDFS ed esporta dati da HDFS a database relazionali. Trasferisce in modo efficiente i dati di massa tra Hadoop e archivi di dati esterni come data warehouse aziendali, database relazionali, ecc.



È così che Sqoop ha preso il nome: ' SQ L to Had Aperto & Hadoop to SQL '.

Inoltre, Sqoop viene utilizzato per importare dati da datastore esterni negli strumenti dell'ecosistema Hadoop come Alveare & HBase .

Ora, come sappiamo cos'è Apache Sqoop. Quindi, andiamo avanti nel nostro tutorial su Apache Sqoop e capiamo perché Sqoop è ampiamente utilizzato dalle organizzazioni.

Esercitazione su Apache Sqoop: perché Sqoop?

Per gli sviluppatori Hadoop, il gioco vero e proprio inizia dopo che i dati vengono caricati in HDFS. Giocano su questi dati per ottenere varie informazioni nascoste nei dati archiviati in HDFS.

Quindi, per questa analisi, i dati che risiedono nei sistemi di gestione del database relazionale devono essere trasferiti a HDFS. Il compito di scrivere il codice per l'importazione e l'esportazione dei dati dal database relazionale a HDFS non è interessante e noioso. È qui che Apache Sqoop viene in soccorso e rimuove il loro dolore. Automatizza il processo di importazione ed esportazione dei dati.

Sqoop semplifica la vita degli sviluppatori fornendo CLI per l'importazione e l'esportazione dei dati. Devono solo fornire informazioni di base come l'autenticazione del database, l'origine, la destinazione, le operazioni, ecc. Si occupa della parte rimanente.

Sqoop converte internamente il comando in attività MapReduce, che vengono quindi eseguite su HDFS. Utilizza il framework YARN per importare ed esportare i dati, che fornisce tolleranza agli errori oltre al parallelismo.

Avanzando in questo blog Sqoop Tutorial, capiremo le caratteristiche chiave di Sqoop e poi passeremo all'architettura Apache Sqoop.

Esercitazione su Apache Sqoop: caratteristiche principali di Sqoop

Sqoop fornisce molte caratteristiche salienti come:

  1. Pieno carico : Apache Sqoop può caricare l'intera tabella con un singolo comando. È inoltre possibile caricare tutte le tabelle da un database utilizzando un unico comando.
  2. Incrementale Caricare : Apache Sqoop fornisce anche la funzione di caricamento incrementale in cui è possibile caricare parti della tabella ogni volta che viene aggiornata.
  3. Parallelo importazione / esportazione : Sqoop utilizza il framework YARN per importare ed esportare i dati, che fornisce tolleranza agli errori oltre al parallelismo.
  4. Importare risultati di SQL query : Puoi anche importare il risultato restituito da una query SQL in HDFS.
  5. Compressione : È possibile comprimere i dati utilizzando l'algoritmo deflate (gzip) con l'argomento –compress o specificando l'argomento –compression-codec. Puoi anche caricare una tabella compressa in formato Apache Hive .
  6. Connettori per tutti maggiore RDBMS Banche dati : Apache Sqoop fornisce connettori per più database RDBMS, coprendo quasi l'intera circonferenza.
  7. Kerberos Sicurezza Integrazione : Kerberos è un protocollo di autenticazione di rete di computer che funziona sulla base di 'ticket' per consentire ai nodi che comunicano su una rete non protetta di dimostrare la propria identità in modo sicuro. Sqoop supporta l'autenticazione Kerberos.
  8. Caricare dati direttamente in HIVE / HBase : Puoi caricare i dati direttamente in Apache Hive per l'analisi e anche il dump dei dati in HBase, che è un database NoSQL.
  9. Supporto per Accumulo : Puoi anche indicare a Sqoop di importare la tabella in Accumulo anziché una directory in HDFS.

L'architettura è quella che offre ad Apache Sqoop questi vantaggi. Ora, poiché conosciamo le funzionalità di Apache Sqoop, andiamo avanti e comprendiamo l'architettura e il funzionamento di Apache Sqoop.

Esercitazione su Apache Sqoop: architettura e funzionamento di Sqoop

Facci capire come funziona Apache Sqoop usando il diagramma seguente:

Lo strumento di importazione importa singole tabelle da RDBMS a HDFS. Ogni riga di una tabella viene considerata come un record in HDFS.

Quando inviamo il comando Sqoop, la nostra attività principale viene divisa in attività secondarie gestite internamente dalle singole attività mappa. Map Task è la sottoattività, che importa parte dei dati nell'ecosistema Hadoop. Collettivamente, tutte le attività della mappa importano tutti i dati.

Anche l'esportazione funziona in modo simile.

Lo strumento di esportazione esporta un set di file da HDFS a un RDBMS. I file forniti come input a Sqoop contengono record, chiamati come righe nella tabella.

Quando inviamo il nostro lavoro, viene mappato in Map Tasks che porta la parte di dati da HDFS. Questi blocchi vengono esportati in una destinazione di dati strutturati. Combinando tutti questi blocchi di dati esportati, riceviamo tutti i dati a destinazione, che nella maggior parte dei casi è un RDBMS (MYSQL / Oracle / SQL Server).

La fase di riduzione è necessaria in caso di aggregazioni. Tuttavia, Apache Sqoop importa ed esporta i dati, non esegue alcuna aggregazione. Il lavoro di mappatura avvia più mappatori a seconda del numero definito dall'utente. Per l'importazione Sqoop, a ciascuna attività di mappatura verrà assegnata una parte dei dati da importare. Sqoop distribuisce equamente i dati di input tra i mappatori per ottenere prestazioni elevate. Quindi ogni mappatore crea una connessione con il database utilizzando JDBC e recupera la parte di dati assegnata da Sqoop e la scrive in HDFS o Hive o HBase in base agli argomenti forniti nella CLI.

Ora che comprendiamo l'architettura e il funzionamento di Apache Sqoop, capiamo la differenza tra Apache Flume e Apache Sqoop.

Esercitazione su Apache Sqoop: Flume vs Sqoop

La principale differenza tra Flume e Sqoop è che:

  • Flume inserisce solo dati non strutturati o dati semi-strutturati in HDFS.
  • Mentre Sqoop può importare ed esportare dati strutturati da RDBMS o data warehouse aziendali a HDFS o viceversa.

Ora, avanzando nel nostro tutorial di Apache Sqoop, è giunto il momento di passare attraverso i comandi di Apache Sqoop.

Esercitazione su Apache Sqoop: comandi Sqoop

  • Sqoop - Comando IMPORTA

Il comando Import viene utilizzato per importare una tabella da database relazionali in HDFS. Nel nostro caso, importeremo tabelle dai database MySQL in HDFS.

Come puoi vedere nell'immagine qui sotto, abbiamo la tabella dei dipendenti nel database dei dipendenti che importeremo in HDFS.

Il comando per importare la tabella è:

importazione sqoop --connect jdbc: mysql: // localhost / dipendenti --username edureka --table dipendenti

Come puoi vedere nell'immagine sottostante, dopo aver eseguito questo comando, le attività di mappa verranno eseguite sul back-end.

Dopo che il codice è stato eseguito, puoi controllare l'interfaccia utente Web di HDFS, ad esempio localhost: 50070, dove vengono importati i dati.

  • Sqoop - Comando di importazione con directory di destinazione

Puoi anche importare la tabella in una directory specifica in HDFS utilizzando il comando seguente:

importazione sqoop --connect jdbc: mysql: // localhost / dipendenti --username edureka --table dipendenti --m 1 --target-dir / dipendenti

Sqoop importa i dati in parallelo dalla maggior parte delle origini di database. -m viene utilizzata per specificare il numero di mappatori da eseguire.

Sqoop importa i dati in parallelo dalla maggior parte delle origini di database. È possibile specificare il numero di attività di mappa (processi paralleli) da utilizzare per eseguire l'importazione utilizzando l'estensione -m o –Num-mappers discussione. Ciascuno di questi argomenti accetta un valore intero che corrisponde al grado di parallelismo da utilizzare.

È possibile controllare il numero di mappatori indipendentemente dal numero di file presenti nella directory. L'andamento delle esportazioni dipende dal grado di parallelismo. Per impostazione predefinita, Sqoop utilizzerà quattro attività in parallelo per il processo di esportazione. Questo potrebbe non essere ottimale, dovrai sperimentare con la tua configurazione particolare. Attività aggiuntive possono offrire una migliore concorrenza, ma se il database presenta già un collo di bottiglia durante l'aggiornamento degli indici, il richiamo di trigger e così via, il carico aggiuntivo potrebbe ridurre le prestazioni.

Nell'immagine sottostante puoi vedere che il numero di attività di mappatura è 1.

Il numero di file creati durante l'importazione di tabelle MySQL è uguale al numero di mappatori creati.

  • Sqoop: comando IMPORT con clausola Where

Puoi importare un sottoinsieme di una tabella utilizzando la clausola 'where' nello strumento di importazione Sqoop. Esegue la query SQL corrispondente nel rispettivo server di database e memorizza il risultato in una directory di destinazione in HDFS. Puoi utilizzare il seguente comando per importare i dati con ‘ dove 'Clausola:

importazione sqoop --connect jdbc: mysql: // localhost / dipendenti --username edureka --table dipendenti --m 3 --dove 'emp_no & gt 49000' --target-dir / Latest_Employees

  • Sqoop - Importazione incrementale

Sqoop fornisce una modalità di importazione incrementale che può essere utilizzata per recuperare solo le righe più recenti di alcuni set di righe importati in precedenza. Sqoop supporta due tipi di importazioni incrementali: aggiungere e Ultima modifica . È possibile utilizzare l'argomento –incremental per specificare il tipo di importazione incrementale da eseguire.

Dovresti specificare aggiungere modalità durante l'importazione di una tabella in cui vengono continuamente aggiunte nuove righe con valori di id di riga crescenti. Specifichi la colonna contenente l'id della riga con –Check-column . Sqoop importa le righe in cui la colonna di controllo ha un valore maggiore di quello specificato con –Ultimo valore .

Viene chiamata una strategia di aggiornamento della tabella alternativa supportata da Sqoop Ultima modifica modalità. Dovresti usarlo quando le righe della tabella di origine possono essere aggiornate e ogni aggiornamento di questo tipo imposterà il valore di una colonna dell'ultima modifica al timestamp corrente.

differenza tra c c # e c ++

Quando si esegue un'importazione successiva, è necessario specificare –Ultimo valore in questo modo per assicurarti di importare solo i dati nuovi o aggiornati. Questa operazione viene gestita automaticamente creando un'importazione incrementale come lavoro salvato, che è il meccanismo preferito per eseguire un'importazione incrementale ricorrente.

Innanzitutto, stiamo inserendo una nuova riga che verrà aggiornata nel nostro HDFS.

Il comando per l'importazione incrementale è:

importazione sqoop --connect jdbc: mysql: // localhost / dipendenti --username edureka --table dipendenti --target-dir / Latest_Employees --incremental append --check-column emp_no --last-value 499999

Puoi vedere nell'immagine qui sotto, viene creato un nuovo file con i dati aggiornati.

  • Sqoop - Importa tutte le tabelle

È possibile importare tutte le tabelle dal server di database RDBMS all'HDFS. Ciascun dato della tabella viene archiviato in una directory separata e il nome della directory è uguale al nome della tabella. È obbligatorio che ogni tabella in quel database debba avere un campo chiave primaria. Il comando per importare tutta la tabella da un database è:

sqoop import-all-tables --connect jdbc: mysql: // localhost / dipendenti --username edureka

  • Sqoop - Elenca database

Puoi elencare i database presenti nel database di relazione utilizzando Sqoop. Lo strumento Sqoop list-databases analizza ed esegue la query 'SHOW DATABASES' sul server del database. Il comando per elencare i database è:

database elenco sqoop --connect jdbc: mysql: // localhost / --username edureka

  • Sqoop - Elenca tabelle

Puoi anche elencare le tabelle di un particolare database nel server di database MySQL utilizzando Sqoop. Lo strumento Sqoop list-tables analizza ed esegue la query 'SHOW TABLES'. Il comando per elencare le tabelle è un database è:

sqoop list-tables --connect jdbc: mysql: // localhost / dipendenti --username edureka

  • Sqoop - Esporta

Come abbiamo discusso in precedenza, puoi anche esportare i dati da HDFS al database RDBMS. La tabella di destinazione deve esistere nel database di destinazione.I dati vengono archiviati come record in HDFS. Questi record vengono letti, analizzati e delimitati con delimitatore specificato dall'utente.L'operazione predefinita consiste nell'inserire tutto il record dai file di input nella tabella del database utilizzando l'istruzione INSERT. In modalità di aggiornamento, Sqoop genera l'istruzione UPDATE che sostituisce il record esistente nel database.

Quindi, per prima cosa creiamo una tabella vuota, dove esporteremo i nostri dati.

Il comando per esportare i dati da HDFS al database relazionale è:

esportazione sqoop --connect jdbc: mysql: // localhost / dipendenti --username edureka --table emp --export-dir / user / edureka / dipendenti

  • Sqoop - Codegen

Nell'applicazione orientata agli oggetti, ogni tabella di database ha una classe Data Access Object che contiene i metodi 'getter' e 'setter' per inizializzare gli oggetti. Codegen genera automaticamente la classe DAO. Genera una classe DAO in Java, basata sulla struttura dello schema della tabella.

Il comando per la generazione del codice java è:

sqoop codegen --connect jdbc: mysql: // localhost / dipendenti --username edureka --table dipendenti

Puoi vedere il percorso nell'immagine sopra in cui viene generato il codice. Andiamo sul percorso e controlliamo i file che vengono creati.

Spero che questo blog sia informativo e un valore aggiunto per te. Se sei interessato a saperne di più, puoi farlo che ti parla dei Big Data e di come Hadoop sta risolvendo le sfide legate ai Big Data.

Ora che hai compreso Apache Sqoop, controlla il file da Edureka, una società di formazione online affidabile con una rete di oltre 250.000 studenti soddisfatti sparsi in tutto il mondo. Il corso di formazione per la certificazione Edureka Big Data Hadoop aiuta gli studenti a diventare esperti in HDFS, Yarn, MapReduce, Pig, Hive, HBase, Oozie, Flume e Sqoop utilizzando casi d'uso in tempo reale nel settore Retail, Social Media, Aviation, Tourism, Finance.

Hai domande per noi? Per favore menzionalo nella sezione commenti e ti risponderemo.