Tutorial Apache Sqoop: importació / exportació de dades entre HDFS i RDBMS



Tutorial Apache Sqoop: Sqoop és una eina per transferir dades entre bases de dades relacionals i Hadoop. Aquest bloc tracta de la importació i exportació de Sooop des de MySQL.

Abans de començar amb aquest tutorial d'Apache Sqoop, fem un pas enrere. Podeu recordar la importància de la ingestió de dades, tal com ja vam parlar al nostre bloc anterior Apache Flume . Ara, com sabem, Apache Flume és una eina d’ingestió de dades per a fonts no estructurades, però les organitzacions emmagatzemen les seves dades operatives en bases de dades relacionals. Per tant, era necessària una eina que pogués importar i exportar dades de bases de dades relacionals. Per això va néixer Apache Sqoop. Sqoop es pot integrar fàcilment amb Hadoop i bolcar dades estructurades de bases de dades relacionals en HDFS, complementant la potència de Hadoop. Aquesta és la raó, requereix un bon coneixement d'Apache Sqoop i Flume.

Inicialment, Sqoop va ser desenvolupat i mantingut per Cloudera. Més tard, el 23 de juliol de 2011, va ser incubat per Apache. L’abril de 2012 es va promoure el projecte Sqoop com a projecte de primer nivell d’Apache.





En aquest bloc de tutorial d'Apache Flume, tractarem:



Començarem aquest tutorial d’Apache Sqoop introduint Apache Sqoop. A continuació, entendrem els avantatges d’utilitzar Apache Sqoop.

Tutorial Apache Sqoop: Introducció a Sqoop

Apache Sqoop - Apache Sqoop Tutorial - EdurekaEn general, les aplicacions interactuen amb la base de dades relacional mitjançant RDBMS i, per tant, fan de les bases de dades relacionals una de les fonts més importants que generen Big Data. Aquestes dades s’emmagatzemen als servidors RDB a l’estructura relacional. Aquí, Apache Sqoop té un paper important a , proporcionant una interacció factible entre el servidor de bases de dades relacionals i HDFS.

Per tant, Apache Sqoop és una eina a que està dissenyat per transferir dades entre HDFS (Emmagatzematge Hadoop) i servidors de bases de dades relacionals com MySQL, Oracle RDB, SQLite, Teradata, Netezza, Postgres, etc. Apache Sqoop importa dades de bases de dades relacionals a HDFS i exporta dades des de HDFS a bases de dades relacionals. Transfereix de manera eficient dades massives entre Hadoop i magatzems de dades externs, com ara magatzems de dades empresarials, bases de dades relacionals, etc.



Així va ser com Sqoop va rebre el seu nom - ' SQ L a Had obert & Hadoop a SQL ”.

A més, Sqoop s’utilitza per importar dades d’emmagatzematges de dades externs a eines de l’ecosistema Hadoop, com ara Rusc & Base HB .

Ara, com sabem què és Apache Sqoop. Per tant, anem al nostre tutorial d'Apache Sqoop i entenem per què Sqoop és utilitzat àmpliament per les organitzacions.

Tutorial Apache Sqoop: per què Sqoop?

Per al desenvolupador Hadoop, el joc real comença després de carregar les dades a HDFS. Reprodueixen aquestes dades per obtenir diverses idees ocultes a les dades emmagatzemades a HDFS.

Per tant, per a aquesta anàlisi, les dades que resideixen en els sistemes de gestió de bases de dades relacionals han de ser transferides a HDFS. La tasca d’escriure El codi per importar i exportar dades de la base de dades relacional a HDFS és poc interessant i tediós. Aquí és on Apache Sqoop ve a rescatar i els elimina el dolor. Automatitza el procés d’importació i exportació de dades.

Sqoop facilita la vida dels desenvolupadors proporcionant CLI per importar i exportar dades. Només han de proporcionar informació bàsica com l’autenticació de la base de dades, font, destinació, operacions, etc. Es fa càrrec de la part restant.

Sqoop converteix l'ordre internament en tasques de MapReduce, que després s'executen mitjançant HDFS. Utilitza el marc YARN per importar i exportar les dades, cosa que proporciona tolerància a fallades a més del paral·lelisme.

Avançant en aquest bloc Sqoop Tutorial, comprendreem les característiques clau de Sqoop i després passarem a l’arquitectura Apache Sqoop.

Tutorial Apache Sqoop: característiques principals de Sqoop

Sqoop ofereix moltes funcions destacades com:

  1. Càrrega completa : Apache Sqoop pot carregar tota la taula mitjançant una sola ordre. També podeu carregar totes les taules d'una base de dades mitjançant una sola ordre.
  2. Incremental Càrrega : Apache Sqoop també proporciona la possibilitat de càrrega incremental on podeu carregar parts de la taula sempre que s’actualitzi.
  3. Paral·lel importació-exportació : Sqoop utilitza el marc YARN per importar i exportar les dades, cosa que proporciona tolerància a fallades a més del paral·lelisme.
  4. Importar resultats de SQL consulta : També podeu importar el resultat retornat d'una consulta SQL a HDFS.
  5. Compressió : Podeu comprimir les vostres dades utilitzant l'algorisme deflate (gzip) amb l'argument –compress o bé especificant l'argument –compression-codec. També podeu carregar la taula comprimida a Rusc Apache .
  6. Connectors per tot major RDBMS Bases de dades : Apache Sqoop proporciona connectors per a diverses bases de dades RDBMS, que cobreixen gairebé tota la circumferència.
  7. Kerberos Seguretat Integració : Kerberos és un protocol d’autenticació de xarxes informàtiques que funciona sobre la base de ‘tickets’ per permetre que els nodes que es comuniquen a través d’una xarxa no segura demostrin la seva identitat de manera segura. Sqoop admet l'autenticació Kerberos.
  8. Càrrega dades directament dins HIVE / HBase : Podeu carregar dades directament a Rusc Apache per analitzar-les i també bolcar les vostres dades a HBase, que és una base de dades NoSQL.
  9. Suport per Acumulació : També podeu indicar a Sqoop que importi la taula a Accumulo en lloc d'un directori a HDFS.

L’arquitectura és la que proporciona a Apache Sqoop aquests avantatges. Ara, ja que coneixem les funcions d’Apache Sqoop, anem endavant i comprenem l’arquitectura i el funcionament d’Apache Sqoop.

Tutorial Apache Sqoop: arquitectura i treball de Sqoop

Comprenguem com funciona Apache Sqoop mitjançant el diagrama següent:

què significa append a java

L'eina d'importació importa taules individuals de RDBMS a HDFS. Cada fila d'una taula es tracta com un registre a HDFS.

Quan enviem l’ordre Sqoop, la nostra tasca principal es divideix en subtasques que gestionen internament les tasques de mapes individuals. La tasca de mapa és la sub tasca, que importa part de les dades a l’ecosistema Hadoop. Col·lectivament, totes les tasques del mapa importen totes les dades.

L’exportació també funciona d’una manera similar.

L'eina d'exportació torna a exportar un conjunt de fitxers de HDFS a un RDBMS. Els fitxers donats com a entrada a Sqoop contenen registres, que s’anomenen files a la taula.

Quan enviem el nostre Treball, es mapeja a Tasques de mapes, cosa que aporta una gran quantitat de dades de HDFS. Aquests trossos s’exporten a una destinació de dades estructurades. Combinant tots aquests fragments de dades exportats, rebem totes les dades a la destinació, que en la majoria dels casos és un RDBMS (MYSQL / Oracle / SQL Server).

Es requereix una fase de reducció en cas d'agregacions. Però, Apache Sqoop només importa i exporta les dades i no realitza agregacions. Llançament de tasques de mapes múltiples en funció del nombre definit per l'usuari. Per a la importació de Sqoop, cada tasca de mapatge s'assignarà amb una part de les dades a importar. Sqoop distribueix les dades d'entrada entre els mapers per igual per obtenir un alt rendiment. A continuació, cada assignador crea una connexió amb la base de dades mitjançant JDBC i recupera la part de dades assignada per Sqoop i l'escriu a HDFS o Hive o HBase basant-se en els arguments proporcionats a la CLI.

Ara que ja entenem l’arquitectura i el funcionament d’Apache Sqoop, comprenguem la diferència entre Apache Flume i Apache Sqoop.

Tutorial Apache Sqoop: Flume vs Sqoop

La principal diferència entre Flume i Sqoop és que:

  • Flume només ingereix dades no estructurades o dades semiestructurades a HDFS.
  • Mentre que Sqoop pot importar i exportar dades estructurades des de magatzems de dades RDBMS o Enterprise a HDFS o viceversa.

Ara, avançant en el nostre Tutorial Apache Sqoop, és hora de passar per les ordres d’Apache Sqoop.

Tutorial Apache Sqoop: ordres Sqoop

  • Sqoop: ordre IMPORT

L'ordre Importa s'utilitza per importar una taula de bases de dades relacionals a HDFS. En el nostre cas, importarem taules de bases de dades MySQL a HDFS.

Com podeu veure a la imatge següent, tenim una taula d'empleats a la base de dades d'empleats que importarem a HDFS.

com convertir a binari en python

L'ordre per importar la taula és:

importació sqoop --connect jdbc: mysql: // localhost / dipendents - nom d'usuari edureka - empleats de taula

Com podeu veure a la imatge següent, després d'executar aquesta ordre, les tasques de mapa s'executaran a la part posterior.

Un cop executat el codi, podeu comprovar la interfície d’usuari web d’HDFS, és a dir, localhost: 50070 on s’importen les dades.

  • Sqoop: ordre IMPORT amb el directori de destinació

També podeu importar la taula en un directori específic de HDFS mitjançant l'ordre següent:

importació sqoop --connect jdbc: mysql: // localhost / dipendents --usuari edureka --table empleats --m 1 --directe-direcció / empleats

Sqoop importa dades en paral·lel de la majoria de fonts de bases de dades. -m La propietat s'utilitza per especificar el nombre de mapers que s'han d'executar.

Sqoop importa dades en paral·lel de la majoria de fonts de bases de dades. Podeu especificar el nombre de tasques de mapes (processos paral·lels) que cal utilitzar per realitzar la importació mitjançant el fitxer -m o bé –Num-mappers argument. Cadascun d'aquests arguments pren un valor enter que correspon al grau de paral·lelisme a emprar.

Podeu controlar el nombre de mapers independentment del nombre de fitxers presents al directori. El rendiment de les exportacions depèn del grau de paral·lelisme. Per defecte, Sqoop utilitzarà quatre tasques en paral·lel per al procés d’exportació. Pot ser que això no sigui òptim, haureu d’experimentar amb la vostra configuració particular. Les tasques addicionals poden oferir una major simultaneïtat, però si la base de dades ja té problemes d’actualització d’índexs, invoca activadors, etc., la càrrega addicional pot disminuir el rendiment.

Podeu veure a la imatge següent que el nombre de tasques de mapatge és 1.

El nombre de fitxers que es creen mentre s’importen les taules MySQL és igual al nombre de mapers creats.

  • Sqoop: ordre IMPORT amb clàusula Where

Podeu importar un subconjunt d'una taula mitjançant la clàusula 'on' a l'eina d'importació de Sqoop. Executa la consulta SQL corresponent al servidor de base de dades respectiu i emmagatzema el resultat en un directori de destinació a HDFS. Podeu utilitzar l’ordre següent per importar dades amb ‘ on 'Clàusula:

importació sqoop --connect jdbc: mysql: // localhost / dipendents --usuari edureka --table empleats --m 3 --on 'emp_no & gt 49000' --target-dir / Latest_Employees

  • Sqoop: importació incremental

Sqoop proporciona un mode d'importació incremental que es pot utilitzar per recuperar només files més noves que alguns conjunts de files importats anteriorment. Sqoop admet dos tipus d'importacions incrementals: afegir i última modificació . Podeu utilitzar l'argument –incremental per especificar el tipus d'importació incremental a realitzar.

Haureu d'especificar afegir mode quan s’importa una taula on s’afegeixen contínuament noves files amb valors creixents d’identificador de fila. Especifiqueu la columna que conté l'identificador de la fila amb –Xeck-column . Sqoop importa files on la columna de verificació té un valor superior a l’especificat amb –Últim valor .

Es diu una estratègia d’actualització de taules alternativa compatible amb Sqoop última modificació mode. Hauríeu d'utilitzar-lo quan es puguin actualitzar les files de la taula d'origen i cada actualització establirà el valor d'una última columna modificada a la marca de temps actual.

Quan s'executi una importació posterior, haureu d'especificar –Últim valor d'aquesta manera, assegureu-vos d'importar només les dades noves o actualitzades. Això es gestiona automàticament creant una importació incremental com a treball desat, que és el mecanisme preferit per realitzar una importació incremental recurrent.

En primer lloc, inserim una nova fila que s'actualitzarà al nostre HDFS.

L'ordre per a la importació incremental és:

sqoop import --connect jdbc: mysql: // localhost / dipendents --usuari edureka --table empleats --target-dir / Latest_Employees --incremental append --check-column emp_no --last-value 499999

Podeu veure a la imatge següent, es crea un fitxer nou amb les dades actualitzades.

per a què serveix la programació sas
  • Sqoop: importa totes les taules

Podeu importar totes les taules del servidor de bases de dades RDBMS a l'HDFS. Les dades de cada taula s’emmagatzemen en un directori separat i el nom del directori és el mateix que el nom de la taula. És obligatori que totes les taules d'aquesta base de dades hagin de tenir un camp de clau principal. L'ordre per importar tota la taula d'una base de dades és:

sqoop import-all-tables --connect jdbc: mysql: // localhost / dipendents - nom d'usuari edureka

  • Sqoop: llista de bases de dades

Podeu llistar les bases de dades presents a la base de dades de relacions mitjançant Sqoop. L’eina Sqoop list-databases analitza i executa la consulta ‘MOSTRA LES BASES DE DADES’ al servidor de bases de dades. L'ordre per llistar bases de dades és:

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

  • Sqoop: llista de taules

També podeu llistar les taules d’una base de dades concreta al servidor de bases de dades MySQL mitjançant Sqoop. L'eina Sqoop list-tables analitza i executa la consulta 'MOSTRA TAULES'. L'ordre per llistar taules és una base de dades:

sqoop list-tables --connect jdbc: mysql: // localhost / dipendents - nom d'usuari edureka

  • Sqoop: exportació

Com hem comentat anteriorment, també podeu exportar dades des de l'HDFS a la base de dades RDBMS. La taula de destinació ha d’existir a la base de dades de destinació.Les dades s’emmagatzemen com a registres en HDFS. Aquests registres es llegeixen, analitzen i delimiten amb un delimitador especificat per l'usuari.L'operació per defecte és inserir tot el registre dels fitxers d'entrada a la taula de base de dades mitjançant la instrucció INSERT. En mode d'actualització, Sqoop genera la sentència UPDATE que substitueix el registre existent a la base de dades.

Per tant, primer estem creant una taula buida, on exportarem les nostres dades.

L'ordre per exportar dades des de HDFS a la base de dades relacional és:

sqoop export --connect jdbc: mysql: // localhost / dipendents --usuari edureka --table emp --export-dir / usuari / edureka / empleats

  • Sqoop - Codegen

A les aplicacions orientades a objectes, cada taula de base de dades té una classe d'objectes d'accés a dades que conté mètodes 'getter' i 'setter' per inicialitzar objectes. Codegen genera la classe DAO automàticament. Genera la classe DAO a Java, basada en l’estructura de l’esquema de la taula.

L'ordre per generar codi Java és:

sqoop codegen --connect jdbc: mysql: // localhost / employee --usuari edureka --table empleats

Podeu veure el camí de la imatge superior on es genera el codi. Anem pel camí i comprovem els fitxers que es creen.

Espero que aquest bloc us sigui informatiu i de valor afegit. Si esteu interessats en obtenir més informació, podeu fer-ho que us explica el Big Data i com Hadoop està resolent reptes relacionats amb el Big Data.

Ara que heu entès Apache Sqoop, consulteu el fitxer per Edureka, una empresa d'aprenentatge en línia de confiança amb una xarxa de més de 250.000 estudiants satisfets repartits per tot el món. El curs de formació Edureka Big Data Hadoop Certification ajuda els estudiants a convertir-se en experts en HDFS, Yarn, MapReduce, Pig, Hive, HBase, Oozie, Flume i Sqoop mitjançant casos d’ús en temps real en dominis Retail, Social Media, Aviació, Turisme, Finances.

Tens alguna pregunta? Esmenta’l a la secció de comentaris i et respondrem.