Tutorial de Apache Sqoop: importar / exportar datos entre HDFS y RDBMS



Tutorial de Apache Sqoop: Sqoop es una herramienta para transferir datos entre Hadoop y bases de datos relacionales. Este blog cubre la importación y exportación de Sooop desde MySQL.

Antes de comenzar con este tutorial de Apache Sqoop, demos un paso atrás. ¿Puede recordar la importancia de la ingestión de datos, como lo discutimos en nuestro blog anterior sobre Apache Flume . Ahora, como sabemos, Apache Flume es una herramienta de ingesta de datos para fuentes no estructuradas, pero las organizaciones almacenan sus datos operativos en bases de datos relacionales. Por lo tanto, se necesitaba una herramienta que pudiera importar y exportar datos de bases de datos relacionales. Por eso nació Apache Sqoop. Sqoop puede integrarse fácilmente con Hadoop y volcar datos estructurados de bases de datos relacionales en HDFS, complementando el poder de Hadoop. Esta es la razón por, exige un conocimiento sólido de Apache Sqoop y Flume.

Inicialmente, Sqoop fue desarrollado y mantenido por Cloudera. Posteriormente, el 23 de julio de 2011, fue incubado por Apache. En abril de 2012, el proyecto Sqoop se promovió como proyecto de nivel superior de Apache.





En este blog tutorial de Apache Flume, cubriremos:



Comenzaremos este tutorial de Apache Sqoop presentando Apache Sqoop. Luego, avanzando, entenderemos las ventajas de usar Apache Sqoop.

Tutorial de Apache Sqoop: Introducción a Sqoop

Apache Sqoop - Apache Sqoop Tutorial - EdurekaGeneralmente, las aplicaciones interactúan con la base de datos relacional mediante RDBMS, por lo que esto hace que las bases de datos relacionales sean una de las fuentes más importantes que generan Big Data. Estos datos se almacenan en servidores RDB en la estructura relacional. Aquí, Apache Sqoop juega un papel importante en , proporcionando una interacción factible entre el servidor de base de datos relacional y HDFS.

Entonces, Apache Sqoop es una herramienta en que está diseñado para transferir datos entre HDFS (Almacenamiento Hadoop) y servidores de bases de datos relacionales como MySQL, Oracle RDB, SQLite, Teradata, Netezza, Postgres, etc. Apache Sqoop importa datos de bases de datos relacionales a HDFS y exporta datos de HDFS a bases de datos relacionales. Transfiere de manera eficiente datos masivos entre Hadoop y almacenes de datos externos, como almacenes de datos empresariales, bases de datos relacionales, etc.



Así es como Sqoop obtuvo su nombre: ' SQ L to Had abierto & Hadoop a SQL ”.

Además, Sqoop se utiliza para importar datos de almacenes de datos externos a las herramientas del ecosistema de Hadoop como Colmena & HBase .

Ahora, como sabemos qué es Apache Sqoop. Entonces, avancemos en nuestro tutorial de Apache Sqoop y entendamos por qué las organizaciones utilizan ampliamente Sqoop.

Tutorial de Apache Sqoop: ¿Por qué Sqoop?

Para el desarrollador de Hadoop, el juego real comienza después de que los datos se cargan en HDFS. Juegan con estos datos para obtener varios conocimientos ocultos en los datos almacenados en HDFS.

Por tanto, para este análisis, los datos que residen en los sistemas de gestión de bases de datos relacionales deben transferirse a HDFS. La tarea de escribir El código para importar y exportar datos de la base de datos relacional a HDFS no es interesante y tedioso. Aquí es donde Apache Sqoop viene a rescatar y eliminar su dolor. Automatiza el proceso de importación y exportación de datos.

Sqoop facilita la vida de los desarrolladores al proporcionar CLI para importar y exportar datos. Solo tienen que proporcionar información básica como autenticación de base de datos, origen, destino, operaciones, etc. Se encarga de la parte restante.

Sqoop convierte internamente el comando en tareas de MapReduce, que luego se ejecutan en HDFS. Utiliza el marco YARN para importar y exportar los datos, lo que proporciona tolerancia a fallas además del paralelismo.

Avanzando en este blog Tutorial de Sqoop, entenderemos las características clave de Sqoop y luego pasaremos a la arquitectura Apache Sqoop.

Tutorial de Apache Sqoop: características clave de Sqoop

Sqoop proporciona muchas características destacadas como:

  1. Carga completa : Apache Sqoop puede cargar toda la tabla con un solo comando. También puede cargar todas las tablas de una base de datos con un solo comando.
  2. Incremental Carga : Apache Sqoop también proporciona la función de carga incremental donde puede cargar partes de la tabla siempre que se actualice.
  3. Paralelo importación y exportación : Sqoop usa el marco YARN para importar y exportar los datos, lo que proporciona tolerancia a fallas además del paralelismo.
  4. Importar resultados de SQL consulta : También puede importar el resultado devuelto de una consulta SQL en HDFS.
  5. Compresión : Puede comprimir sus datos utilizando el algoritmo deflate (gzip) con el argumento –compress, o especificando el argumento –compression-codec. También puede cargar una tabla comprimida en Apache Hive .
  6. Conectores para todos mayor RDBMS Bases de datos : Apache Sqoop proporciona conectores para múltiples bases de datos RDBMS, cubriendo casi toda la circunferencia.
  7. Kerberos Seguridad Integración : Kerberos es un protocolo de autenticación de red informática que funciona sobre la base de 'tickets' para permitir que los nodos que se comunican a través de una red no segura se prueben su identidad entre sí de forma segura. Sqoop admite la autenticación Kerberos.
  8. Carga datos directamente dentro HIVE / HBase : Puede cargar datos directamente en Apache Hive para su análisis y también volcar sus datos en HBase, que es una base de datos NoSQL.
  9. Apoyo para Acumulación : También puede indicarle a Sqoop que importe la tabla en Accumulo en lugar de un directorio en HDFS.

La arquitectura es una que está empoderando a Apache Sqoop con estos beneficios. Ahora, como conocemos las características de Apache Sqoop, avancemos y comprendamos la arquitectura y el funcionamiento de Apache Sqoop.

Tutorial de Apache Sqoop: Arquitectura y funcionamiento de Sqoop

Entendamos cómo funciona Apache Sqoop usando el siguiente diagrama:

La herramienta de importación importa tablas individuales de RDBMS a HDFS. Cada fila de una tabla se trata como un registro en HDFS.

Cuando enviamos el comando Sqoop, nuestra tarea principal se divide en subtareas que son manejadas internamente por la Tarea de Mapa individual. Map Task es la subtarea, que importa parte de los datos al ecosistema Hadoop. En conjunto, todas las tareas de Mapa importan todos los datos.

La exportación también funciona de manera similar.

La herramienta de exportación exporta un conjunto de archivos de HDFS a un RDBMS. Los archivos proporcionados como entrada a Sqoop contienen registros, que se denominan filas en la tabla.

Cuando enviamos nuestro trabajo, se asigna a Map Tasks, lo que trae la gran cantidad de datos de HDFS. Estos fragmentos se exportan a un destino de datos estructurados. Combinando todos estos fragmentos de datos exportados, recibimos todos los datos en el destino, que en la mayoría de los casos es un RDBMS (MYSQL / Oracle / SQL Server).

Es necesario reducir la fase en caso de agregaciones. Pero, Apache Sqoop solo importa y exporta los datos, no realiza ninguna agregación. El trabajo de mapas lanza múltiples mapeadores dependiendo del número definido por el usuario. Para la importación de Sqoop, a cada tarea del asignador se le asignará una parte de los datos que se importarán. Sqoop distribuye los datos de entrada entre los mapeadores por igual para obtener un alto rendimiento. Luego, cada asignador crea una conexión con la base de datos utilizando JDBC y obtiene la parte de los datos asignados por Sqoop y la escribe en HDFS o Hive o HBase según los argumentos proporcionados en la CLI.

Ahora que entendemos la arquitectura y el funcionamiento de Apache Sqoop, comprendamos la diferencia entre Apache Flume y Apache Sqoop.

Tutorial de Apache Sqoop: Flume vs Sqoop

La principal diferencia entre Flume y Sqoop es que:

  • Flume solo ingiere datos no estructurados o datos semiestructurados en HDFS.
  • Mientras que Sqoop puede importar y exportar datos estructurados desde RDBMS o almacenes de datos empresariales a HDFS o viceversa.

Ahora, avanzando en nuestro Tutorial de Apache Sqoop, es el momento de pasar por los comandos de Apache Sqoop.

Tutorial de Apache Sqoop: comandos de Sqoop

  • Sqoop - comando IMPORT

El comando de importación se utiliza para importar una tabla desde bases de datos relacionales a HDFS. En nuestro caso, vamos a importar tablas de bases de datos MySQL a HDFS.

Como puede ver en la imagen de abajo, tenemos una tabla de empleados en la base de datos de empleados que estaremos importando a HDFS.

El comando para importar la tabla es:

importación de sqoop --connect jdbc: mysql: // localhost / employee --username edureka --table Employees

Como puede ver en la imagen de abajo, después de ejecutar este comando, las tareas del mapa se ejecutarán en el back-end.

Una vez ejecutado el código, puede comprobar la interfaz de usuario web de HDFS, es decir, localhost: 50070 donde se importan los datos.

  • Sqoop - comando IMPORT con directorio de destino

También puede importar la tabla en un directorio específico en HDFS usando el siguiente comando:

importación de sqoop --connect jdbc: mysql: // localhost / employee --username edureka --table Employees --m 1 --target-dir / employee

Sqoop importa datos en paralelo desde la mayoría de las fuentes de bases de datos. -metro La propiedad se utiliza para especificar el número de mapeadores que se ejecutarán.

Sqoop importa datos en paralelo desde la mayoría de las fuentes de bases de datos. Puede especificar el número de tareas de mapa (procesos paralelos) que se utilizarán para realizar la importación mediante el -metro o –Num-mappers argumento. Cada uno de estos argumentos toma un valor entero que corresponde al grado de paralelismo a emplear.

Puede controlar el número de mapeadores independientemente del número de archivos presentes en el directorio. El rendimiento de las exportaciones depende del grado de paralelismo. De forma predeterminada, Sqoop utilizará cuatro tareas en paralelo para el proceso de exportación. Es posible que esto no sea óptimo, necesitará experimentar con su propia configuración particular. Las tareas adicionales pueden ofrecer una mejor simultaneidad, pero si la base de datos ya tiene un cuello de botella en la actualización de índices, la invocación de activadores, etc., la carga adicional puede disminuir el rendimiento.

Puede ver en la imagen de abajo que el número de tareas del asignador es 1.

El número de archivos que se crean al importar tablas MySQL es igual al número de mapeadores creados.

diferencia entre posgrado y maestría
  • Sqoop: comando IMPORT con cláusula Where

Puede importar un subconjunto de una tabla usando la cláusula 'dónde' en la herramienta de importación de Sqoop. Ejecuta la consulta SQL correspondiente en el servidor de base de datos respectivo y almacena el resultado en un directorio de destino en HDFS. Puede utilizar el siguiente comando para importar datos con ' dónde 'Cláusula:

sqoop import --connect jdbc: mysql: // localhost / employee --username edureka --table Employees --m 3 - where 'emp_no & gt 49000' --target-dir / Latest_Employees

  • Sqoop - Importación incremental

Sqoop proporciona un modo de importación incremental que se puede usar para recuperar solo filas más nuevas que algunos conjuntos de filas previamente importados. Sqoop admite dos tipos de importaciones incrementales: adjuntar y última modificación . Puede utilizar el argumento –incremental para especificar el tipo de importación incremental a realizar.

Deberías especificar adjuntar modo al importar una tabla donde continuamente se agregan nuevas filas con valores de identificación de fila crecientes. Usted especifica la columna que contiene el ID de la fila con –Columna de verificación . Sqoop importa filas donde la columna de verificación tiene un valor mayor que el especificado con –Último valor .

Una estrategia de actualización de tabla alternativa compatible con Sqoop se llama última modificación modo. Debe usar esto cuando las filas de la tabla de origen puedan actualizarse, y cada actualización establecerá el valor de una columna modificada por última vez en la marca de tiempo actual.

Al ejecutar una importación posterior, debe especificar –Último valor de esta manera para asegurarse de importar solo los datos nuevos o actualizados. Esto se maneja automáticamente creando una importación incremental como un trabajo guardado, que es el mecanismo preferido para realizar una importación incremental recurrente.

Primero, estamos insertando una nueva fila que se actualizará en nuestro HDFS.

El comando para la importación incremental es:

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

Puede ver en la imagen de abajo, se crea un nuevo archivo con los datos actualizados.

  • Sqoop - Importar todas las tablas

Puede importar todas las tablas del servidor de la base de datos RDBMS al HDFS. Los datos de cada tabla se almacenan en un directorio separado y el nombre del directorio es el mismo que el de la tabla. Es obligatorio que todas las tablas de esa base de datos tengan un campo de clave principal. El comando para importar toda la tabla desde una base de datos es:

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

  • Sqoop - Lista de bases de datos

Puede enumerar las bases de datos presentes en relación con la base de datos utilizando Sqoop. La herramienta de listas de bases de datos Sqoop analiza y ejecuta la consulta 'SHOW DATABASES' en el servidor de la base de datos. El comando para listar bases de datos es:

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

  • Sqoop - Tablas de listas

También puede enumerar las tablas de una base de datos en particular en el servidor de base de datos MySQL usando Sqoop. La herramienta Sqoop list-tables analiza y ejecuta la consulta 'MOSTRAR TABLAS'. El comando para listar tablas es una base de datos:

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

  • Sqoop - Exportar

Como comentamos anteriormente, también puede exportar datos desde HDFS a la base de datos RDBMS. La tabla de destino debe existir en la base de datos de destino.Los datos se almacenan como registros en HDFS. Estos registros se leen, analizan y delimitan con un delimitador especificado por el usuario.La operación predeterminada es insertar todo el registro de los archivos de entrada en la tabla de la base de datos utilizando la instrucción INSERT. En el modo de actualización, Sqoop genera la instrucción UPDATE que reemplaza el registro existente en la base de datos.

Entonces, primero estamos creando una tabla vacía, donde exportaremos nuestros datos.

El comando para exportar datos de HDFS a la base de datos relacional es:

exportación de sqoop --connect jdbc: mysql: // localhost / employee --username edureka --table emp --export-dir / user / edureka / employee

  • Sqoop - Codegen

En la aplicación orientada a objetos, cada tabla de base de datos tiene una clase de objeto de acceso a datos que contiene métodos 'captador' y 'definidor' para inicializar objetos. Codegen genera la clase DAO automáticamente. Genera la clase DAO en Java, basada en la estructura Table Schema.

El comando para generar código java es:

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

Puede ver la ruta en la imagen de arriba donde se genera el código. Vayamos por la ruta y revisemos los archivos que se crean.

Espero que este blog sea informativo y de valor agregado para ti. Si está interesado en obtener más información, puede consultar este que le informa sobre Big Data y cómo Hadoop está resolviendo desafíos relacionados con Big Data.

Ahora que ha entendido Apache Sqoop, consulte el por Edureka, una empresa de aprendizaje en línea de confianza con una red de más de 250.000 alumnos satisfechos repartidos por todo el mundo. El curso de formación de certificación de Edureka Big Data Hadoop ayuda a los alumnos a convertirse en expertos en HDFS, Yarn, MapReduce, Pig, Hive, HBase, Oozie, Flume y Sqoop utilizando casos de uso en tiempo real en el dominio de Retail, Social Media, Aviación, Turismo, Finanzas.

Tienes una pregunta para nosotros? Menciónelo en la sección de comentarios y nos pondremos en contacto con usted.